hibernate两表关联分页查询

核心实现代码:

 @Override
    public Map<String ,Object> getBackUserNurseBeanList( String name, Integer pageNo) {
        if(pageNo == null){
            
            pageNo = 1;
        }
        //设置hql语句
        StringBuffer sql = new StringBuffer();
        
        String sql0 ="select new com.javajy.nurse.Dto.BackUserNurseBean (b.password, n.phone) ";

        sql.append("from BackUser b, Nursingworkers n where  b.id= n.userId  ");
       
        final Map<String, Object> PARAMS = new HashMap<String, Object>();
        
        if(StringUtils.isNotEmpty(name)){
            sql.append(" and b.name like :name");
            PARAMS.put("name", "%"+name+"%");
        }


        //获取总数
        long count = getRowsNew(sql.toString(),PARAMS,null);
        
        sql.append(" order by b.id desc");
        //设置显示条数
        int pageSize = Constant.pageWebSize;
        //设置总页数
        int allPage =  (int) (count%Constant.pageWebSize ==0 ?  count/Constant.pageWebSize : count/Constant.pageWebSize+1);
        
        //设置返回值
        Map<String ,Object>  result = new HashMap<String ,Object> ();
        
        //设置数据属性
        List<Object> dataProperty = findListPageNew(sql0 + sql.toString(), PARAMS,  (pageNo - 1)*pageSize, pageSize);
   
        if(dataProperty == null || dataProperty.size() == 0){
            result.put("count", 0);
            result.put("allPage", 1);
            result.put("data", dataProperty);
            return result;
        }
        List<BackUserNurseBean> dataBeanList = new ArrayList<BackUserNurseBean>();
        for(Object bu : dataProperty){
            dataBeanList.add((BackUserNurseBean)bu);
        }
        result.put("count", count);
        result.put("allPage", allPage);
        result.put("data", dataBeanList);
        return result;
    }
里面提到的bean 记得要有构造器

/**
 * 类功能描述
 * @version   
 * @author flyer 2018年1月15日下午3:35:06
 * @since 1.8
 */
public class BackUserNurseBean {
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    private String password;
    private String phone;
    public BackUserNurseBean(String password, String phone) {
        super();
        this.password = password;
        this.phone = phone;
    }
    
}

以下两个方法写入basedaoimpl 这种类里面 基础函数

getRowsNew 方法

	//使用 p=:name 不使用 p=? 样式
	@Override
	public long getRowsNew(String query,  Map<String, Object> params ,Class<?> entityClass){
		String queryString = "select count(*) "; // from " + entityClass.getSimpleName();
		if (query != null) {
			queryString += " " + query;
		}
		Query q =  sessionFactory.getCurrentSession().createQuery(queryString);
		if (params != null) {
			q.setProperties(params) ; //  params 可以是list 支持list结构
		}
		return (Long) q.list().get(0);
	}

findListPageNew方法


   public List<Object> findListPageNew(String hql, Map<String, Object> params,
            int first, int max) {
        Query query = sessionFactory.getCurrentSession().createQuery(hql);
        query.setProperties(params);  // params 可以是list 支持list结构
        query.setFirstResult(first);
        query.setMaxResults(max);
        return query.list();
    }


参考:

http://blog.csdn.net/damogu_arthur/article/details/46924805



版权声明:本文为AlbertFly原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。