Hibernate中hql三种方式实现分页关联查询

2 篇文章 0 订阅
1 篇文章 0 订阅

1.用户实体类   User.class

package com.system.user.entity.guard;

import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.NotFound;
import org.hibernate.annotations.NotFoundAction;

import javax.persistence.*;
import java.util.Date;
import java.util.List;
import java.util.Set;

/**
 * @author f
 * @version 1.0
 * @Title: 用户管理
 * @Package
 */
@Data
@Entity
@Table(name = "sys_user")
public class User  {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id", columnDefinition = "bigint NOT NULL COMMENT '自增主键'")
    private Long id;
    /**
     * ----用户名称---
     **/
    @Column(name = "name", columnDefinition = "varchar(64) NULL COMMENT '用户名称'")
    private String name;
    /**
     * ----登录账号---
     **/
    @Column(name = "login_name", columnDefinition = "varchar(64) NULL COMMENT '登录账号'")
    private String loginName;
    /**
     * ----登录密码---
     **/
    @Column(name = "pass_word", columnDefinition = "varchar(64) NULL COMMENT '登录密码'")
    private String passWord;

    /**
     * ----状态---
     **/
    @Column(name = "state", columnDefinition = "int NULL COMMENT '用户状态'")
    private Integer state;
     /**
     * ----创建时间---
     **/
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Column(name = "create_time", columnDefinition = "datetime NULL ")
    protected Date createTime;
    /**
     * ----创建人ID---
     **/
    @Column(name = "create_id", columnDefinition = "bigint NULL ")
    protected Long createId;
    /**
     * ----创建人---
     **/
    @Transient
    protected String createName;


    public User() {
    }

    public User(Long id,String name, String loginName, Integer state, String remark, Date createTime, Long createId, String createName) {
        this.id = id;
        this.name = name;
        this.loginName = loginName;
        this.state = state;
        this.remark = remark;
        this.createTime = createTime;
        this.createId = createId;
        this.createName = createName;
    }
}

2.用户Dao   UserDao.class

package com.system.user.dao;
import com.base.database.hibernate.BaseDao;
import com.base.mvc.LayuiPage;
import com.system.user.entity.guard.User;
import com.system.user.entity.guard.UserCondition;
import org.hibernate.Query;
import org.hibernate.type.DateType;
import org.hibernate.type.IntegerType;
import org.hibernate.type.LongType;
import org.hibernate.type.StringType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import java.util.HashMap;
import java.util.List;
import java.util.Map;


@Repository
public class UserDao  {
	 @Autowired
    public BaseDao baseDao;

    /**
     * HQL分页列表关联查询查询方法
     *
     * @param obj:实体类
     * @param condition:查询条件及分页
     * @return
     */
    public LayuiPage<User> pageUserList(User obj, UserCondition condition) {
        String totalHql = "select count(1) ";
        String leftHql = "select new  User(us.id,us.name,us.loginName,us.state," +
                "us.remark, us.createTime,us.createId,a.name)";
        String hql = " from User us, User a  where  us.createId = a.id  ";
        Map<String, Object> param = new HashMap<>();
        // 用户名称
        if (!StringUtils.isEmpty(obj.getName())) {
            hql += " and us.name like :name ";
            param.put("name", "%" + obj.getName().trim() + "%");
        }
        //获取总条数
        Long total = baseDao.countByHql(totalHql + hql, param);
        //添加排序
        hql += " order by us.createTime desc";
        List<User> list = baseDao.findByHql(leftHql + hql, param, condition.getPageNum(), condition.getPageTotal());
        LayuiPage<User> ret = new LayuiPage<User>(total, list);
        return ret;
    }

    /**
     * SQL分页列表关联查询查询方法
     *
     * @param obj:实体类
     * @param condition:查询条件及分页
     * @return
     */
    public LayuiPage<User> pageUserListSql(User obj, UserCondition condition) {

        String totalSql = "select count(1) ";
        String leftSql = "SELECT us.id as id,us.name as name,us.login_name as loginName,us.state as state," +
                "us.remark as remark, us.create_time as createTime,us.create_id as createId,a.name as createName ";
        String sql = " from sys_user us " +
                "LEFT JOIN sys_user a ON us.create_id=a.id where 1=1 ";
        Map<String, Object> param = new HashMap<>();
        // 用户名称
        if (!StringUtils.isEmpty(obj.getName())) {
            sql += " and us.name like :name ";
            param.put("name", "%" + obj.getName().trim() + "%");
        }
        //获取总条数
        Long total = baseDao.countBySql(totalSql + sql, param);
        //添加排序
        sql += " order by us.create_time desc";
        Query query = baseDao.getCurrentSession().createSQLQuery(leftSql + sql)
                .addScalar("id", new LongType())
                .addScalar("name", new StringType())
                .addScalar("loginName", new StringType())
                .addScalar("state", new IntegerType())
                .addScalar("remark", new StringType())
                .addScalar("createTime", new DateType())
                .addScalar("createId", new LongType())
                .addScalar("createName", new StringType())
                .setFirstResult((condition.getPageNum() - 1) * condition.getPageTotal())
                .setMaxResults(condition.getPageTotal())
                .setResultTransformer(Transformers.aliasToBean(User.class));
        if (!param.isEmpty()) {
            for (String key : param.keySet()) {
                query.setParameter(key, param.get(key));
            }
        }
        List<User> list = query.list();
        LayuiPage<User> ret = new LayuiPage<User>(total, list);
        return ret;
    }
    /**
     * SQL分页列表关联查询查询方法 
     *
     * @param obj:实体类
     * @param condition:查询条件及分页
     * @return
     */
    public LayuiPage<Map<String, Object>> pageUserListSqlMap(User obj, UserCondition condition) {

        String leftSql = "SELECT us.id as id,us.name as name,us.login_name as loginName,us.state as state," +
                "us.remark as remark, us.create_time as createTime,us.create_id as createId,a.name as createName ";
        String sql = " from sys_user us " +
                "LEFT JOIN sys_user a ON us.create_id=a.id where 1=1 ";
        Map<String, Object> param = new HashMap<>();
        // 用户名称
        if (!StringUtils.isEmpty(obj.getName())) {
            sql += " and us.name like :name ";
            param.put("name", "%" + obj.getName().trim() + "%");
        }
        String totalSql = "select count(*) " + sql;
        //获取总条数
        Long total = baseDao.countBySql(totalSql, param);
        //添加排序
        sql += " order by us.create_time desc";
        List<Map<String, Object>> list = baseDao.findBySql(leftSql + sql, param, condition.getPageNum(), condition.getPageTotal());
        LayuiPage<Map<String, Object>> ret = new LayuiPage<Map<String, Object>>(total, list);
        return ret;
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值