分页技巧_抽取出公共的分页用的Service方法

TopicAction.java

ForumAction.java

放在父类中DaoSupport.java

DaoSupportImpl.java

//@Transactional注解可以被继承,子类就不用写了
//@Transactional注解对父类中声明的方法无效
@Transactional
@SuppressWarnings("unchecked")
public abstract class DaoSupportImpl<T> implements DaoSupport<T> { @Resource
private SessionFactory sessionFactory;// 通过注入得到SessionFactory,要把它放到容器里才能注入,在具体的实现类上声明@Repository private Class<T> clazz; public DaoSupportImpl() {
//使用反射技术得到T的真实类型
ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();//获取当前new类型的泛型的父类类型
this.clazz = (Class<T>) pt.getActualTypeArguments()[0];//获取第一个类型参数的真实类型,只有一个泛型参数,所以写0
System.out.println("clazz--->" + clazz);
} /**
* 获取当前可用的session对象,用protected修饰方便子类得到session
*/
protected Session getSession() {
return sessionFactory.getCurrentSession();
} public void save(T entity) {
// 不需要自己关事务了,spring框架已经帮我们做了,我们用它的事务管理
getSession().save(entity);
} public void update(T entity) {
getSession().update(entity);
} public void delete(Long id) {
Object obj = getById(id);
if (obj != null) {
getSession().delete(obj);
}
} public T getById(Long id) {
if(id == null) {
return null;
}else{
return (T) getSession().get(clazz, id); }
} public List<T> getByIds(Long[] ids) {
if(ids == null || ids.length == 0) {
//return new ArrayList<T>();//返回空的集合
return Collections.EMPTY_LIST;
}else {
return getSession().createQuery(//
"FROM " + clazz.getSimpleName() + " WHERE id IN (:ids)")//
.setParameterList("ids", ids)
.list();
}
} public List<T> findAll() {
return getSession().createQuery(//
"FROM " + clazz.getSimpleName())//
.list();
}
//公共的查询分页信息的方法
public PageBean getPageBean(int pageNum, int pageSize, String hql, List<Object> parameters) {
System.out.println("------>DaoSupportImpl.getPageBean()");
//查询本页的数据列表
Query listQuery = getSession().createQuery(hql);//创建查询对象
if(parameters != null) {//设置参数
for(int i = 0; i < parameters.size(); i++) {
listQuery.setParameter(i, parameters.get(i));
}
}
listQuery.setFirstResult((pageNum - 1) * pageSize);
listQuery.setMaxResults(pageSize);
List list = listQuery.list();//执行查询 //查询总记录数量
Query countQuery = getSession().createQuery("SELECT COUNT(*)" + hql);
if(parameters != null) {//设置参数
for(int i = 0; i < parameters.size(); i++) {
countQuery.setParameter(i, parameters.get(i));
}
}
Long count = (Long)countQuery.uniqueResult();//执行查询
return new PageBean(pageNum, pageSize, count.intValue(), list);
}
}

分页技巧_抽取出公共的分页用的Service方法的更多相关文章

  1. 分页技巧_测试并继续改进分页用的QueryHelper辅助对象

    分页技巧_测试并继续改进分页用的QueryHelper辅助对象 QueryHelper.java /** * 用于辅助拼接HQL语句 */ public class QueryHelper { pri ...

  2. 分页技巧_改进JSP页面中的公共分页代码_实现分页时可以有自定义的过滤与排序条件

    分页技巧__改进JSP页面中的公共分页代码 自定义过滤条件问题 只有一个url地址不一样写了很多行代码 public>>pageView.jspf添加 分页技巧__实现分页时可以有自定义的 ...

  3. 分页技巧__在项目中使用QueryHelper辅助对象实现分页效果

    分页技巧__在项目中使用QueryHelper辅助对象实现分页效果 QueryHelper 用于辅助拼接HQL语句 addCondition("t.type=?", "精 ...

  4. 分页技巧__设计分页用的QueryHelper辅助对象

    分页技巧__设计分页用的QueryHelper辅助对象 FROM 必须 实体名 WHERE  可选 条件1 AND 条件2 AND ... 条件n ORDER BY 可选 属性1, 属性2, ... ...

  5. ORACLE分页查询SQL语法——最高效的分页

    --1:无ORDER BY排序的写法.(效率最高)--(经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据量再大,也几乎不受影响,速度依然!) SELECT * FROM (SELECT  ...

  6. PHP分页初探 一个最简单的PHP分页代码的简单实现

    PHP分页代码在各种程序开发中都是必须要用到的,在网站开发中更是必选的一项. 要想写出分页代码,首先你要理解SQL查询语句:select * from goods limit 2,7.PHP分页代码核 ...

  7. 160321、ORACLE分页查询SQL语法——最高效的分页

    --1:无ORDER BY排序的写法.(效率最高) --(经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据量再大,也几乎不受影响,速度依然!) SELECT *   FROM (SELE ...

  8. 项目一:第五天 1、区域数据(pinyin4j-简码,城市编码) 2、Web层代码重构(model对象,分页代码提取) 3、区域分页查询 3、分区添加功能 4、定区管理管理-添加,分页

    Service: /** * @Description: 1.保存定区  2.让分区关联定区 * 对象三种状态 1.持久态(被session管理对象-一级缓存中有对象) 2.托管态(有OID标识,数据 ...

  9. 【POI xls Java map】使用POI处理xls 抽取出异常信息 --java1.8Group by ---map迭代 -- 设置单元格高度

    代码处理逻辑: 代码流程: 1.首先需要创建一个实体 用来存储 相关信息 package com.sxd.test.unusualName; public class NameEntity { pri ...

随机推荐

  1. 【LeetCode】103. Binary Tree Zigzag Level Order Traversal

    Binary Tree Zigzag Level Order Traversal Given a binary tree, return the zigzag level order traversa ...

  2. springboot web 服务器选择

    Spring Boot 揭秘与实战(五) 服务器篇 - 其他内嵌服务器 拓展链接 http://www.jianshu.com/p/9710585258fb 发表于 2017-01-03 | Spri ...

  3. SQLSERVER中的timestamp 和 C#中的byte[] 转换

    项目中由于需求设计,数据库中需要一个timestamp时间戳类型的字段来作为区别数据添加和修改的标识.由于timestamp在SQL SERVER 2005数据库中,不可为空的timestamp类型在 ...

  4. IIS目录禁止执行权限

    IIS6: IIS7:

  5. 玩转Linux文件描述符和重定向

    本文介绍linux中文件描述符与重定向的相关知识,文件描述符是与文件输入.输出相关联的整数,它们用来跟踪已打开的文件.有需要的朋友参考下. 原文出处:http://www.jbxue.com/arti ...

  6. mysql 索引 大于等于 走不走索引 最左前缀

    你可以认为联合索引是闯关游戏的设计 例如你这个联合索引是state/city/zipCode 那么state就是第一关 city是第二关, zipCode就是第三关 你必须匹配了第一关,才能匹配第二关 ...

  7. Log4j容器深入探究

    1.思考 容器是什么? 水壶是容器,水壶中存放着水,等我们需要水了,直接用 Spring中的ApplicationContext是容器,里面存放着各种Bean,等我们需要了直接用,并且可以创建管理Be ...

  8. Phoenix的数据类型和操作符、函数

    其实官方文档已经有这些东西了,如下: http://phoenix.apache.org/language/functions.html http://phoenix.apache.org/langu ...

  9. linux如何查看CPU,内存,机器型号,网卡信息

    查看CPU信息(型号)# cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c      8  Intel(R) Xeon(R) CPU     ...

  10. oracle解惑

    1. 先在google, 论坛,metalink, online document 里搜索.     在这里提供Oracle 一些常见的连接地址,包括Oracle 下载地址,Oracle 对个人用是免 ...