1.configuration(配置信息管理,产生sessionfactory)
sessionfactory管理一系列的连接池
opensession 永远打开新的,需要手动close
getcurrentsession如果当前环境有,就会用已经存在的,没有就创建新的
一旦提交就没了
getcurrentsession主要用于界定事务边界,事务提交自动close
上下文:在hibernate.cfg.xml里面改 currentsession_context_class
thread:线程 当前线程有没有一个对象,没有就创建i新的,使用connection
jta: 分布式事务 ,Java tarsaction api多数由中间键服务器提供 Tomcat不具备该能力
manager:手动管理事务
custormclass:自己定义
如果使用getcurrentsession必须设定上下文环境
geucurrentsession和sessionopen拿到的类 具体实现可能不一样 因此一般情况下 不建议混用
如果址用hibernate 就要写trycatch
用spring的话就不用写try catch
save();设定一个主键,id
首先搞懂三种状态
三种状态
transient :内存中的一个对象 缓存中没有对应的id和value
Persistent:内存中有 缓存中有 数据库有 有id
Datached: 内存有 缓存没有 数据库有 有id
save方法即是把transient转化为Persisitence
delete方法
Load
@Test public void testLoad() { Session session = sessionFactory.getCurrentSession(); session.beginTransaction(); Teacher t = (Teacher)session.load(Teacher.class, 1); session.getTransaction().commit(); System.out.println(t.getClass()); //System.out.println(t.getName()); }
1,自动打包为intege 实现了序列化接口
get
@Test public void testGet() { Session session = sessionFactory.getCurrentSession(); session.beginTransaction(); Teacher t = (Teacher)session.get(Teacher.class, 1); session.getTransaction().commit(); System.out.println(t.getClass()); //System.out.println(t.getName()); }
用load拿出东西的时候才会发出sql语句,不存在对应记录不拿东西不会报错,返回代理对象()
用get拿出对象的时候是直接在数据库加载,不存在对应记录不拿东西也会报错
update
第一种 有detach到persistence 同时数据库更新
@Test public void testUpdate1() { Session session = sessionFactory.getCurrentSession(); session.beginTransaction(); Teacher t = (Teacher)session.get(Teacher.class, 1); session.getTransaction().commit(); t.setName("zhanglaoshi"); Session session2 = sessionFactory.getCurrentSession(); session2.beginTransaction(); session2.update(t); session2.getTransaction().commit(); }
更新trasent会报错
如果transent设置id数据库并且存在
数据库得有对应的记录
@Test public void testUpdate2() { Teacher t = new Teacher(); t.setName("zhanglaoshi"); Session session2 = sessionFactory.getCurrentSession(); session2.beginTransaction(); session2.update(t); session2.getTransaction().commit(); }
如果有一个字段特别长 全改就会变低
32集第九分钟
Hibernate学习笔记2.4(Hibernate核心开发接口和三种状态)
原文:https://www.cnblogs.com/frankzone/p/9445167.html