mybatis foreach 动态插入sql语句
发布日期:2021-06-30 13:14:05 浏览次数:3 分类:技术文章

本文共 2738 字,大约阅读时间需要 9 分钟。

文章目录

有一个需求是需要写如下的动态sql ,
‘149’,‘145’ 这些个数的不确定的,

那么就需要用到mybatis的foreach了.

需要在mybatis中传入数组进去.
网上大多数关于foreach的用法是关于in的循环的.如下

但是上面的用法并不符合需求. 需要进行改造.

Model

首先在模型中,要有一个数组的属性

Service

在service层中,对模型的数组属性进行赋值

调用setLableIds方法

public List
> getFavAndList(FavModel model) {
String lableId = model.getLableId(); String[] array = lableId.split(","); model.setLableIds(array); try {
return favDao.getFavAndList(model); } catch (Exception e) {
e.printStackTrace(); } return favDao.getFavAndList(model); }

dao

List
> getFavAndList(FavModel model);

Mapper

其中foreach的写法如下

and tagSplit(s.lableids, ${value}) = 1

注意:

**在foreach的属性中,不需要写open="(" separator="," close=")".
其中collection中的值,要和model数组属性名对应上. **
item的value,就是${value},要对应上. 会把每次的数组变量的值,给赋值过去.
最后会形成如下的sql语句.
此处是加了where的标签. 因此第一个语句的前面是没有and的.

tagSplit(s.lables, 137) = 1   and tagSplit(s.lables, 148) = 1 and  tagSplit(s.lables, 147) = 1

也可以写成如下的sql

最后形成的sql语句如下

额外的. 如果加了separator=",", 那么会导致在遍历sql的时候, 每句话,都加上逗号了.

完整的sql语句如下

转载地址:https://javaweixin6.blog.csdn.net/article/details/84893046 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:黑马十次方项目day01-06之 docker制作mysql镜像
下一篇:Oracle创建倒序序列

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月20日 22时57分46秒