接着上一节,工程结构:

jar包没有变化;

一、HibernateUtil 封装:                                            

com.cy.util.HibernateUtil.java:

package com.cy.util;

import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration; public class HibernateUtil { private static final SessionFactory sessionFactory = buildSessionFactory(); private static SessionFactory buildSessionFactory(){
Configuration configuration = new Configuration().configure(); //实例化配置文件,默认指定的就是hibernate.cfg.xml
StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();//实例化服务登记,服务注册
return configuration.buildSessionFactory(serviceRegistry); //获取session工厂
} //获取sessionFactory,是单例的
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
}

二、XML 版CRUD 实现:                                            

对Student类进行xml配置,crud操作;

com.cy.model.student.java:

package com.cy.model;

public class Student {
private long id;
private String name; public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} @Override
public String toString() {
return "Student [id=" + id + ", name=" + name + "]";
} }

Student.hbm.xml:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.cy.model">
<class name="Student" table="t_student">
<!--
<id>代表主键
类的属性名是id,对应表中列名是stuId
-->
<id name="id" column="stuId">
<!-- 主键生成策略,这里采用mysql的native,自增 -->
<generator class="native"></generator>
</id> <!-- 普通属性采用property
不写column,那么数据库table的列名也叫name
-->
<property name="name"></property> </class> </hibernate-mapping>

com.cy.service.StudentTest.java:--这里是测试类,对Student进行CRUD:

package com.cy.service;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory; import com.cy.model.Student;
import com.cy.util.HibernateUtil; public class StudentTest { private static SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); //添加学生
private void add(){
Session session = sessionFactory.openSession(); //生成一个session
session.beginTransaction(); //开启事务 Student s = new Student();
s.setName("张三");
session.save(s); session.getTransaction().commit(); //提交事务
session.close(); //关闭session
} //删除学生
private void delete(){
Session session = sessionFactory.openSession();
session.beginTransaction(); Student student = (Student) session.get(Student.class, 1L);
session.delete(student); session.getTransaction().commit();
session.close();
} //更新学生
private void update(){
Session session = sessionFactory.openSession();
session.beginTransaction(); Student student = (Student) session.get(Student.class, 6L);
student.setName("张三22");
session.save(student); session.getTransaction().commit();
session.close();
} //查找所有学生
private void getAllStudents(){
Session session = sessionFactory.openSession();
session.beginTransaction(); String hql = "from Student";
Query query = session.createQuery(hql);
List<Student> studentList = query.list();
for(Student student : studentList){
System.out.println(student);
} session.getTransaction().commit();
session.close();
} public static void main(String[] args) {
StudentTest studentTest = new StudentTest();
// studentTest.add();
// studentTest.delete();
// studentTest.update();
studentTest.getAllStudents();
}
}

hibernate.cfg.xml中加入Student映射(为了方便后面,也加入了Teacher):

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!--数据库连接设置 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property> <!-- 方言 -->
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property> <!-- 控制台显示SQL -->
<property name="show_sql">true</property> <!-- 自动更新表结构 -->
<property name="hbm2ddl.auto">update</property> <mapping resource="com/cy/model/Student.hbm.xml"/>
<mapping class="com.cy.model.Teacher"/>
</session-factory> </hibernate-configuration>

StudentTest.java运行main函数,结果:

删除:

修改:

查询所有:

三、注解版CRUD 实现                                                

1.注解版CRUD:注解版的很方便,官方也推荐使用;
2.运行测试程序,hibernate会根据映射关系,如有没有表的话,自动创建表。(如果配置了hbm2ddl.auto为update);

这里是对Teacher类进行注解的配置,然后进行CRUD操作:

com.cy.model.Teacher.java:

package com.cy.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table; import org.hibernate.annotations.GenericGenerator; //@Entity代表Teacher是一个映射实体
@Entity
@Table(name="t_teacher")
public class Teacher {
private long id;
private String name; //@Id代表id是一个主键
//@GenericGenerator配置主键生成策略 name是起个名字,strategy是具体的策略;
//@GeneratedValue配置生成策略为@GenericGenerator的名字
@Id
@GeneratedValue(generator="_native")
@GenericGenerator(name="_native",strategy="native")
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} @Override
public String toString() {
return "Teacher [id=" + id + ", name=" + name + "]";
} }

将Teacher类加入hibernate.cfg.xml:

<mapping class="com.cy.model.Teacher"/>

com.cy.service.TeacherTest.java测试代码:

package com.cy.service;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory; import com.cy.model.Teacher;
import com.cy.util.HibernateUtil; public class TeacherTest { private static SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); //添加老师
private void add(){
Session session = sessionFactory.openSession(); //生成一个session
session.beginTransaction(); //开启事务 Teacher s = new Teacher();
s.setName("张三");
session.save(s); session.getTransaction().commit(); //提交事务
session.close(); //关闭session
} //删除老师
private void delete(){
Session session = sessionFactory.openSession();
session.beginTransaction(); Teacher Teacher = (Teacher) session.get(Teacher.class, 1L);
session.delete(Teacher); session.getTransaction().commit();
session.close();
} //更新老师
private void update(){
Session session = sessionFactory.openSession();
session.beginTransaction(); Teacher Teacher = (Teacher) session.get(Teacher.class, 4L);
Teacher.setName("张老师22");
session.save(Teacher); session.getTransaction().commit();
session.close();
} //查找所有老师
private void getAllTeachers(){
Session session = sessionFactory.openSession();
session.beginTransaction(); String hql = "from Teacher";
Query query = session.createQuery(hql);
List<Teacher> TeacherList = query.list();
for(Teacher Teacher : TeacherList){
System.out.println(Teacher);
} session.getTransaction().commit();
session.close();
} public static void main(String[] args) {
TeacherTest TeacherTest = new TeacherTest();
// TeacherTest.add();
// TeacherTest.delete();
// TeacherTest.update();
TeacherTest.getAllTeachers();
}
}

测试结果和StudentTest结果差不多,不再说明了。打印出来的语句也基本一样的。

Hibernate学习2—Hibernate4 CRUD体验初步的更多相关文章

  1. (二)Hibernate4 CRUD 体验

    所有的学习我们必须先搭建好hibernate的环境(1.导入对应的jar包,2.hibernate.cfg.xml,3.XXXX.hbm.xml) 第一节:HibernateUtil 封装 导入对应的 ...

  2. Hibernate学习笔记(一)

    2016/4/18 19:58:58 Hibernate学习笔记(一) 1.Hibernate框架的概述: 就是一个持久层的ORM框架. ORM:对象关系映射.将Java中实体对象与关系型数据库中表建 ...

  3. Hibernate 学习笔记一

    Hibernate 学习笔记一 今天学习了hibernate的一点入门知识,主要是配置domain对象和表的关系映射,hibernate的一些常用的配置,以及对应的一个向数据库插入数据的小例子.期间碰 ...

  4. 第三次随笔--安装虚拟机及学习linux系统初体验

    第三次随笔--安装虚拟机及学习linux系统初体验 ·学习基于VirtualBox虚拟机安装Ubuntu图文教程在自己笔记本上安装Linux操作系统 首先按照老师的提示步骤进行VirtualBox虚拟 ...

  5. hibernate学习系列-----(2)hibernate核心接口和工作机制

    在上一篇文章hibernate学习系列-----(1)开发环境搭建中,大致总结了hibernate的开发环境的搭建步骤,今天,我们继续了解有关hibernate的知识,先说说这篇文章的主要内容吧: C ...

  6. Hibernate学习之——搭建log4j日志环境

    昨天讲了Hibernate开发环境的搭建以及实现一个Hibernate的基础示例,但是你会发现运行输出只有sql语句,很多输出信息都看不见.这是因为用到的是slf4j-nop-1.6.1.jar的实现 ...

  7. Hibernate学习笔记(二)

    2016/4/22 23:19:44 Hibernate学习笔记(二) 1.1 Hibernate的持久化类状态 1.1.1 Hibernate的持久化类状态 持久化:就是一个实体类与数据库表建立了映 ...

  8. Hibernate学习笔记-Hibernate HQL查询

    Session是持久层操作的基础,相当于JDBC中的Connection,通过Session会话来保存.更新.查找数据.session是Hibernate运作的中心,对象的生命周期.事务的管理.数据库 ...

  9. Linux入门学习教程:虚拟机体验之KVM篇

    本文中可以学习到的命令: 1. aptitude 是apt-get 不会产生垃圾的版本 2.       dpkg -L virtualbox 显示属于该包的文件 lsmod | grep kvmfi ...

随机推荐

  1. html5 圆角ie8

    http://files.cnblogs.com/files/panmy/%E5%9C%86%E8%A7%92.rar

  2. 数据仓库(Data Warehouse)建设

    数据仓库初体验 数据库仓库架构以前弄的很简单:将各种源的数据统一汇聚到DW中,DW没有设计,只是将所有数据汇聚起来: ETL也很简单,只是将数据同步到DW中,只是遇到BUG时,处理一些错误数据,例如: ...

  3. (四) ffmpeg filter学习-filter命令学习

    http://blog.csdn.net/joee33/article/details/51946712 http://blog.csdn.net/tkp2014/article/details/53 ...

  4. 浅谈深度学习中的激活函数 - The Activation Function in Deep Learning

    原文地址:http://www.cnblogs.com/rgvb178/p/6055213.html版权声明:本文为博主原创文章,未经博主允许不得转载. 激活函数的作用 首先,激活函数不是真的要去激活 ...

  5. Android深入理解JNI(一)JNI原理与静态、动态注册

    前言 JNI不仅仅在NDK开发中应用,它更是Android系统中Java与Native交互的桥梁,不理解JNI的话,你就只能停留在Java Framework层.这一个系列我们来一起深入学习JNI. ...

  6. strip()函数和 split()函数

    一:python strip()函数介绍 函数原型:strip可以删除字符串的某些字符 声明:s为字符串,rm为要删除的字符序列 s.strip(rm)        删除s字符串中开头.结尾处,位于 ...

  7. JMter请求参数中文显示乱码

    如上图所示,上传的参数为中文的时候,显示不出来,解决方法如下: 1.进入Jmter安装文件bin文件夹,找到文件jmeter.properties 2.在该文件找到jsyntaxtextarea.fo ...

  8. [Linux] 使用rename批量重命名文件

    例如把所有png文件的后缀改为jpg $ rename 's/png/jpg/' *png

  9. crm--01

    需求: 将课程名称与班级综合起来 class ClassListConfig(ModelSatrk): # 自定义显示方式 def display_class(self,obj=None,is_hea ...

  10. Python3 字符串操作

    截掉指定字符串 # 截掉指定字符串 string.strip("what you want to delete") #截掉字符串左边的空格 string.lstrip() #截掉字 ...