HibernateTemplate HibernateCallback()使用说明
2016-05-03 21:27
393 查看
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
HibernateTemplate还提供一种更加灵活的方式来操作数据库,通过这种方式可以完全使用Hibernate的操作方式。
HibernateTemplate的灵活访问方式是通过如下两个方法完成:
Object execute(HibernateCallback action)
List execute(HibernateCallback action)
这两个方法都需要一个HibernateCallback的实例,HibernateCallback实例可在任何有效的Hibernate数据访问中使用。
程序开发者通过HibernateCallback,可以完全使用Hibernate灵活的方式来访问数据库,解决spring封装Hibernate后灵活性不足的缺陷。
HibernateCallback是一个接口,该接口只有一个方法doInHibernate(org.hibernate.Session session),
该方法只有一个参数Session。通常,程序中采用实现HibernateCallback的匿名内部类来获取HibernateCallback的实例,
方法doInHibernate的方法体就是Spring执行的持久化操作。
简单的查询的功能
@SuppressWarnings({ "unchecked", "rawtypes" }) public List<T> findByCriteria(final Class<T> entityClass, final String propertyName, final boolean isAsc, final int firstResult, final int maxResults, final Criterion... criterions) { List<T> list = (List<T>) getHibernateTemplate().execute( new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Criteria criteria = session.createCriteria(entityClass); // 按属性条件查询 for (Criterion criterion : criterions) { criteria.add(criterion); } // 按某个属性排序 if (null != propertyName) { if (isAsc) { criteria.addOrder(Order.asc(propertyName));// 升序 } else { criteria.addOrder(Order.desc(propertyName)); } } // 用于分页查询 if (maxResults != 0) { criteria.setFirstResult(firstResult); criteria.setMaxResults(maxResults); } List<T> list = criteria.list(); return list; } }); return list; }
简单的分页的功能
public List findByPage(final String hql, final int offset, final int pageSize) { // 通过一个HibernateCallback对象来执行查询 List list = getHibernateTemplate().executeFind(new HibernateCallback() { // 实现HibernateCallback接口必须实现的方法 public Object doInHibernate(Session session) throws HibernateException, SQLException { // 执行Hibernate分页查询 List result = session.createQuery(hql).setFirstResult(offset) .setMaxResults(pageSize).list(); return result; } }); return list; }
public List findByPage(final String hql, final Object value, final int offset, final int pageSize) { // 通过一个HibernateCallback对象来执行查询 List list = getHibernateTemplate().executeFind(new HibernateCallback() { // 实现HibernateCallback接口必须实现的方法 public Object doInHibernate(Session session) throws HibernateException, SQLException { // 执行Hibernate分页查询 List result = session.createQuery(hql) // 为hql语句传入参数 .setParameter(0, value).setFirstResult(offset) .setMaxResults(pageSize).list(); return result; } }); return list; }
public List findByPage(final String hql, final Object[] values, final int offset, final int pageSize) { // 通过一个HibernateCallback对象来执行查询 List list = getHibernateTemplate().executeFind(new HibernateCallback() { // 实现HibernateCallback接口必须实现的方法 public Object doInHibernate(Session session) throws HibernateException, SQLException { // 执行Hibernate分页查询 Query query = session.createQuery(hql); // 为hql语句传入参数 for (int i = 0; i < values.length; i++) { query.setParameter(i, values[i]); } List result = query.setFirstResult(offset) .setMaxResults(pageSize).list(); return result; } }); return list; }
相关文章推荐
- 打印乘法口诀表
- Responder Chain简析
- ubuntu双系统安装的一些问题
- WebView加载带中文的网页
- 三角形打印练习
- PHP、JavaScript、HTML三者的比较
- refresh的停车场
- 【代码】Datatable转泛型
- 第3周项目4--谁是小偷
- 92. Reverse Linked List II
- php面试总结
- 华为2016校招机试题(2015年9月) 海大上午场(包含实现代码,运行环境为VS2010)
- spring事物传播特性
- JDBC数据更新
- 【代码】日期转换函数
- 【代码】报表显示
- linux下使用vim修改jar包zip包内文件内容
- gcc/g++ 参数总结
- 【代码】控件是否为空/是否数字/清空
- 归并排序