记jap hibernate entitymanage nativesql 分页查询

package com.css.bpm.platform.sys.resource.repository.impl;

import com.css.bpm.platform.constants.YNEnum;
import com.css.bpm.platform.sys.resource.repository.SysResourceNativeRepository;
import com.css.bpm.platform.sys.resource.repository.entity.SysResourceEntity;
import com.css.bpm.platform.sys.resource.viewobjects.SysResourceParam;
import org.hibernate.query.internal.NativeQueryImpl;
import org.hibernate.transform.AliasToBeanResultTransformer;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Repository;
import org.springframework.util.ObjectUtils;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import java.math.BigInteger;
import java.util.List;

@Repository
public class SysResourceNativeRepositoryImpl implements SysResourceNativeRepository {

    @PersistenceContext
    EntityManager em;

    @Override
    public Page<SysResourceEntity> findResourceListBySysResourceParam(SysResourceParam sysResourceParam){

        StringBuffer sql = new StringBuffer(
                "select a.res_id resId,a.res_url resUrl,a.res_name resName,a.res_dir_id resDirId,a.sort sort,a.description description,a.create_user as createUser,a.create_time createTime,a.update_user updateUser,a.update_time updateTime " +
                        "from sys_resource a left join sys_resource_auth b on a.res_id = b.res_id ");
        StringBuffer whereSql = new StringBuffer(" where 1=1 and a.is_valid = '"+YNEnum.Y.toString()+"' and b.is_valid = '"+YNEnum.Y.toString()+"'" );

            if(!ObjectUtils.isEmpty(sysResourceParam.getResName())){
                whereSql.append(" and res_name like :resName ");
            }
            if(!ObjectUtils.isEmpty(sysResourceParam.getResUrl())){
                whereSql.append(" and res_url like :resUrl ");
            }
            if(!ObjectUtils.isEmpty(sysResourceParam.getRoleId())){
                whereSql.append(" and b.role_id = :roleId ");
            }

        StringBuffer orderSql = new StringBuffer(" order by a.sort ");
        Query query = em.createNativeQuery(sql.append(whereSql).append(orderSql).toString());

        StringBuilder countSql = new StringBuilder(
                "select count(a.res_id) " +
                        "from sys_resource a left join sys_resource_auth b on a.res_id = b.res_id and a.is_valid = '"+ YNEnum.Y.toString()+ "' and b.is_valid = '"+YNEnum.Y.toString()+"'" );
        Query countQuery = em.createNativeQuery(countSql.append(whereSql).toString());


            if(!ObjectUtils.isEmpty(sysResourceParam.getResName())){
                query.setParameter("resName","%"+sysResourceParam.getResName()+"%");
                countQuery.setParameter("resName","%"+sysResourceParam.getResName()+"%");
            }
            if(!ObjectUtils.isEmpty(sysResourceParam.getResUrl())){
                query.setParameter("resUrl","%"+sysResourceParam.getResUrl()+"%");
                countQuery.setParameter("resUrl","%"+sysResourceParam.getResUrl()+"%");
            }

            if(!ObjectUtils.isEmpty(sysResourceParam.getRoleId())){
                query.setParameter("roleId",sysResourceParam.getRoleId());
                countQuery.setParameter("roleId",sysResourceParam.getRoleId());
            }

        query.unwrap(NativeQueryImpl.class).setResultTransformer(new AliasToBeanResultTransformer(SysResourceEntity.class));

        Pageable pageable = PageRequest.of(sysResourceParam.getCurPage() - 1 ,sysResourceParam.getPageSize());
        query.setFirstResult(pageable.getPageNumber() * pageable.getPageSize());
        query.setMaxResults(pageable.getPageSize());
        List<SysResourceEntity> list = query.getResultList();
        BigInteger count = null;
        if(list.size()>0){
            count =  (BigInteger) countQuery.getSingleResult();
        }else{
            count = new BigInteger("0");
        }
        Page<SysResourceEntity> sysResourcePage = new PageImpl<SysResourceEntity>(list, pageable,count.longValue());
        return sysResourcePage;
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值