Hibernate中关于持久化类的三种状态
来源:互联网 发布:手机淘宝昵称怎么修改 编辑:程序博客网 时间:2024/06/06 11:04
关于持久化类的三种状态
package com.hibernate.demo1;import java.util.List;import org.hibernate.Criteria;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.Transaction;import org.hibernate.criterion.Restrictions;import org.junit.Test;import com.hibernate.utils.HibernateUtils;/*** * hibernate入门案例中的API详解 * @author Administrator * */public class HibernateTest2 { @Test /**** * 群持久化对象的三种状态 */ public void demo1(){ //1通过工具类获取Session Session session = HibernateUtils.openSession(); //2开启事务 Transaction tx = session.beginTransaction(); //3操作 //向数据库插入一条记录 Book book = new Book(); // 瞬时态:没有位移标识OID(主键id),没有与session关联 // | // | book.setName("盗墓笔记"); // | book.setAuthor("南派三叔"); // | book.setPrice(100d); // | // \|/ session.save(book); // 持久太:有唯一标识OID,与session关联 //4事务提交 // | tx.commit(); // | //5释放资源 // | session.close(); // | // \|/ book.setName("XXX"); // 托管态:有唯一标识OID,没有与session关联 } @Test /**** * 演示持久太的对象可以以自动更新数据库 */ public void demo2(){ //1通过工具类获取Session Session session = HibernateUtils.openSession(); //2开启事务 Transaction tx = session.beginTransaction(); //3操作 /** 获取一个持久太对象了 **/ Book book = (Book) session.get(Book.class, 1); book.setName("精绝古城"); /** 此处可以省略一个update **/ //4事务提交 tx.commit(); /**=================一级缓存【与session的生命周期一致,自带的,不可卸载】================================ * 提交后,执行了一个update, * 依赖于hibernate一级缓存【就是将数据库/硬盘文件中数据,放到缓存中(就是内存中一块空间), * 当再次使用时,可以直接从内存中获取数据信息】 **/ //5释放资源 session.close(); } @Test /**** * 证明一级缓存的存在 */ public void demo3(){ //1通过工具类获取Session Session session = HibernateUtils.openSession(); //2开启事务 Transaction tx = session.beginTransaction(); //3操作 /** save方法可以向一级缓存中存放数据 **/// Book book = new Book();// book.setName("盗墓笔记"); // book.setAuthor("南派四叔");// book.setPrice(120d); /** save执行后会有一个返回值(图书id) **/// Integer id = (Integer) session.save(book); /** 根据该id值查询这个Book的信息 **/// Book book2 = (Book) session.get(Book.class, id);// System.out.println(book2); /** =======上述方式不太明显,以下分别用两次get执行两次查询id=1的书【按道理执行两次get应发送两条sql语句,实际上只发送一次,足以证明第二次查询使用的是一级缓存中的数据】================== **/ /** 数据库中第一本书的信息**/ Book book3 = (Book) session.get(Book.class, 1); System.out.println(book3); /** 一级缓存中中第一本书的信息**/ Book book4 = (Book) session.get(Book.class, 1); System.out.println(book4); //4事务提交 tx.commit(); //5释放资源 session.close(); } @Test /**** * 深入了解持久态的对象可以以自动更新数据库 * 基于一级缓存:快照区 */ public void demo4(){ //1通过工具类获取Session Session session = HibernateUtils.openSession(); //2开启事务 Transaction tx = session.beginTransaction(); //3操作 Book book = (Book) session.get(Book.class, 1); /** 将信息存储于快照区 **/ book.setName("天龙八部");//先向一级缓存区的【name】修改为【"天龙八部"】-----中间会进行一个比对查看是否一致,如果一致不更新(不会执行update语句),如果不一致----再向快照区中的【name】修改为【"天龙八部"】(执行update语句)。 //4事务提交 tx.commit(); //5释放资源 session.close(); }}
0 0
- Hibernate中关于持久化类的三种状态
- Hibernate中持久化对象的三种状态
- 【6】Hibernate持久化类的三种状态
- 【hibernate进阶】hibernate持久化对象的三种状态
- hibernate的持久化对象的三种状态
- Hibernate持久化对象的三种状态
- Hibernate持久化对象的三种状态
- Hibernate持久化对象的三种状态
- Hibernate持久化对象的三种状态
- Hibernate持久化对象的三种状态 .
- Hibernate持久化对象的三种状态
- Hibernate之持久化对象的三种状态
- Hibernate持久化对象的三种状态
- Hibernate持久化对象的三种状态
- hibernate持久化对象的三种状态
- Hibernate持久化对象的三种状态
- Hibernate持久化对象的三种状态
- 【SSH框架】--Hibernate持久化对象的三种状态
- 爱油科技基于SpringCloud的微服务实践
- c++调用win32API控制打印机打印
- [Python爬虫之路2]爬取百度贴吧内容
- 解决openwrt刷上后没有无线,art也刷了
- HDU2054_A==B?_字符串处理
- Hibernate中关于持久化类的三种状态
- sql 查出一张表中重复的所有记录数据
- 数据库——游标
- 网站统计中的数据收集原理及实现(有说前端如何埋点)
- JAVA动态代理模拟
- 队列和栈
- Python模块结构与布局操作实例
- 原型继承、构造函数继承
- nuwa总结