标签:没有 一级缓存 ansi 扩展 ber 自己 不同 对象 pen
核心开发接口介绍
1、hibernate_0500_CoreAPI
2、HiberanteAPI 文档需要单独下载 在线api链接:http://docs.jboss.org/hibernate/core/3.3/api
3、Configuration
a) AnnotationConfiguration
b) 进行配置信息的管理
c) 用来产生 SessionFactory
d) 可以在 configure方法中指定hibernate配置文件
e) 只需关注一个方法即:buildSessionFactory()
4、SchemaExport
5、SessionFactory
a) 用来产生和管理Session
b) 通常情况下每个应用只需要一个 SessionFactory
c) 除非要访问多个数据库的情况
d) 关注两个方法:openSession getCurrentSession
i.openSession 每次都是新的,需要close
ii.getCurrentSession从上下文找,有用旧的,没有建新的
1、用途:界定事务边界
2、事务提交自动close
3、current_session_context_class(jta/java transaction api thread)
a) thread 使用 connection
6、Session
a) 管理一个数据库的任务单元
b) 方法(CRUD)
i. save
ii. delete
iii. load
iv. get
v. get与load的区别
1.不存在对应记录是表现不一样
2.load返回的是代理对象,等到真正用到对象的内容时才发出sql语句
3.get 直接从数据库加载,不会延迟
vi.update
1.用来更新detached,更新完成后转为persistent状态
2.更新transient对象会报错(数据库有对应记录)
3.更新自己设定id的transient对象可以
4.p状态的字段只要设定不同字段就会发生更新
4.更新部分更改的字段
a) xml 设定 property 标签的update属性,annotation 设定@Column的updatable属性,不过这种方式很少用,不灵活,配置: @Column(updatable=false)
b) 使用xml中的dynamic-update,JPA 1.0 Annotation没有对应的属性。配置: <class name="Student" table="student" dynamic-update="true">
hibernate扩展?
i.同一个session可以,跨session不行,不过可以用merge()(不重要)
c) 使用HQL(EJBQL)(建议)的内容。示例: Query query = session.createQuery("update Student s set s.name=‘z5‘ where s.id = 1");
iv. saveOrUpdate
vii. find 方法已过时!
ix. clear 方法
1.无论是load还是get,都会首先查找缓存(一级缓存),如果没有,才会去数据库查找,调用clear()方法可以强制清除session缓存
ixi.flush 方法
1.可以强制进行从内存(session缓存)到数据库的同步
2.flushMode
x.调用flush方法可以强制进行从内存到数据库的同步!
7.SchemaExport
将表模式导出到数据库的命令行工具。 这个类也可以从应用程序内部调用。
代码: new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);
create方法:
View Code
8.Query接口
a) 参考Hibernate查询(HQL EJBQL)的内容
8.Note:
a)Hibernate 中设计很多非常非常细节的区别,但在实际应用中用的极少,请大家先享受写项目的乐趣,再来探讨这些细节问题
i.比如save和persist的区别
ii.merge,evict等方法
iii.比如refresh、lock等
b)建议的学习方法:动手实验
c)细节问题参考补充视频
三种状态
1、上一个project
2、三种状态的区分关键在于
a) 有没有ID
b) ID 在数据库中有没有
c) 在内存中有没有(session 缓存)
a) transient:内存中一个对象,没ID,缓存也没有
b) persistent:内存中有,缓存中有,数据库有,有ID
c) detached:内存有,缓存没有,数据库有,有ID
3、对这三种状态需要关注的问题是在改状态下如果进行数据的操作会发生什么结果,比如改变属性的值会不会发出update语句?
a) 强烈建议动手实验
b) 进行正常人的思考
c) 绝对不要去背这些东西!背过也并不代表你有多牛!
4、调用 flush 方法可以强制进行从内存到数据库的同步!
jar包链接: https://pan.baidu.com/s/1bprKHav 密码: 3fcx
链接: https://pan.baidu.com/s/1pKL8om3 密码: k7wx
标签:没有 一级缓存 ansi 扩展 ber 自己 不同 对象 pen
原文地址:http://www.cnblogs.com/ShawnYang/p/6721853.html