Hibernate核心开发接口
1、Configurate
a)AnnotationConfiguration
b)进行配置信息管理
c)用来产生SessionFactory
d)可以在configure中指定hibernate配置文件
sessionFactory = newAnnotationConfiguration().configure(“hibernate.xml”).buildSessionFactory();
f) 只需关注一个方法即:buildSessionFactory()
2、SessionFactory
a)用来产生和管理Session
b)通常情况下每个应用只需要一个SessionFactory
c)关注两个方法即:openSessiongetCurrentSession
*openSession 每次都是新的,需要close
*getCurrentSession从上下文找,如果有,用旧的,如果没有,建新的
1)用途:界定事务边界
2)事务提交自动close(不用session.close())
3)须在hibernate.cfg.xml文件中加入<propertyname="current_session_context_class">thread</property>
(取值有jta、thread、managed、custom.class)
a)Thread使用connection
b) JTA TransactionManager管理分布式事务,即管理多个数据库。往往是由applicationServer提供,Tomcat不提供。
3、hibernate的三种状态
a)transient:内存中一个对象,没ID,缓存中也没有
b)persistent:内存中有,缓存中有,数据库有(ID)
c)detached:内存有,缓存没有,数据库有(ID)
4、Session
a)管理一个数据库的任务单元
b)方法(CRUD):save、delete、saveorUpdate、load、get
c)get与load的区别
1)不存在对应记录时表现不一样
2)load返回的是代理对象,等到真正用到对象的内容时才发出sql语句
3)get直接从数据库加载,不会延迟
d)clear方法
1)无论是load还是get,都会首先查找缓存(一级缓存),如果没有,才会去数据库加载,调用clear()方法可以强制清除session缓存
2)调用flush()方法可以强制进行从内存到数据库的同步
c) update方法
1)用来更新detached对象,更新完成后转为persistent状态
2)更新transiant对象会报错
3)更新自己设定ID的transient对象可以(数据库有对应记录)
4)P状态的对象只要庙宇不同字段就会发生更新
5)更新部分更改的字段
*XML设定 property标签的update属性,annotation设定column的updatable属性,不过这种方式很少用,因为不灵活
*使用XML中的dynamic-update,JPA Annotation没有对应的属性
*使用HQL(常用)
5、SchemaExport接口
可以在程序中控制生成建表语句