联合主键与批量sql

最近手头的项目由于进行了备份,要重构数据库为联合主键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}也可以....

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值