Hibernate5.x的CRUD功能测试

Posted dielianhua

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate5.x的CRUD功能测试相关的知识,希望对你有一定的参考价值。

一、实现CRUD操作

1、实现思路:

第一步 加载hibernate核心配置文件

第二步 创建SessionFactory对象

第三步 使用SessionFactory创建session对象

第四步 开启事务

第五步 写具体逻辑 crud操作

第六步 提交事务

第七步 关闭资源

	/**
	 * Session(重点)
	 * 1 session类似于jdbc中的connection
	 * 2 调用session里面不同的方法实现crud操作
	 * (1)添加save方法 (2)修改update方法
	 * (3)删除delete方法(4)根据id查询get方法
	 * 3 session对象单线程对象
	 * (1)session对象不能共用,只能自己使用
	 */

2、添加操作

	//添加功能
	@Test
	public void testAdd() {
		//第一步 加载hibernate核心配置文件
		//到src下面找到名称是hibernate.cfg.xml
		//在hibernate里面封装对象
		Configuration cfg = new Configuration();
		cfg.configure();
		//第二步 创建sessionFactory对象
		//读取hibernate核心配置文件内容,创建sessionFactory
		//在过程中,根据映射关系,在配置数据库里面把表创建
		SessionFactory sessionFactory = cfg.buildSessionFactory();
		//第三步 使用sessionFactory创建session对象
		//类似于连接
		Session session = sessionFactory.openSession();
		//第四步 开启事务
		Transaction tx = session.beginTransaction();
		//第五步 写具体逻辑crud操作
		//添加操作
		User user = new User();
		user.setUsername("白白");
		user.setPassword("1314");
		user.setAddress("中国");
		//调用session的方法实现添加
		session.save(user);
		//第六步 提交事务
		tx.commit();
		//第七步 关闭资源
		session.close();
		sessionFactory.close();
	}

为了方便,我们可以编写一个工具类

/**
 * 工具类,将获取核心配置文件的代码进行整合
 * @author 葛云霞
 * 获取核心配置文件标签,写静态代码块实现
 */
public class DUtils {
	//写静态代码块实现 静态代码快在类加载时候执行 执行一次
	static Configuration cfg = null;
	static SessionFactory sessionFactory = null;
	//静态代码块实现
	static {
		//加载核心配置文件
		cfg = new Configuration();
		cfg.configure();
		sessionFactory = cfg.buildSessionFactory();
	}
	//提供方法返回sessionFactory
	public static SessionFactory getSessionFactory() {
		return sessionFactory;
	}
	//获取本地线程Session
	public static Session getSessionObject() {
		return sessionFactory.getCurrentSession();
	}
}

3、删除操作

	//删除功能(调用工具类)
	@Test
	public void testDelete() {
		//1 调用工具类得到sessionFactory
		SessionFactory sessionFactory = DUtils.getSessionFactory();
		//2 获取session
		Session session = sessionFactory.openSession();
		//3 开启事务
		Transaction tx = session.beginTransaction();
		//4 删除操作 调用session里面delete方法实现
		User user = session.get(User.class, 1);//可以通过User user = new User(); user.setUid(1);
		session.delete(user);
		//第六步 提交事务
		tx.commit();
		//第七步 关闭资源
		session.close();
		sessionFactory.close();
	}

 4、修改操作

	//修改操作(调用工具类)
	@Test
	public void testUpdate() {
		//1 调用工具类得到sessionFactory
		SessionFactory sessionFactory = DUtils.getSessionFactory();
		//2 获取session
		Session session = sessionFactory.openSession();
		//3 开启事务
		Transaction tx = session.beginTransaction();
		//4 修改操作 调用session里面update方法实现
		User user = session.get(User.class, 2);
		user.setUsername("笑笑");
		session.update(user);
		//第六步 提交事务
		tx.commit();
		//第七步 关闭资源
		session.close();
		sessionFactory.close();
	}

 5、查询操作

	//查询操作(调用操作类)
	@Test
	public void testGet() {
		//1 调用工具类得到sessionFactory
		SessionFactory sessionFactory = DUtils.getSessionFactory();
		//2 获取session
		Session session = sessionFactory.openSession();
		//3 开启事务
		Transaction tx = session.beginTransaction();
		//4 根据id查询 调用session里面的get方法
		User user = session.get(User.class, 3);
		System.out.println(user);
		//第六步 提交事务
		tx.commit();
		//第七步 关闭资源
		session.close();
		sessionFactory.close();
	}

 另外我们有一些细节问题需要了解

	/**
	 * 实体类对象有三种 (1)瞬时态 (2)持久态 (3)托管态
	 * (1)瞬时态:对象里面没有id值,对象与session没有关联
	 * User user = new User();
	 * user.setName("丽丽");
	 * user.setPassword("1234");
	 * (2)持久态:对象里面有id值,对象与session没有关联
	 * User user = session.get(User.class,1);
	 * (3)托管态:对象里面有id值,对象与session有关联
	 * User user = new User();
	 * user.setUid(3);
	 */
//三种状态的相互转换
	//saveOrUpdate方法:实现添加 实现修改
	/**
	 * 实体类对象状态是瞬时态,做添加
	 * 持久态 托管态都是做修改
	 */

	//通过getCurrentSession() :该方法是获取本地的session 来编写上面的代码
	@Test
	public void testSession() {
		SessionFactory sessionFactory = null;
		Session session = null;
		Transaction tx = null;
		try {
			sessionFactory = DUtils.getSessionFactory();
			session = sessionFactory.getCurrentSession();//使用该方法,不需要再关闭session和sessionFactory,要不然会报错
			//开启事务
			tx = session.beginTransaction();
			//增删改查方法编写的位置
			//添加
			User user = new User();
			user.setUsername("王五");
			user.setPassword("1234");
			user.setAddress("中国");
			session.save(user);
			//提交事务
			tx.commit();
		}catch(Exception e) {
			e.printStackTrace();
			//回滚事务
			tx.rollback();
		} 
	}

以上是关于Hibernate5.x的CRUD功能测试的主要内容,如果未能解决你的问题,请参考以下文章

11SpringBoot-CRUD-thymeleaf公共页面元素抽取

Hibernate5.x缓存机制

Extjs使用商店代理api; CRUD

初入AngularJS基础门

在测试之间传递JUnit数据

[Angularjs]asp.net mvc+angularjs+web api单页应用之CRUD操作