Java 中MyBatis @SelectProvider注解使用多条件筛选

文章讲述了在Java项目中,当注释方式无法满足多条件筛选需求时,如何利用@SelectProvider注解来创建动态SQL。通过在类中定义方法返回SQL拼接字符串,在Mapper文件中引用该方法,实现了根据业务参数灵活构建查询语句的功能。

####场景
java使用不太熟悉,根据公司的项目写的一些接口,看到大部分查询数据中的操作都是用注释的方式去写的,也跟着照抄了。
不久后,就需要使用到多条件筛选了,注释的方式暂时无法满足,百度了下注释的方式写的过于麻烦,
就找到了@SelectProvider 这个。

需要在类中写个方法,返回一个sql的拼接字符就可以搞定了。

 在Mapper文件中testSummaryProvider类名,summaryList方法名
 @SelectProvider(type = testSummaryProvider.class, method = "summaryList")
 List<TestSummaryReport> getSelectSummaryList(selectSummaryVo summaryData);
testSummaryProvider文件中
# 通过buffer拼接sql语句就可以了,最后返回
public class testSummaryProvider {
    public String summaryList(selectSummaryVo summaryData){
        StringBuffer buffer = new StringBuffer();
        buffer.append("select id,jiraId,projectName,business,requirementType,workHours,bugNum from test_summary_report where ");
        if(!summaryData.getModel().equals("全选") && !summaryData.getModel().equals("")){
            System.out.println("非全选");
            buffer.append("business=").append("'"+summaryData.getModel()+"'").append(" and ");
        }
        buffer.append("createTime between ").append("'"+summaryData.getStartTime()+"'").append(" and ").append("'"+summaryData.getEndTime()+"'").append(" order by id desc");
        return buffer.toString();
    }

    public String summaryData(selectSummaryVo summaryData){
        StringBuffer buffer = new StringBuffer();
        buffer.append("select * from test_summary_data where ");
        if(!summaryData.getModel().equals("全选") && !summaryData.getModel().equals("")){
            System.out.println("非全选");
            buffer.append("business=").append("'"+summaryData.getModel()+"'").append(" and ");
        }
        buffer.append("createTime between ").append("'"+summaryData.getStartTime()+"'").append(" and ").append("'"+summaryData.getEndTime()+"'").append(" order by id desc");
        return buffer.toString()
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值