MyBatis中正则使⽤foreach拼接字符串
⽬录
正则使⽤foreach拼接字符串
foreach标签拼接多字段in ,和union
正则使⽤foreach拼接字符串
业务需求:使⽤代理名字查询该代理的所有下级代理
数据库:
pid存储的是该字段的上级集合
实现步骤:
1、先⽤名字在⽤户表中查询出⽤户id集合
2、在数据库中判断字段pids中是否出现这些id,再去重
-------上重点-------:
在mybatis中写拼接这个sql碰到了很多坑,记录下这个教训:
1、foreach拼接字符串,开头和结尾⽤单引号,否则报错
2、中括号使⽤转义符,否则查询结果不正确
3、${item}不能⽤#,否则报错
4、使⽤replace函数去空格,否则查询不到结果(mybatis⾃动给我加上了空格)
foreach标签拼接多字段in ,和union
mybatis for标签⼿写肯定是不可能,复制⼜经常忘记哪⾥有,记录⼀下复制⽅便
(oracle数据库)
批量添加 ,修改 ,拼接(xx,xx)in , union
添加,修改:
<foreach item="list" index="index" collection="list" open="begin" close="end;"> INSERT INTO XXX( xxx ) VALUES( #{list.XXX,jdbcType=VARCHAR}, #{xxx} //值不在list对象⾥,需要在mapper上加@param注解 ); </foreach>
字段字符串去重复(字段,字段) in :
(<foreach collection="paramList" index="index" item="item" open="(字段,字段,字段) in(" separator="," close=")"> <if test="index%900==0">(#{item.XX},#{item.XX},#{item.XXX})) or (XX,XX,XX) in(</if> (#{item.XX},#{item.XX},#{item.XX}) < /foreach> )注意拼接in时要⽤()包住for标签
union:
xx
from(
<foreach collection="query.list" item="item" separator="union all">
select list.XX
from XXX list
<where>
list.XX= #{item}
< if test="!= null != ''">
= #{}
< /if>
< /where>
</foreach>
) a
order
mysql数据库:
使⽤批量添加修改的时候需要在数据库地址加上: allowMultiQueries=true
url: jdbc:mysql://:xxxx/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true
删除重复数据保留最⼤的id
select *
FROM
table AS ta
WHERE
ta.id <> (
SELECT
t.maxid
FROM
( SELECT max( tb.id ) AS maxid FROM table AS tb WHERE ta.job_id = tb.job_id ) t
);
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论