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


    分页技巧_抽取出公共的分页用的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);
        }
    }

  • 相关阅读:
    VRChat简易教程1-开发环境准备(SDK)
    BeatSaber节奏光剑插件开发官方教程2-简单的插件示例
    BeatSaber节奏光剑插件开发官方教程1-创建一个插件模板
    BeatSaber节奏光剑双手柄MR教程
    第四章 HTML与JavaScript
    第二章数据和判定
    蓝港在线笔试经验
    数据结构总复习(查找)
    数据结构总复习(3)
    数据结构总复习(2)
  • 原文地址:https://www.cnblogs.com/justdoitba/p/7965571.html
Copyright © 2020-2023  润新知