在SSH框架中注入HibernateTemplate进行分页等相关查询
来源:互联网 发布:远程教育软件哪家好 编辑:程序博客网 时间:2024/06/13 01:01
本文主要讲解一下三个问题:
1、如何用注入的HibernateTemplate进行分页
2、如何用注入的HibernateTemplate动态分页
3、如何用注入的HibernateTemplate在动态情况下获得其总记录数
首先,我用到的是在Spring中注入HibernateTemplate模板进行查询:
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocations" value="classpath:hibernate.cfg.xml" /> <property name="mappingLocations" value="classpath:hbmXML/*.hbm.xml"></property> </bean> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <property name="sessionFactory" ref="sessionFactory"></property> </bean>
这里的dataSource是数据库连接池,接下来在**DaoImpl.java文件中通过注解注入HibernateTemplate:
@Repository("bookDao")public class BookDaoImpl implements BookDao { @Resource private HibernateTemplate hibernateTemplate;}
接下来说明一下问题:
1. 如何用注入的HibernateTemplate进行分页
/** * 静态的hql语句分页查询: * * @param hql hql语句 * @param offset 起始点 * @param length 长度 * @return 每页的查询结合 */ public List<?> getListForPage(final String hql, final int offset, final int length) { List<?> list = hibernateTemplate.executeFind(new HibernateCallback<Object>() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query query = session.createQuery(hql); query.setFirstResult(offset); query.setMaxResults(length); List<?> list = query.list(); return list; } }); return list; }
跟网上的一些查询差不多,不过这里我注入的HibernateTemplate。
2、如何用注入的HibernateTemplate动态分页
/** * 动态hql查询 * * @param className 实体类的class(Object.class) * @param criterions 限制条件结合 * @param offset 起始点 * @param length 每页个数 * @return 每页的查询结合 */ public List<?> getListForPage(final Class<?> className, final Criterion[] criterions, final int offset, final int length) { List<?> list = hibernateTemplate.executeFind(new HibernateCallback<Object>() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Criteria criteria = session.createCriteria(className); // 循环遍历添加约束条件 for (int i = 0; i < criterions.length; i++) { criteria.add(criterions[i]); } criteria.setFirstResult(offset); criteria.setMaxResults(length); return criteria.list(); } }); return list; }
参数className:是实体类的类名,通过这个参数获得criteria。例如:className是Sort.class,翻译过来的hql语句是“from Sort”。
参数criterions :是限制条件的数组,相当于hql中where后面的语句,例如:Criterion[] criterions = {Restrictions.eq(“sortId”, 1)};翻译过来的hql语句是:from Sort where sortId = 1。
其他参数应该很好理解,需要更多的查询条件可以自己搜索Restrictions。
3、如何用注入的HibernateTemplate在动态情况下获得其总记录数
/** * 在动态查询的条件下,获得其总的记录数 * @param className * @param criterions * @return */ public int getTotalCount(final Class<?> className, final Criterion[] criterions) { List<?> count = hibernateTemplate.executeFind(new HibernateCallback<Object>() { public List<Integer> doInHibernate(Session session) throws HibernateException, SQLException { Criteria criteria = session.createCriteria(className); for (int i = 0; i < criterions.length; i++) { criteria.add(criterions[i]); } criteria.setProjection(Projections.rowCount()); List<Integer> list = new ArrayList<Integer>(); list.add(Integer.parseInt(criteria.uniqueResult().toString())); return list; } }); return (Integer)count.get(0);
最好不要通过2中案例的criteria.list().size()方法直接返回总的条件查询记录数,原因和导致的结果网上都有介绍,这里不再说明。
0 0
- 在SSH框架中注入HibernateTemplate进行分页等相关查询
- ssh框架整合时使用hibernateTemplate进行find查询时出现空指针异常的解决办法
- SSH整合后,HQL查询必须知道的内容,HibernateTemplate中实现分页
- hibernateTemplate 模糊分页查询
- 在Hibernate中使用HibernateTemplate来进行包含sql语句的查询
- Spring在HibernateTemplate中使用查询缓存。
- 使用 HibernateTemplate 实现分页查询
- 使用 HibernateTemplate 实现分页查询
- 使用 HibernateTemplate 实现分页查询
- 在SYBASE中进行分页查询的方法
- spring 中hibernateTemplate实现分页
- SSH框架下的条件查询及查询结果分页
- 如何使用HibernateTemplate进行分页功能
- 如何使用HibernateTemplate进行分页功能
- 如何使用HibernateTemplate进行分页功能
- 利用hibernateTemplate进行最简单的分页
- 如何使用HibernateTemplate进行分页功能
- 扩展HibernateTemplate,实现分页查询 (回调)
- Java设计模式:观察者模式以及Servlet中的Listener
- MyBatis_1
- 【进阶】MySQL中的子查询和联合查询
- SVM人脸识别
- 解决Windows安装解压版MySQL出现服务正在启动-服务无法启动的问题
- 在SSH框架中注入HibernateTemplate进行分页等相关查询
- 单例模式.md
- State与Transition之Transition
- 面试中被问到的概率题
- 错误pycurl.error: (60, 'SSL certificate problem: unable to get local issuer certificate')解决方案
- Spark之TopN
- NYOJ1237_最大岛屿
- 安卓自定义View介绍使用
- Spring+junit4 实现注解测试原理解析