文章目录
- 一、 根据相应的唯一主键来判断是否新增或更新 [对事务支持较好]
- 二、根据selectkey判断查询的count值是否为1,然后再进行新增或更新
前言:我们在做批量更新或者插入时候,不想在代码中写sql查询数据库,可以通过mybatis 写sql来实现。有两种实现方法。
一、 根据相应的唯一主键来判断是否新增或更新 [对事务支持较好]
最关键的语句为: on duplicate key update
<insert id="saveOrUpdate" parameterType="">
insert into user (
id,name,age)
values
<foreach collection="list" item="user" separator="," >
(
#{id,jdbcType=INTEGER},#{user.age},
#{user.name}
)
</foreach>
on duplicate key update name= values(name)
</insert>
其中name = values(name) name为数据库字段,这个是重点。
二、根据selectkey判断查询的count值是否为1,然后再进行新增或更新
<insert id="saveOrUpdate2" >
<selectKey keyProperty="count" resultType="int" order="BEFORE">
select count(*) from user where id = #{id}
</selectKey>
<if test="count > 0">
update user
set age = #{aget},name = #{name}
where id = #{id}
</if>
<if test="count==0">
insert into user values(#{age},#{name})
</if>
</insert>
通过selectKey做第一次查询,然后根据结果进行判断,所以这里的order="BEFORE"是必须的。
也是因为BEFORE,所以没法通过标签来临时存储中间的值,只能在入参中增加属性来存放。