第一节:HibernateUtil 封装
第二节:XML 版CRUD 实现
第三节:注解版 CRUD 实现
第四节:Junit4 单元测试框架引入
前言:
目录
(2)XML版CRUD实现。在StudentTest.java里,写方法,进行CRUD
前言:
CRUD)(增删改查): 增加(Create)、读取(Retrieve)、更新(Update)和删除(Delete)
(还是使用的是之前的项目)
一:
1.为什么要封装一个HibernateUtil?
答案:因为很多代码需要重复使用,每次都要写的话,太过于麻烦,所以封装起来,更方便人使用。
(1)建立:HibernateUtil,封装代码
右键【src】-【Class】
Package : util
Name : HibernateUtil -【Finish】
其内容如下:
源代码如下:
package util;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
public class HibernateUtil {
//再来定义一个不可变的调用如下方法:
private static final SessionFactory sessionFactory=buildSessionFactory();
//首先定义一个获取工厂的方法。
private static SessionFactory buildSessionFactory(){
Configuration configuration=new Configuration().configure(); // 实例化配置文件
ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); // 实例化服务登记
return configuration.buildSessionFactory(serviceRegistry); // 获取Session工厂
}
//实时获取当前的Session工厂
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
}
这样,之前的StudentTest.java就不用那么复杂了:
使用封装之后的方法,它变成了如下的模样:
测试并运行了一下依旧是没有问题的。去看了看数据库也是添加进了内容的。
(2)XML版CRUD实现。在StudentTest.java里,写方法,进行CRUD
【注】
为什么说这个是XML版本的,因为这个是根据之前 对象的hibernate配置文件 进行的实现, 就是那个 Student.hbm.xml 文件。
这个方法与注解版CRUD的实现对比,这种方法是比较麻烦一点的方法。
它是以面向对象的形式增删改查。
【1】增加操作:
代码如下:
结果如下:
其源代码为:
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
//sessionFactory.close(); // 关闭session工厂
}
【2】删除操作:
代码如下:
结果如下:
源代码如下:
private void update()//更新的话同样也是获得一个实体并对其进行操作。
{
Session session=sessionFactory.openSession(); // 生成一个session
session.beginTransaction(); // 开启事务
Student student=(Student)session.get(Student.class,Long.valueOf(2));
//session的get方法,前面写类,后面写主键,再进行强制类型转换
student.setName("张三2");
session.save(student);
session.getTransaction().commit(); // 提交事务
session.close(); // 关闭session
//sessionFactory.close(); // 关闭session工厂
}
【3】更新操作:
代码如下:
结果如下;
这个原因是因为我更新了一下刚才被删除的id为1的同学的名字,由于已经被删除了,数据库里面没有id为1的,所以报错了。
所以我把valueOf(1)给改成了valueOf(2)
数据库删除数据成功。
源代码如下:
private void update()//更新的话同样也是获得一个实体并对其进行操作。
{
Session session=sessionFactory.openSession(); // 生成一个session
session.beginTransaction(); // 开启事务
Student student=(Student)session.get(Student.class,Long.valueOf(2));
//session的get方法,前面写类,后面写主键,再进行强制类型转换
student.setName("张三2");
session.save(student);
session.getTransaction().commit(); // 提交事务
session.close(); // 关闭session
//sessionFactory.close(); // 关闭session工厂
}
【4】查询数据:
代码如下:
结果如下:
在查询操作里,会用到sql,这里用到的是hql,这是一种面向对象的sql。
查询成功:
源代码如下:
private void getAllStudent(){
Session session=sessionFactory.openSession(); // 生成一个session
session.beginTransaction(); // 开启事务
//查询的话用一下sql