想在mapper的一个更新节点进行多条update语句的操作:
<update id="cleanUserByPhone" parameterType="java.lang.String">
update user set valid_status = 1 where mobile_phone = #{mobilePhone};
update user_account set valid_status = 1 where mobile_phone = #{mobilePhone} ;
</update>
foreach 方式断句,用分号分隔每个update语句,注意< 和 > 等需要转义的符号
<update id="updateMore" parameterType="java.util.List">
<foreach collection="articleList" item="item" index="index" open="" close="" separator=";">
update article
<set>
<if test="item.contentAuthor != null">content_author = #{item.contentAuthor}, </if>
<if test="item.contentTitle != null">content_title = #{item.contentTitle}, </if>
<if test="item.contentLink != null"> content_link = #{item.contentLink}, </if>
update_date = #{item.updateDate}
</set>
where article_id = #{item.articleId} and staff_id = #{item.staffId} and status < 5
</foreach>
</update>
mybatis是默认不支持多条语句拼接插入或更新的,需要在数据库配置中配置相关参数 以允许使用分号分隔sql语句:
propertes 或者yml配置 文件中的jdbc后追加&allowMultiQueries=true
application-prod.yml 数据源配置参考
spring:
# 数据源配置
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
druid:
# 主库数据源
master: #localhost
url: jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: aaaa@123
参考:
springboot+Mybatis+MySql 一个update标签中执行多条update sql语句_yjl33的博客-CSDN博客