MyBatis中正则使用foreach拼接字符串

网友投稿 1085 2022-11-08

MyBatis中正则使用foreach拼接字符串

MyBatis中正则使用foreach拼接字符串

目录正则使用wJOaGKJaforeach拼接字符串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

添加,修改:

INSERT INTO XXX( xxx ) VALUES( #{list.XXX,jdbcType=VARCHAR}, #{xxx} //值不在list对象里,需要在mapper上加@param注解 );

(字段,字段) in :

( (#{item.XX},#{item.XX},#{item.XXX})) or (XX,XX,XX) in( (#{item.XX},#{item.XX},#{item.XX}) < /foreach> )

注意拼接in时 要用()包住for标签

union:

select a.xx xx

from(

select list.XX

from XXX list

list.XX= #{item}

< if test="query.xx!= null and query.xx!= ''">

and list.xx= #{query.xx}

< /if>

< /where>

) a

order by a.xx

mysql数据库:

使用批量添加修改的时候需要在数据库地址加上: allowMultiQueries=true

url: jdbc:mysql://192.xxx.xx.xx:xxxx/test?useUnicode=true&characterEncoding=UTF-8&serverTimezohttp://ne=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

);

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:某校2019专硕编程题-前10名学生成绩
下一篇:【C++】初识
相关文章

 发表评论

暂时没有评论,来抢沙发吧~