本文是关于如何使用Mybatis注释来完成SQL语句与输入参数列表的拼接。我觉得边肖很实用,就和大家分享一下作为参考。让我们跟着边肖看一看。
00-1010首先,将列表集拼接成“1,2,3,4”格式字符串。
然后将这个字符串封装在一个类中:TyreInfoIdStr。
这里的@SelectProvider是以sql语句调用外部类的方法的返回值。
在这个方法中,SQL语句和列表集的字符串是拼接的,这是我在这里预先拼接的。
00-1010当deptId为1时,sql语句不会改变。
当deptId是另一个数字时,列表中的Id项用作sql查询条件
在开始编写时,想法是使用or语句来迭代、重复和添加or sql语句来查询。
人们发现这很复杂。最后,采用sql的in函数来实现。
public stringgetdeptidsql(listlongnitillist){ 0
IteratorLongit=deptidlist . iterator();
//部门标识为1时不过滤。
while(it . HasNeXt()){ 0
陇肽=it . next();
if(DepTiD==1){ 0
返回“”;
}
}
//条件语句中的拼接
字符串=' ';
for(inti=0;ideptidlist . size();I){ 0
如果(我!=(DepTidList . size()-1)){ 0
s=deptIdList.get(i)',';
}else{
(=NationalBureauofStandards)国家标准局
p; s += deptIdList.get(i);
}
}
String sql = " and mtMaintenanceStandard.dept_Id in (" + s + ") ";
return sql;
}
编写完成后发现函数有可以提高函数的复用性,将mtMaintenanceStandard.dept_Id设为传入的变量
最后得到
public String getDeptIdSql(String condition,List<Long> deptIdList){ Iterator<Long> it = deptIdList.iterator(); //当部门id为1时 不采用筛选 while(it.hasNext()){ Long deptId = it.next(); if(deptId == 1){ return ""; } } //拼接in条件语句 String s = ""; for(int i = 0; i < deptIdList.size();i++){ if(i!=(deptIdList.size()-1)){ s += deptIdList.get(i) + ","; }else{ s += deptIdList.get(i); } } String sql = " and " + condition + " in (" + s + ") "; return sql; }
更为通用的版本是不用判断deptId是否为1
public String getDeptIdSql(String condition,List<Long> deptIdList){ String s = ""; for(int i = 0; i < deptIdList.size();i++){ if(i!=(deptIdList.size()-1)){ s += deptIdList.get(i) + ","; }else{ s += deptIdList.get(i); } } String sql = " and " + condition + " in (" + s + ") "; return sql; }
感谢各位的阅读!关于“如何使用Mybatis注解方式完成输入参数为list的SQL语句拼接方式”这篇文章就分享到这里了,希望
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/126938.html