联合主键与批量sql

本文介绍在采用联合主键ID+AREA_CODE的数据库设计中,如何利用MyBatis的foreach标签和CONCAT函数进行高效的数据查询与更新操作。通过创建临时concatStr属性,实现对多个记录的快速检索,避免传统where in语句的局限。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值