前提条件:你的类必须继承HibernateDaoSupport
一:
回调函数:
public List getList(){
return (List ) getHibernateTemplate().execute(
new HibernateCallback() {
public List doInHibernate(final Session s)
throws HibernateException, SQLException {
StringBuffer sb = new StringBuffer();
Query query = s.createSQLQuery(sb.toString());//<STRONG>执行普通sql</STRONG>
Query query = s.createQuery(sb.toString());// <STRONG>执行hql </STRONG>
List list = query.list();
return list ;
}
});
}
采用这种做法的好处是:不用关心事务。session的创建和销毁,一切都在程序内部完成。看看名字doInHibernate就知道好处了。不好的是程序看起来比较乱!个人认为。
二:
getHibernateTemplate().find():
List list = getHibernateTemplate().find(String sql ):
这种的前提是sql必须是hql ,原始sql 不能执行。
三:
自己获取session处理。
获取session的两种方式:this.getSession();和this.getHibernateTemplate().getSessionFactory().openSession();
获取session以后再createQuery操作就一样了。但是这种做法,是需要自己去手动关闭session的。所以你需要配置openSessioninview,个人认为不推荐使用!
其他:
getHibernateTemplate.delete(Object);
getHibernateTemplate.save(Object);
getHibernateTemplate.update(Object);
总结:推荐使用回调函数。
HibernateTemplate提供非常多的常用方法来完成基本的操作,比如通常的增加、删除、修改、查询等操作,Spring 2.0更增加对命名SQL查询的支持,也增加对分页的支持。大部分情况下,使用Hibernate的常规用法,就可完成大多数DAO对象的CRUD操作。下面是HibernateTemplate的常用方法简介:
q void delete(Object entity):删除指定持久化实例
q deleteAll(Collection entities):删除集合内全部持久化类实例
q find(String queryString):根据HQL查询字符串来返回实例集合
q findByNamedQuery(String queryName):根据命名查询返回实例集合
q get(Class entityClass, Serializable id):根据主键加载特定持久化类的实例
q save(Object entity):保存新的实例
q saveOrUpdate(Object entity):根据实例状态,选择保存或者更新
q update(Object entity):更新实例的状态,要求entity是持久状态
q setMaxResults(int maxResults):设置分页的大小
下面是一个完整DAO类的源代码:
public class PersonDAOHibernate implements PersonDAO
{
//采用log4j来完成调试时的日志功能
private static Log log = LogFactory.getLog(NewsDAOHibernate.class);
//以私有的成员变量来保存SessionFactory。
private SessionFactory sessionFactory;
//以私有变量的方式保存HibernateTemplate
private HibernateTemplate hibernateTemplate = null;
//设值注入SessionFactory必需的setter方法
public void setSessionFactory(SessionFactory sessionFactory)
{
this.sessionFactory = sessionFactory;
}
//初始化本DAO所需的HibernateTemplate
public HIbernateTemplate getHibernateTemplate()
{
//首先,检查原来的hibernateTemplate实例是否还存在
if ( hibernateTemplate == null)
{
//如果不存在,新建一个HibernateTemplate实例
hibernateTemplate = new HibernateTemplate(sessionFactory);
}
return hibernateTemplate;
}
//返回全部的人的实例
public List getPersons()
{
//通过HibernateTemplate的find方法返回Person的全部实例
return getHibernateTemplate().find("from Person");
}
public void savePerson(Person person)
{
getHibernateTemplate().saveOrUpdate(person);
}
/**
* @ param personid 需要删除Person实例的主键
* /
public void removePerson(int personid)
{
//先加载特定实例
Object p = getHibernateTemplate().load(Person.class, new Integer(personid));
//删除特定实例
getHibernateTemplate().delete(p);
}
}
相关推荐
### getHibernateTemplate() 使用方法详解 #### 概述 在Java开发中,Hibernate是一个非常流行的持久层框架,它简化了数据库操作,使开发者能够更加高效地进行数据存取。Spring框架进一步封装了Hibernate,提供了`...
与直接使用`getSession()`方法相比,`getHibernateTemplate()`具有以下显著特点: 1. **事务管理**:`getHibernateTemplate()`是Spring封装后的接口,它支持声明式事务管理。这意味着你无需手动开启和关闭事务,...
`getHibernateTemplate()`是Spring框架与Hibernate集成时提供的一个便捷方法,它封装了对Hibernate Session的操作,使得在Service或DAO层进行数据库交互变得更加简单。 在给定的标题和描述中,提到的是`...
通常情况下,我们在 DAO 中使用 getHibernateTemplate() 方法来获取 HibernateTemplate 对象,以便进行数据库操作。 但是,在 JSP 中调用 DAO 的 getHibernateTemplate() 方法时,可能会报空指针异常。这是因为,在...
以上介绍了通过`getHibernateTemplate()`方法执行查询的不同方式,包括简单的HQL查询、带有参数的查询、模糊查询以及基于实例对象的查询等。这些方法在实际开发中非常实用,可以帮助开发者更灵活地处理各种查询需求...
本文详细介绍了如何使用`getHibernateTemplate()`方法结合Spring框架进行分页查询和模糊查询。这些技术在实际项目中非常实用,能够有效提升数据库操作的效率。同时,通过Spring框架提供的`HibernateTemplate`,可以...
当查询语句中有多个参数时,可以使用此方法。例如: ```java String hql = "from bean.User u where u.name=? and u.password=?"; List<User> users = this.getHibernateTemplate().find(hql, new String[]{"test",...
命名查询是在映射文件中定义的,使用此方法可以提高代码的可读性和维护性。 5. **`Object get(Class entityClass, Serializable id)`**:根据指定的类和主键值获取对象实例。此方法主要用于获取单个实体对象。 6. ...
关于这两种方式的选择,大多数情况下推荐使用`getHibernateTemplate()`。原因是`getSession()`会在每个操作时创建新的Session,如果在一个线程中有大量的并发操作,这可能导致数据库连接数过多,超出数据库允许的...
使用 DetachedCriteria 可以很方便地根据查询条件来返回查询结果,Spring 框架提供了 `getHibernateTemplate().findByCriteria(detachedCriteria)` 方法来实现这一点。 Criteria 和 DetachedCriteria 均可使用 ...
本文将对 Hibernate 中 Criteria 的用法进行总结,涵盖 Criteria 和 DetachedCriteria 的差异、Criterion 和 Projection 的使用方法等。 Hibernate 设计了 CriteriaSpecification 作为 Criteria 的父接口,下面提供...
首先,我们使用`getClass()`方法获取当前类的Class对象,然后使用`getGenericSuperclass()`方法获取当前类的父类的Type对象。最后,我们使用`getActualTypeArguments()`方法获取Type对象中的实际类型参数,然后将其...
`getPersons()`方法使用`find`方法获取所有Person对象,而`getPerson`方法则根据主键获取特定的Person实例。 除了上述的基本操作,HibernateTemplate还支持更多的高级特性,如缓存控制、事务管理等。Spring的四种...
2. 使用`getHibernateTemplate()`,然后调用其提供的方法,如`getHibernateTemplate().find()`等。 通常推荐使用`getHibernateTemplate()`,因为它的优点在于管理Session更为高效。在一个线程内进行多次操作时,`...
以下是一些使用Criteria API的基本用法: 1. 创建Criteria实例: ```java Criteria criteria = session.createCriteria(User.class); ``` 2. 添加查询条件: ```java criteria.add(Restrictions.eq("username...
### Criteria使用方法详解 #### 一、概述 在软件开发过程中,尤其是涉及到数据库操作的应用程序中,查询语言的灵活性和效率对于项目的成功至关重要。Hibernate作为Java领域中最流行的ORM(Object Relational ...
在Service层,我们可以注入HibernateTemplate,然后使用它的`save()`方法来保存实体对象到数据库。 ```java @Service public class UserService { @Autowired private HibernateTemplate hibernateTemplate; ...
当使用Hibernate的`getHibernateTemplate().save()`方法尝试保存数据时,如果数据没有被保存到数据库,可能有以下几个原因: 1. **事务管理**:在默认情况下,Hibernate不会自动开启和提交事务。如果在代码中没有...
- **单参数查询**:当查询条件只有一个时,可以使用带有单个参数的方法,例如:`this.getHibernateTemplate().find("from bean.User u where u.name=?", "test")`,这将返回所有名字为“test”的用户。 - **多参数...
### Spring框架中HQL语句的使用方法 在学习Spring框架与Hibernate集成的过程中,掌握HQL(Hibernate Query Language)的使用方法是十分重要的。本文档将详细介绍如何在Spring环境中运用HQL进行数据查询操作,包括...