HibernateTemplate 提供了非常多的常用方法来完成基本的操作,比如增加、删除、修改及查询等操作,Spring 2.0 更增加对命名 SQL 查询的支持,也增加对分页的支持。大部分情况下,使用Hibernate 的常规用法,就可完成大多数DAO对象的 CRUD操作。
下面是 HibernateTemplate的常用方法。 delete(Object entity): 删除指定持久化实例。 deleteAll(Collection entities): 删除集合内全部持久化类实例。 find(String queryString): 根据 HQL 查询字符串来返回实例集合。 findByNamedQuery(String queryName): 根据命名查询返回实例集合。 get(Classentity Class,Serializable id): 根据主键加载特定持久化类的实例。 save(Object entity): 保存新的实例。 saveOrUpdate(Object entity): 根据实例状态,选择保存或者更新。 update(Object entity): 更新实例的状态,要求entity 是持久状态。 setMaxResults(intmax Results): 设置分页的大小。
使用模板
<?xml version="1.0" encoding="gb2312"?> <!--Spring 配置文件的DTD 定义二〉 <!DOCTYPE beans PUBLIC "-!!SPRING!!DTD BEAN!!EN" ''http://www.springframework.org/dtd/spring-beans.dtd''> <! -- Spring 配置文件的根元素是beans--> <beans> <!--定义数据源,该bean 的ID 为dataSource--> <bean id=" dataSource" class=" org. springframework.jdbc. datasource. DriverManagerDataSource"> <!-- 指定数据库驱动--> <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property> <!-- 指定连接数据库的URL--> <property name="url"><value>jdbc:mysql://wonder:3306/j2ee</ value> <!property> <!-- root 为数据库的用户名--> <property name="username"><value>root</value></property> <!--pass 为数据库密码--> <property name= "password" ><value>pass</value></property> </bean> <!--定义Hibernate 的SessionFactoy--> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <!--依赖注入数据源,注入正是上文定义的dataSource--> <property name="dataSource"><ref local="dataSource"/></property> <!--mappingResouces属性用来列出全部映射文件〉 <property name="mappingResources"> <list> <!--以下用来列出所有的PO 映射文件--> <value>lee/Person.hbm.xml</value> </list> </property> <!--定义Hibernate 的SessionFactory的属性--> <property name="hibernateProperties"> <props> <!-- 指定Hibernate 的连接方言--> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <!--不同数据库连接,启动时选择create , update , create-drop--> <prop key="hibernate.hbm2ddl.auto">update</prop> </props> </property> </bean> <!--配置Person 持久化类的DAO bean--> <bean id="personDao" class="lee.PersonDaoImpl"> <!--采用依赖注入来传入SessionFactory的引用〉 <property name="sessionFactory"><ref local="sessionFactory"/></property> </bean> </beans> 在DAO 实现类中,可采用更简单的方式来取得HibemateTemplate的实例。代码如下: public class PersonDaoImpl implements PersonDao { // 执行持久化操作的HibernateTemplate HibernateTemplate ht; private SessionFactory sessionFactory; //依赖注入Sess工onFactory 的必需的setter 方法 public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } //该方法用于完成HibernateTemplate的初始化 private void setHibernateTemplate() { if (ht ==null){ ht = new HibernateTemplate(sessionFactory); } } /** *加载Person 实例 * @param id 需要加载Person 实例的主键值 * @return 返回加载的Person 实例 */ public Person get(int id){ setHibernateTemplate(); return (Person)ht.get(Person.class , new Integer(id)); } /** *保存Person 实例 * @param person 需要保存的Person 实例 */ public void save(Person person){ setHibernateTemplate() ; ht.save(person) ; } /** *修改Person 实例 * @param person 需要修改的Person 实例 */ public void update(Person person){ setHibernateTemplate(); ht.update(person); } /** *删除Person 实例 * @param id 需要删除的Person id */ public void delete(int id){ setHibernateTemplate(); ht.delete(ht.get(Person.class , new Integer(id))); } /** *删除Person 实例 * @param perso口需要删除的Person 实例 */ public void delete(Person person){ setHibernateTemplate(); ht.delete(person) ; } /** *根据用户名查找Person * @param name 用户名 * @return 用户名对应的全部用户 */ public List findByPerson(String name){ setHibernateTemplate(); return h t. find("from Person p where p.name like ?" , name); } /** *返回全部的Person 实例 * @return 全部的Person 实例 */ public List findAllPerson(){ setHibernateTemplate(); return ht.find("from Person "); } }