JPA使用动态加载查询条件的分页查询

VO对象

package com.yima.core.module.finance.vo;

import java.io.Serializable;
import java.util.Date;

/**
 * <p>view-object:司机提现申请</p>
 * @author Yifei Kuang
 * */
public class VWithdrawal implements Serializable {

    private static final long serialVersionUID = 2373108562100965579L;

    /** 开始时间 */
    private Date startTime;

    /** 结束时间 */
    private Date endTime;

    /** 申请方 franchisee_id */
    private String franchiseeId;

    /** 姓名 */
    private String userName;

    /** 手机号 */
    private String phone;

    /** 状态 */
    private int state;

    /** 页码 */
    private int pageNum;

    /** 每页显示个数 */
    private int pageSize;

  //省略get/set/toString()方法....
}

schema类,要操作的entity类

package com.yima.core.module.finance.schema;

import com.tsborn.framework.dao.orm.annotation.Comment;
import com.tsborn.framework.dao.orm.schema.IdEntity;
import org.hibernate.annotations.*;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.math.BigDecimal;
import java.util.Date;

/**
 *
 * @author: Yifei Kuang
 *
 */

@Entity
@Table(indexes = {}, name = "t_withdrawal")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE, include = "non-lazy")
@Comment("提现申请")
@SelectBeforeUpdate(true)
@DynamicUpdate
@DynamicInsert
public class TWithdrawal extends IdEntity {

    private static final long serialVersionUID = -2265891880683047271L;

    @Comment("所属平台")
    @Column(name = "franchisee_id")
    private String franchiseeId;

    @Comment("会员ID")
    @Column(name = "member_id")
    private String memberId;

    @Comment("姓名")
    @Column(name = "username")
    private String userName;

    @Comment("手机号")
    @Column(name = "phone")
    private String phone;

    @Comment("提现金额")
    @Column(name = "withdraw_fee")
    private BigDecimal withdrawFee;

    @Comment("实际到账金额")
    @Column(name = "actual_fee")
    private BigDecimal actualFee;

    @Comment("申请时间")
    @Column(name = "create_time")
    private Date createTime;

    @Comment("开户行")
    @Column(name = "bank")
    private String bank;

    @Comment("卡号")
    @Column(name = "card_no")
    private String cardNo;

    @Comment("开户行姓名")
    @Column(name = "card_holder")
    private String cardHolder;

    @Comment("状态:1.待审核,2.已通过,3.已驳回,4.已打款")
    @Column(name = "state")
    private int state;

    @Comment("驳回理由")
    @Column(name = "verify_reason")
    private String verifyReason;

    @Comment("审核时间")
    @Column(name = "verify_time")
    private Date verifyTime;

    @Comment("审核员")
    @Column(name = "verify_user")
    private String verifyUser;

    @Comment("受理员")
    @Column(name = "dispose_user")
    private String disposeUser;

    @Comment("受理时间")
    @Column(name = "dispose_time")
    private Date disposeTime;

    @Comment("受理备注")
    @Column(name = "dispose_reason")
    private String disposeReason;

    //get/set/toString()方法省略...
    
}

Repository

package com.yima.core.module.finance.dao;

import com.yima.core.module.finance.schema.TWithdrawal;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;


public interface TWithdrawalRepository extends JpaRepository<TWithdrawal,String>, JpaSpecificationExecutor<TWithdrawal> {

    Page<TWithdrawal> findAll(Specification<TWithdrawal> specification, Pageable pageable);
    

}

Service接口

package com.yima.core.module.finance.service;


import com.yima.core.module.common.utils.result.Result;
import com.yima.core.module.finance.vo.VWithdrawal;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * <p>司机提现申请service接口</p>
 * @author Yifei Kuang
 *
 * */
@Service
@Transactional
public interface TWithdrawalService {

    /** 查询指定页码的记录<br> */
    Result findAll(VWithdrawal vWithdrawal);


}

Service接口的实现类

package com.yima.core.module.finance.service.impl;

import com.yima.core.module.common.utils.result.Result;
import com.yima.core.module.finance.dao.TWithdrawalRepository;
import com.yima.core.module.finance.schema.TWithdrawal;
import com.yima.core.module.finance.service.TWithdrawalService;
import com.yima.core.module.finance.vo.VWithdrawal;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import java.util.ArrayList;
import java.util.List;

/**
 * <p> 提现接口的实现类 </p>
 * @author Yifei Kuang
 * */
@Service
@Transactional
public class TWithdrawalServiceImpl implements TWithdrawalService {

    @Autowired
    private TWithdrawalRepository tWithdrawalRepository;

    /**
     * <p> 传入提现vo对象,拼接查询条件,返回Result<Page>对象给前台 </p>
     * */
    @Override
    public Result findAll(VWithdrawal vWithdrawal) {

        Specification<TWithdrawal> specification = new Specification<TWithdrawal>() {
            @Override
            public Predicate toPredicate(Root<TWithdrawal> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
            	//放置查询条件的List
                List<Predicate> predicatesList = new ArrayList<Predicate>();

                Predicate condition1 = null;
                /** 申请时间开始时间存在 */
                if (null != vWithdrawal.getStartTime()) {
                    condition1 = criteriaBuilder.greaterThanOrEqualTo(root.get("createTime"), vWithdrawal.getStartTime());
                    predicatesList.add(condition1);
                }
                Predicate condition2 = null;
                /** 申请时间结束时间存在 */
                if (null != vWithdrawal.getEndTime()) {
                    condition2 = criteriaBuilder.lessThanOrEqualTo(root.get("createTime"), vWithdrawal.getEndTime());
                    predicatesList.add(condition2);
                }
                Predicate condition3 = null;
                /** 申请条件有手机号 */
                if (!StringUtils.isNotBlank(vWithdrawal.getPhone())) {
                    condition3 = criteriaBuilder.equal(root.get("phone"), vWithdrawal.getPhone());
                    predicatesList.add(condition3);
                }
                Predicate condition4 = null;
                /** 申请条件有用户名 */
                if (!StringUtils.isNotBlank(vWithdrawal.getUserName())) {
                    condition4 = criteriaBuilder.equal(root.get("userName"), vWithdrawal.getUserName());
                    predicatesList.add(condition4);
                }
                Predicate condition5 = null;
                /** 申请条件有申请方 */
                if (!StringUtils.isNotBlank(vWithdrawal.getFranchiseeId())) {
                    condition5 = criteriaBuilder.equal(root.get("franchiseeId"), vWithdrawal.getFranchiseeId());
                    predicatesList.add(condition5);
                }
                Predicate condition = criteriaBuilder.equal(root.get("state"), vWithdrawal.getState());
                predicatesList.add(condition);
                criteriaQuery.where(predicatesList.toArray(new Predicate[predicatesList.size()]));
                return null;
            }
        };

        Pageable pageable = new PageRequest(vWithdrawal.getPageNum(),vWithdrawal.getPageSize());

		//调用分页+动态加载条件查询,并返回给前台	
        return Result.success(tWithdrawalRepository.findAll(specification,pageable));
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自在如风。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值