最近手头的项目由于进行了备份,要重构数据库为联合主键ID+AREA_CODE,(所以为什么不一开始就用snowflake这类的东西.....)
那么之后面临的问题是,简单的insert还好,如果需要高性能的select和update,必然要用where...in,对于联合主键来说就比较麻烦了,没有原来的这种写法简单:
WHERE ID IN (
<foreach collection="lists" item="emp" separator=",">#{emp.id}
</foreach>
)
那么要怎么写呢?我百度了下,想到个思路是CONCAT(ID,AREA_CODE),相当于拼接一个临时字段拿来查
之后试错了很久,想解决如何共用foreach和CONCAT的问题,终于解决了,现在把关键代码贴出来:
首先是给holder建立一个专门表示concat结果的属性:
private String concatStr;
public String getConcatStr(){
return getId()+this.areaCode;
}
public String setConcatStr(){
return getId()+this.areaCode;
}
然后就是拼接sql语句得这么写:
WHERE CONCAT(ID,AREA_CODE) IN (
<foreach collection="lists" item="emp" separator=",">'${emp.concatStr}'
</foreach>
)
我写的是'${emp.concatStr}',好像直接#{emp.concatStr}也可以....