HibernateTemplate 方法
来源:互联网 发布:淘宝详情页是什么 编辑:程序博客网 时间:2024/05/18 01:09
HibernateTemplate 提供非常多的常用方法来完成基本的操作,比如通常的增加、删除、修改、查询等操作, Spring 2.0 更增加对命名 SQL 查询的支持,也增加对分页的支持。大部分情况下,使用 Hibernate 的常规用法,就可完成大多数 DAO 对象的 CRUD 操作。
由于HibernateTemplate的原理与JdbcTemplate的原理类似,现在先讨论JdbcTemplate,在使用JDBC的时候,总是要处理繁琐的细节,例如Connection、statement的获得,SQLException的处理,Connection、Statement的关闭等问题。
使用Spring提供的org.springframework.jdbc.core.JdbcTemplate类被设计成线程安全,当中提供的一些操作方法封装了类似以上的流程。
要建立JdbcTemplate的实例就必须有一个DataSource对象:
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
可使用Spring的依赖注入方式。来代替自己实例化。
下面是 HibernateTemplate 的常用方法简介:
void delete(Object entity) :删除指定持久化实例
deleteAll(Collection entities) :删除集合内全部持久化类实例
find(String queryString) :根据 HQL 查询字符串来返回实例集合
findByNamedQuery(String queryName) :根据命名查询返回实例集合
get(Class entityClass, Serializable id) :根据主键加载特定持久化类的实例
save(Object entity) :保存新的实例
saveOrUpdate(Object entity) :根据实例状态,选择保存或者更新
update(Object entity) :更新实例的状态,要求 entity 是持久状态
setMaxResults(int maxResults) :设置分页的大小
============================重要================================
临时状态、持久状态、游离状态、脱管状态。
临时状态:又被称为瞬时状态,java中很普遍,new了一个对象,这个对象不与Session实例相关联。
持久状态:
持久的实例在数据库中都有对应的记录,并且还有持久化标识。
持久状态都会与Session、Transaction相关联。Session不会将数据给提交到数据库,而是继续持久着,等待Transaction执行commit方法来提交数据。持久化对象才会与数据库同步,持久化对象就被称为脏对象。
将临时状态转化为持久化状态:
1.Session save这个瞬时对象,使其持久化。
2.使用 find(),get(),load() 和 iterater() 待方法查询到的数据对象,将成为持久化对象。
游离状态:
持久化对象脱离了Session的对象,如被Session缓存清空过的对象,还是有对象的。
脱管状态:
本质上和游离状态差不多,只是比瞬时对象多了一个数据库记录标识值 id.,与Session相关联,后session关闭,对象仍然可以继续改变。
持久化对象变成脱管对象:当执行 close() 或 clear(),evict() 之后,持久对象会变为脱管对象。
游离对象变成脱管对象:
A.调用persist(),实体从游离转变到托管,最后变成持久化状态.
B.调用find()或Query执行查询,实体从持久变成托管.
C.调用refresh(),游离实体将被重新加载,变成托管状态.
D.调用merge(),将游离实体变成托管实体.
一.Session.save(user)运行机理;
1.把User对象加入缓存中,成为持久化对象。
2.选用映射文件指定的标识生成ID。
3.在Session清理缓存时执行:在底层生成insert语句,将对象存入数据库中。
如果在session.save()过程中,更改了User的属性,那么最终还是按照最终更改的来算,特别注意的是ID不能被修改。
二.Session.delete(user)
如果user是持久化对象,那么在session清理缓存的时候在底层执行delete操作。
如果user是游离态对象,那么先将user和session关联起来,最后按照user是持久化对象进行操作。
Save和update的区别:
Save是存储一个新的对象。
Update是把一个脱管对象或临时对象更新到数据库中。
Update和merge的区别:
当session中存在相同持久化标识的对象,用户给出的对象覆盖session已有的持久实例。
1.update会抛出异常。
2.使用merge的时候会将新生成的临时对象的属性复制到session已有的持久对象中,执行后临时对象依然是临时对象,持久化对象依然是持久化对象。
也就是说使用merge的时候会将新生成的临时对象的属性复制到session已有的持久对象中,执行后临时对象依然是临时对象。
三 get() 与load()方法的区别:
get方法首先查询session缓存,没有的话查询二级缓存,最后查询数据库;反而load方法创建时首先查询session缓存,没有就创建代理,实际使用数据时才查询二级缓存和数据库。
find/iterate查询操作四 find和iterato的区别主要是iterate采用了N+1次查询,对于大批量查询,比如查询10000条记录,那么iterate就要执行10000+1次查询,find和iterate应根据具体的实际
情况来使用,对于频繁的写操作对象,应使用find查询,而对于一些只读的数据对象,应使用iterate操作,因为iterate操作使用了Hibernate的缓存机制
五
bulkUpdate提供了批量删除和更新,直接转换为相应的update/delete SQL进行批量删除和更新。要注意的一个问题是,使用bulkUpdate操作,必须手工清除相关对象在Hibernate中的缓存(包括一级缓存和二级缓存)
六
一般情况下,只有HIberateTemplate提供的方法不能满足要求时才使用execute方法使用execute方法的重点是实现HibernateCallback的doInHibernate方法,它会传递一个Session实例,可以使用此Session实例操作数据库,由此看出execute方法的好处是应用程序不用关心session的创建和释放,只需要处理关心的业务逻辑即可。
- HibernateTemplate 方法
- HibernateTemplate相关方法
- hibernateTemplate方法总结
- 关于HibernateTemplate中的方法
- HibernateTemplate相关方法
- HibernateTemplate常用方法
- HibernateTemplate的常用方法
- HibernateTemplate的常用方法
- HibernateTemplate相关方法
- HibernateTemplate常用方法
- HibernateTemplate 中的查询方法
- HibernateTemplate 常用方法
- HibernateTemplate常用方法
- HibernateTemplate相关方法
- HibernateTemplate的常用方法
- HibernateTemplate相关方法
- hibernateTemplate常用方法
- HibernateTemplate的相关方法
- Java 通过 list 和 对象数组 来实现 简单的 分页显示
- 配置GDB支持STL调试
- Spell checker
- ASP.NET MVC处理文件上传示例
- Java基本概念
- HibernateTemplate 方法
- Erlang 与 c 函数 对接
- Jvm gc collectors
- 8086汇编杂记
- 小珂的游戏
- JAVA设计模式之策略模式
- 南邮-2047(地铁换线)
- anagrams两种解法 用map来优化查找
- 实验二