HibernateTemplate提供了非常多的常用方法来完成数据库的基本操作,使得持久层访问摸板化,只要创建HibernateTemplate实例后,注入一个SessionFactory的引用就可以了.无须手动创建sessionFactory,更加智能的管理Hibernate 的Session,没有大量的try/catch操作,
void delete(Object entity)删除指定持久化实例
deleteAll(Collection entities)删除集合内全部持久化实例
find(String queryString)根据HQL查询字符串返回实例集合
findByNamedQuery(Striing QueryName)根据命名查询返回实例集合
Get(Class entityClass,Serializable id)割据主键加载特定持久化类的实例
save(Object entity)保存实例
saveOrUpdate(Object entity)根据实例状态,选择保存或者更新
update(Object entity)更新实例的状态
setMaxResults(int maxResults)设置分页大小
HIbernate的复杂用法HibernateCallback提供了灵活方式来操作数据库,Object execute(HibernateCallback action)和List execute(HibernateCallback action)这两个方法都需要一个HibernateCallback的实例,实例可在任何有效的hibernate数据访问中使用.
import java.util.Collection;
import java.util.List;
import org.hibernate.SessionFactory;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.HibernateCallback;
//完全可以不需要MyTestDao接口,直接使用类,但这样是面向接口的编程。
public class MyTestDaoImpl implements MyTestDao
{
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory)
{
this.sessionFactory = sessionFactory;
}
public Collection findAllMyTest()
{
HibernateTemplate hibernateTemplate = new HibernateTemplate(this.sessionFactory);
/*
HibernateCallback的内部类方式可在任何Hibernate数据访问中使用
对于简单的一步操作,如简单的load,savaOrUpdate则不必使用这种HibernateCallback匿名内部类的方式
*/
return (Collection) hibernateTemplate.execute( new HibernateCallback()
{
public Object doInHibernate(Session session) throws HibernateException
{
List result = session.createQuery("from MyTest")
.list();
return result;
}
});
}
}
配置文件:
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!--定义数据源-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
<property name="url"><value>jdbc:mysql://localhost:3306/j2ee</value></property>
<property name="username"><value>root</value></property>
<property name="password"><value>32147</value></property>
</bean>
<!--定义一个hibernate的SessionFactory-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource"><ref local="dataSource"/></property>
<property name="mappingResources">
<list>
<!--以下用来列出所有的PO映射文件-->
<value>lee/MyTest.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<!--此处用来定义hibernate的SessionFactory的属性:不同数据库连接,启动时选择create,update,create-drop-->
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<!--定义DAO Bean-->
<bean id="myTestDao" class="lee.MyTestDaoImpl">
<property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>
<!--定义DAO Bean-->
<bean id="myTestDao2" class="lee.MyTestDaoHibernate">
<property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>
<!--定义DAO Bean-->
<bean id="myTestDao3" class="lee.MyTestDaoHibernate2">
<property name="sessionFactory"><ref local="sessionFactory"/></property>
</bean>
<bean id="dd" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager"><ref local="transactionManager"/></property>
<property name="target"><ref local="myTestDao3"/></property>
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
</beans>
继承HibernateDAO的HibernateTemplate实例
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class BalanceDaoTemplate extends HibernateDaoSupport implements BalanceDao
{
public void saveBalance(Balance b)
{
getHibernateTemplate().save(b);
}
public void deleteBalance(Balance b)
{
getHibernateTemplate().delete(b);
}
public void deleteBalance(int id)
{
Balance b = (Balance)getHibernateTemplate().load(Balance.class, new Integer(id));
getHibernateTemplate().delete(b);
}
public void updateBalance(Balance b)
{
getHibernateTemplate().saveOrUpdate(b);
//getHibernateTemplate().update(b , org.hibernate.LockMode.WRITE);
}
public Balance getBalance(int id)
{
return (Balance)getHibernateTemplate().load(Balance.class,
new Integer(id),org.hibernate.LockMode.READ);
}
}
分享到:
相关推荐
HibernateCallback 使用方法 HibernateCallback 是 Hibernate 框架中的一种 callback 机制,允许开发者在持久层访问时执行自定义操作。HibernateCallback 是 Spring 框架中与 Hibernate 整合的重要组件,通过它可以...
总的来说,HibernateTemplate提供了一组强大的方法来简化Hibernate的日常操作,涵盖了从简单的数据存取到复杂的数据库操作,极大地提升了开发效率。在实际应用中,根据数据量、性能需求以及业务逻辑,选择合适的方法...
在上面的代码中,我们使用 `HibernateCallback` 接口来执行原生 SQL 语句,该接口提供了一个 `doInHibernate()` 方法,该方法将在 Hibernate 事务中执行。我们可以在该方法中执行原生 SQL 语句,并使用 `Connection`...
开发者通过HibernateCallback,可以完全使用Hibernate灵活的方式来访问数据库,解决了Spring封装Hibernate后灵活性不足的缺陷。 24.3 Spring对Hibernate的简化 24.3.4 HibernateTemplate的复杂用法 ...
这个类将复杂的Hibernate API隐藏在后面,使得开发者可以更专注于业务逻辑,而不是数据库操作的细节。 **二、主要功能** 1. **事务管理**:HibernateTemplate自动管理Hibernate Session和Transaction,确保在事务...
在Java开发中,Hibernate是一个非常流行的ORM(Object-Relational Mapping)框架,它简化了数据库操作,将数据库中的表映射为Java对象,使得开发者可以像操作普通对象一样进行数据库操作。本笔记主要探讨如何使用...
本文详细介绍了Spring与Hibernate集成的过程,包括如何配置`SessionFactory`、使用`HibernateTemplate`简化数据操作、通过`HibernateDaoSupport`提高代码可维护性以及利用`HibernateCallback`实现更复杂的业务逻辑。...
此外,`HibernateTemplate`还支持`HibernateCallback`接口,允许开发者在回调方法`doInHibernate(Session session)`中使用原生的Hibernate API,以应对更复杂的数据访问需求。这种方法确保了灵活性,即使在Spring的...
HibernateTemplate是Spring为Hibernate提供的一种便捷的数据访问工具,它封装了对SessionFactory的操作,提供了执行HQL查询、保存、更新、删除等操作的方法。使用HibernateTemplate,开发者可以避免直接操作Session...
它通过回调机制(HibernateCallback)对Hibernate的操作进行封装,使开发者能够以一种更面向对象的方式处理数据库交互。例如,你可以通过实现HibernateCallback接口的doInHibernate方法,传入一个回调函数,执行特定...
`getHibernateTemplate()`方法是Spring框架中用于整合Hibernate ORM的一个关键接口,它是`HibernateDaoSupport`类...然而,对于一些特定或复杂的数据库操作,可能需要借助`HibernateCallback`或其他方式来扩展其功能。
// 实现具体的数据库操作方法 public List<T> find(String hql, Object... values) { return (List) this.hibernateTemplate.execute(new HibernateCallback() { @Override public Object doInHibernate...
在Java应用中,尤其是企业级应用,Hibernate 提供了一种对象关系映射(ORM)机制,使得开发人员可以使用面向对象的方式来操作数据库,而无需过多关注底层SQL语句的编写。 在给定的描述中,我们看到了两种使用...
- **说明**: 在该类中实现了 `PaginateInterface` 的方法,并利用Hibernate和Spring进行具体的数据库操作。 #### 五、关键代码解析 1. **计算总页数**: ```java if (pageSize != 0) { pageCount = count / ...
HibernateTemplate 是 Spring 框架中的一個关键组件,用于简化 Hibernate 的使用,提供了許多实用的方法来进行数据库操作。在本文中,我们将对 HibernateTemplate 的主要方法进行总结和解释。 ...
- 使用Hibernate提供的`HibernateTemplate`来执行数据库操作,包括获取总记录数和设置分页参数。 - 根据计算出的起始位置和每页记录数执行查询,获取分页后的数据列表,并将其封装到`PageSupport`对象中返回。 ####...
- 在`com.lnic.dao`包中创建`UserDao`接口,定义获取用户信息的方法`getName(String id)`,以及其实现类`UserDaoImpl`,继承`HibernateDaoSupport`,使用Hibernate回调方法处理数据库操作。 - 配置`hibernate.cfg....
这提供了一种方式在事务内部执行复杂操作,例如批量处理或自定义查询。开发者可以在实现`doInHibernate(Session session)`方法后,通过`HibernateTemplate.execute(HibernateCallback<T> action)`方法执行回调。 2....
### Hibernate与Spring集成分页方法详解 在Java企业级应用开发中,经常需要处理大量数据的展示和查询问题。为了提高用户体验并优化服务器资源利用,分页查询是一种非常实用的技术手段。本文将详细介绍如何在...
HibernateDaoSupport封装了HibernateTemplate,而HibernateTemplate封装了Hibernate所提供几乎所有的的数据操作方法,如execute(HibernateCallback action),load(Class entityClass, Serializable id),save(final ...