如何使用getHibernateTemplate()方法
一、getHibernateTemplate()方法介绍:
getHibernateTemplate()是Hibernate为了简化相关的增删改查操作,而封装了数据库的一些例行通用操作,可以直接使用,以此来提升开发效率。但是是由Spring整合Hibernate的时候才用到的,由Spring对Hibernate相关的操作对象进行封装。且DAO层实现类必须继承HibernateDaoSupport。如下代码:
public class DepartmentDaoImpl extends HibernateDaoSupport implements DepartmentDao {
/**
* 总的记录数
*/
public int findCount() {
String hql="select count(*) from Department";
List<Long> list = this.getHibernateTemplate().find(hql);
if (list.size() > 0) {
return list.get(0).intValue();
}
return 0;
}
Spring注入Hibernate相关配置文件:
<!-- 配置Dao层的类 -->
<bean id="departmentDao" class="com.employee.dao.impl.DepartmentDaoImpl">
<!-- 注入sessionFactory -->
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="employeeDao" class="com.employee.dao.impl.EmployeeDaoImpl">
<!-- 注入sessionFactory -->
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- 配置transaction事务管理器 -->
<bean name="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<!-- 注入sessionFactory -->
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- 开启注解事务 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
就不需要如下单独配置
Configuration cfg = new Configuration();
cfg.configure("hibernate.cfg.xml"); // 读取指定的主配置文件
sessionFactory = cfg.buildSessionFactory(); // 根据配置生成Session工厂
User user = new User();
user.setName("张三");
Session session = sessionFactory.openSession(); // 打开一个新的Session
Transaction tx = session.beginTransaction(); // 开启事务
session.save(user);
tx.commit(); // 提交事务
session.close(); // 关闭Session,释放资源(不一定是真正的关闭)
二、getHibernateTemplate()常用的方法
1、getHibernateTemplate方法介绍
关于find*方法:
关于get*的方法:
关于update*的方法:
关于get*的方法:
关于save*的方法:
- 关于delete*的方法
2、常用方法总结
(1)使用get/load通过主键id获取单条数据
/**
* 通过id查一个部门的信息:查询的did必须为主键
*/
public void finById(Integer did) {
this.getHibernateTemplate().get(Department.class, did);
}
public void finById(Integer did) {
this.getHibernateTemplate().get(Department.class, did);
}
(2)find查询
- find(String queryString):返回hql查询结果
String hql = "select count(*) from User";
List<Long> list = this.getHibernateTemplate().find(hql);
- find(String queryString , Object value):返回Object对象集合
//查询User中name为Lijian的对象
String hql1 = "select from User where name='Lijian'";
//模糊查询
String hql2 = "select from User where name like %jian%";
List<User> list = this.getHibernateTemplate().find(hql1);
List<User> list1 = this.getHibernateTemplate().find(hql2);
- find(String queryString, Object[] values); :返回所有符合查询条件的Object对象集合
/*
*查询帐号为Lijian,密码为123的User实体对象
*/
String hql= "from User where name='Lijian' and password='123'";
this.getHibernateTemplate().find(hql, new String[]{"Lijian", "123"});
findByExample(Object exampleEntity):通过实例查找,直到实例的属性所有匹配位置返回list
findByExample(Object exampleEntity, int firstResult, int maxResults):功能同上,但是其中参数firstResult与maxResult意思为:从firstResult起总共maxResult个Object对象
/*
* 符合的条件:User帐号为Lijian,密码为123
* 两个条件必须是同时的,相当于sql语句中的and:
* select User from where name='Lijian' and password='123'
*/
User u=new User();
u.setPassword("123" );
u.setName("Lijian" );
List<User> list = this .getHibernateTemplate().findByExample(u);
- findByNamedParam(String queryString , String paramName , Object value):返回parmName为value的hql查询结果
- findByNamedParam(String queryString , String[] paramName , Object[] value) :同上,参数为数组,对象值也为数组
/*
* 返回name为Lijian的User对象条数(hql查询结果为记录条数)
* 类似于sql语句中通配符?,后面传入参数值
* select count(*) from User where name=?
*/
String queryString = "select count(*) from User where name=:myName"
String paramName= "myName";
String value= "Lijian";
this .getHibernateTemplate().findByNamedParam(queryString, paramName, value);
/*
* 返回name为Lijian,password为123的User对象条数(hql查询结果为记录条数)
*
*/
String queryString = "select count(*) from User where name=:myName and password=:myPassword"
String[] paramName= new String[]{"myName", "myPassword"};
String[] value= new String[]{"Lijian", "123"};
this .getHibernateTemplate().findByNamedParam(queryString, paramName, value);
- findByValueBean(String queryString , Object value):先定义一个ValueBean,其中的属性与hql参数对应一致,随后将ValueBean作为vlaue参数传入
//定义ValueBean
ValueBean valueBean= new ValueBean();
valueBean.setMyName("Lijian");
valueBean.setMyPasswrod("123");
String queryString= "from User where name=:myName and u.password=:myPassword";
//将定义的ValueBean作为参数传入,也就是传递了MyName与MyPassword两个值
this.getHibernateTemplate().findByValueBean(queryString , valueBean);
(3)delete方法
void delete(Object entity):删除指定持久化实例
deleteAll(Collection entities):删除集合内全部持久化类实例
(4)save方法
- save(Object entity):保存新的实例
- saveOrUpdate(Object entity):根据实例状态,选择保存或者更新