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

453

被折叠的 条评论
为什么被折叠?



