- 浏览: 1499770 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (798)
- struts2 (42)
- servlet (20)
- quartz (4)
- jquery & ajax (24)
- tomcat (5)
- javascript (15)
- struts1 (8)
- 搜索关键字及链接 (3)
- fckeditor (3)
- Apache (5)
- spring (22)
- linux (3)
- 企业应用 (8)
- 综合应用 (13)
- 服务器 (2)
- 数据库 (85)
- 性能调优 (21)
- 网络应用 (15)
- 缓存技术 (8)
- 设计模式 (39)
- 面试题 (7)
- 程序人生&前辈程序员 (29)
- java基础 (59)
- hibernate (75)
- log4j (4)
- http (11)
- 架构设计 (28)
- 网页设计 (12)
- java邮件 (4)
- 相关工具 (11)
- ognl (7)
- 工作笔记 (18)
- 知识面扩展 (12)
- oracle异常 (1)
- 正则表达式 (2)
- java异常 (5)
- 项目实践&管理 (1)
- 专业术语 (11)
- 网站参考 (1)
- 论坛话题 (2)
- web应用 (11)
- cxf&webservice (22)
- freemarker (3)
- 开源项目 (9)
- eos (1)
- ibatis (6)
- 自定义标签 (3)
- jsp (3)
- 内部非公开文档(注意:保存为草稿) (0)
- 国内外知名企业 (2)
- 网店 (3)
- 分页 (1)
- 消费者习惯 (2)
- 每日关注 (1)
- 商业信息 (18)
- 关注商业网站 (1)
- 生活常识 (3)
- 新闻 (2)
- xml&JSON (5)
- solaris (1)
- apache.common (3)
- BLOB/CLOB (1)
- lucene (2)
- JMS (14)
- 社会进程 (8)
- SSH扩展 (2)
- 消费心理 (1)
- 珠三角 (1)
- 设计文档 (1)
- XWork&webwork (1)
- 软件工程 (3)
- 数据库及链接 (1)
- RMI (2)
- 国内外知名企业&人物 (1)
最新评论
-
司c马:
简介易懂、
OutputStream和InputStream的区别 -
在世界的中心呼喚愛:
解决我的问题
Java获取客户端的真实IP地址 -
bo_hai:
都是些基本的概念呀!
SSO -
tian_4238:
哥们,你也是搞水利这块的吧。
巧用SQLQuery中的addScalar -
loveEVERYday:
java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp小结
HibernateTemplate还提供一种更加灵活的方式来操作数据库,通过这种方式可以完全使用Hibernate的操作方式。HibernateTemplate的灵活访问方式是通过如下两个方法完成:
q Object execute(HibernateCallback action)
q List execute(HibernateCallback action)
这两个方法都需要一个HibernateCallback的实例,HibernateCallback实例可在任何有效的Hibernate数据访问中使用。程序开发者通过HibernateCallback,可以完全使用Hibernate灵活的方式来访问数据库,解决Spring封装Hibernate后灵活性不足的缺陷。HibernateCallback是一个接口,该接口只有一个方法doInHibernate(org.hibernate.Session session),该方法只有一个参数Session。
通常,程序中采用实现HibernateCallback的匿名内部类来获取HibernateCallback的实例,方法doInHibernate的方法体就是Spring执行的持久化操作。具体代码如下:
public class PersonDaoImpl implements PersonDao
{
// 私有实例变量保存SessionFactory
private SessionFactory sessionFactory;
// 依赖注入必须的setter方法
public void setSessionFactory(SessionFactory sessionFactory){
this.sessionFactory = sessionFactory;
}
/**
*
* 通过人名查找所有匹配该名的Person实例
*
* @param name
* 匹配的人名
*
* @return 匹配该任命的全部Person集合
*
*/
public List findPersonsByName(final String name){
// 创建HibernateTemplate实例
HibernateTemplate hibernateTemplate =new HibernateTemplate(this.sessionFactory);
// 返回HibernateTemplate的execute的结果
return (List) hibernateTemplate.execute(
// 创建匿名内部类
new HibernateCallback(){
public Object doInHibernate(Session session) throws HibernateException{
// 使用条件查询的方法返回
List result = session.createCriteria(Person.class)
.add(Restrictions.like("name", name+"%").list();
return result;
}
});
}
}注意:方法doInHibernate方法内可以访问Session,该Session对象是绑定到该线程的Session实例。该方法内的持久层操作,与不使用Spring时的持久层操作完全相同。这保证对于复杂的持久层访问,依然可以使用Hibernate的访问方式。
发表评论
-
自定义用户类(UserType)的使用
2011-08-04 10:46 1854学习hibernate有段时间了,最近复习这门技术时看到了自定 ... -
技巧:利于ThreadLocal模式管理Session
2011-08-02 10:31 1263在利用Hibernate开发DAO模块时,我们和Session ... -
Hibernate中的回调与拦截机制
2011-07-27 17:31 1459在某些情况下,我们需要对实体的CURD操作进行捕获并执行一些操 ... -
HibernateTemplate中HibernateCallback的事务
2011-07-04 14:41 1439目的:使用HibernateTemplate执行execute ... -
Hibernate session FlushMode有五种属性
2011-07-04 13:59 17281、NEVER:已经废弃了,被MANUAL取代了2 MANUA ... -
数据库持久层——浅谈hibernate中的Session
2011-07-01 22:49 1665大多数情况下,Session 管理的目标聚焦于通过合理的设 ... -
详解Hibernate Session
2011-07-01 22:42 1487这里介绍Hibernate Session,Ses ... -
HttpSession与Hibernate中Session的区别
2011-07-01 22:41 1288一、javax.servlet.http.HttpSess ... -
巧用SQLQuery中的addScalar
2011-06-02 17:16 5741当我们用HQL进行子查询的时候,如select * from ... -
hibernate中SQLQuery的addEntity();方法
2011-04-13 14:48 2888如果使用原生sql语句进行query查询时,hibernate ... -
Hibernate的clear(),flush(),evict()方法详解
2011-03-24 11:18 17691.Clear 方法 无论是Load 还是 G ... -
hibernate模糊查询-Restrictions.ilike & Expression.like
2011-03-11 10:32 16352Criteria criteria = session.c ... -
Hibernate分页查询小结
2011-03-10 11:14 1825通常使用的Hibernate通常是三种:hql查询,QBC查询 ... -
current_session_context_class
2011-03-07 15:31 1292此设置的作用如下: What does sessionFac ... -
Hibernate的拦截器和监听器
2010-12-14 15:06 1384核心提示:最近项目需要,用到了Hibernate的拦截器和 ... -
孙卫琴.精通Hibernate:Java对象持久化技术详解_触发器使缓存与数据库不一致
2010-12-14 08:46 1382p198 -
孙卫琴.精通Hibernate:Java对象持久化技术详解_优化报表查询的性能
2010-12-13 17:51 1268p332 -
孙卫琴.精通Hibernate:Java对象持久化技术详解_查询结果类型
2010-12-13 17:34 1300p329 -
孙卫琴.精通Hibernate:Java对象持久化技术详解_投影查询
2010-12-13 17:31 1421p325 -
深入浅出hibernate_夏昕_hibernate别名完成ResultSet和实体的映射
2010-12-13 17:09 1352p199
相关推荐
在上面的代码中,我们使用 `HibernateCallback` 接口来执行原生 SQL 语句,该接口提供了一个 `doInHibernate()` 方法,该方法将在 Hibernate 事务中执行。我们可以在该方法中执行原生 SQL 语句,并使用 `Connection`...
开发者通过HibernateCallback,可以完全使用Hibernate灵活的方式来访问数据库,解决了Spring封装Hibernate后灵活性不足的缺陷。 24.3 Spring对Hibernate的简化 24.3.4 HibernateTemplate的复杂用法 ...
总的来说,HibernateTemplate提供了一组强大的方法来简化Hibernate的日常操作,涵盖了从简单的数据存取到复杂的数据库操作,极大地提升了开发效率。在实际应用中,根据数据量、性能需求以及业务逻辑,选择合适的方法...
这个类将复杂的Hibernate API隐藏在后面,使得开发者可以更专注于业务逻辑,而不是数据库操作的细节。 **二、主要功能** 1. **事务管理**:HibernateTemplate自动管理Hibernate Session和Transaction,确保在事务...
本文详细介绍了Spring与Hibernate集成的过程,包括如何配置`SessionFactory`、使用`HibernateTemplate`简化数据操作、通过`HibernateDaoSupport`提高代码可维护性以及利用`HibernateCallback`实现更复杂的业务逻辑。...
通过`getHibernateTemplate().executeFind()`方法,我们创建了一个`HibernateCallback`回调,内部执行SQL查询。这里使用了HQL(Hibernate Query Language)编写查询语句,`"from ControlScreen order by id desc"`...
`queryForPage` 方法通过`getHibernateTemplate().executeFind()`方法执行HQL查询,并利用`HibernateCallback`接口回调来设置查询的起始位置和最大结果数,从而实现分页。`getAllRowCount` 方法则直接返回HQL查询后...
例如,你可以通过实现HibernateCallback接口的doInHibernate方法,传入一个回调函数,执行特定的Hibernate操作。此外,HibernateTemplate会自动处理HibernateException,并将其转化为Spring的DataAccessException,...
此外,`HibernateTemplate`还支持`HibernateCallback`接口,允许开发者在回调方法`doInHibernate(Session session)`中使用原生的Hibernate API,以应对更复杂的数据访问需求。这种方法确保了灵活性,即使在Spring的...
虽然`HibernateTemplate`提供了很多便利,但它在处理复杂查询时可能需要创建内部类(inner class),如在分页查询时使用`execute(HibernateCallBack)`,这可能会增加调试的复杂性。相比之下,直接使用`Session`进行...
HibernateDaoSupport封装了HibernateTemplate,而HibernateTemplate封装了Hibernate所提供几乎所有的的数据操作方法,如execute(HibernateCallback action),load(Class entityClass, Serializable id),save(final ...
**二、Hibernate的复杂用法** 1. **HibernateCallback** HibernateTemplate支持`HibernateCallback`接口,允许在回调方法中执行自定义的Hibernate操作。这提供了一种方式在事务内部执行复杂操作,例如批量处理或...
5. **回调机制**:当`getHibernateTemplate()`的标准方法无法满足特定需求时,可以使用`HibernateCallback`接口进行自定义操作。这允许你在Hibernate的Session内部执行任意操作,同时仍然享受到Spring提供的事务和...
3. **使用HibernateCallback**: HibernateCallback是一个接口,可以在Session中执行回调方法,例如查询数据。 ```java HibernateCallback<List<Dept>> callback = new HibernateCallback<List<Dept>>() { @...
- 接口注入:已逐渐淘汰,不推荐使用,因为它需要实现特定的接口,增加了复杂性。 6. bean中的scope属性: scope属性定义了bean的作用域,常见的有singleton(单例)、prototype(多例)等。单例模式下,Spring容器...
另一种格式(第10-16行)展示了如何在一个匿名内部类中使用`HibernateCallback`接口执行删除操作,这种方式在处理更复杂的逻辑时更为灵活。 3. **HQL单表查询**: HQL可以轻松地执行针对单个表的查询。第19行的HQL...
`HibernateCallback`的`doInHibernate`方法会在Hibernate的Session上下文中执行,使得开发者可以直接操作Session。 描述中的示例代码展示了如何使用`HibernateTemplate`执行事务操作。在这个例子中,开发者试图保存...
### HibernateTemplate 分组统计知识点详解 #### 一、概述 在Java Web开发中,尤其是在使用...这不仅有助于更好地理解和掌握Spring与Hibernate的集成方式,同时也为解决实际项目中的复杂数据处理问题提供了有效途径。
如示例所示,通过`getHibernateTemplate().execute()`方法传递一个`HibernateCallback`,然后在回调方法中创建并执行`CallableStatement`。这使得在Java应用程序中直接调用数据库的存储过程成为可能,提高性能并简化...
在实际开发中,开发者可以根据需求构建更复杂的查询,包括使用JOIN、GROUP BY、HAVING等子句,以及使用更复杂的查询构造。同时,需要注意的是,HQL执行时需要考虑事务管理,以确保数据的一致性和完整性。