hql通用basedao,及原生sql及视图

1.作用:

①将赋值的操作交给basedao

②分页:

a  符合条件的总记录数

b  查询符合条件的某一页记录

 

1.1 赋值操作

    /**
     * @param query预定义对象
     * @param map   前台传递过来的参数
     */
    private void setParameter(Query query,Map map) {
//        query.setParameter("bookName", "%"+book.getBookName+"%");
        if(map == null || map.size() == 0) {
            return;
        }
        Object value = null;
        for(Map.Entry entry:map.entrySet()) {
            value = entry.getValue();
            if(value instanceof Collection) {
                query.setParameterList(entry.getKey(), (Collection)value);
            }else if (value instanceof Object[]){
                query.setParameterList(entry.getKey(), (Object[])value);
            }else {
                query.setParameter(entry.getKey(), value);
            }
        }
    }

 1.2 查询符合条件的总记录数

    public String getCountHql(String hql) {
        int index = hql.toUpperCase().indexOf("FROM");
        return "select count(*) "+hql.substring(index);
    }

 

 

    public List executeQuery(Session session, String hql,PageBean pageBean,Map map) {
        if(pageBean != null && pageBean.isPagination()) {
            //select count(*) from Book where bookName like '%圣墟%'
            String countHql = getCountHql(hql);
            Query countquery = session.createQuery(countHql);
            this.setParameter(countquery, map);
            //pageBean中设置总记录数,最后用于分页
            String total = countquery.getSingleResult().toString();
            pageBean.setTotal(total);
            
            //查询展示的数据
            Query pageQuery = session.createQuery(hql);
            this.setParameter(pageQuery, map);
            pageQuery.setFirstResult(pageBean.getStartIndex());
            pageQuery.setMaxResults(pageBean.getRows());
            
            return pageQuery.list();
        }else {
            Query query = session.createQuery(hql);
            this.setParameter(query, map);
            return query.list();
        }
    }

 2.原生sql

   hql实现不了的功能,可以考虑使用原生sql
   1、多表(5+)联查
   2、未配置映射文件中关系

3.视图映射

场景:select * from 3表联查


 

你可能感兴趣的:(hql通用basedao,及原生sql及视图)