【SpringBoot系列】SpringBoot集成Mybatis 实现InsertOrUpdate功能

需求场景

项目开发过程中,难免会遇到这样的场景:对一张表,当数据不存在的时候,进行insert插入操作;数据存在的时候,进行update更新操作;

下面就来使用Mybatis的InsertOrUpdate功能来实现一下:

具体实现

关于SpringBoot集成Mybatis可以参考:https://blog.csdn.net/weixin_43759352/article/details/104494336,在这里不再详细介绍

新建实体类City.java

@Data
@ToString
public class City implements BaseDO {
    private String id;
    private String province;
    private String city;
    private String district;
    private String detail;
    
    private String insertBy;
    private String updateBy;
    private Date insertTime;
    private Date updateTime;

    private int count;
}

新增Mapper接口及对应的Mapper.xml

void insertOrUpdateCity(City city);
<update id="insertOrUpdateCity" parameterType="com.example.simplememory.entity.City">
        <selectKey keyProperty="count" resultType="int" order="BEFORE">
            select count(1) from sys_city where id= #{id}
        </selectKey>
        <if test="count > 0">
            update sys_city
            <set>
                <if test="province != null and province != ''">
                    province= #{province},
                </if>
                <if test="city != null and city != ''">
                    city= #{city},
                </if>
                <if test="district != null and district != ''">
                    district= #{district},
                </if>
                <if test="detail != null and detail != ''">
                    detail= #{detail},
                </if>
            </set>
            where ID = #{id}
        </if>
        <if test="count == 0">
            insert into sys_city
            <trim prefix="(" suffix=")" suffixOverrides=",">
                ID,
                <if test="province != null and province != ''">
                    province,
                </if>
                <if test="city != null and city != ''">
                    city,
                </if>
                <if test="district != null and district != ''">
                    district,
                </if>
                <if test="detail != null and detail != ''">
                    detail,
                </if>
            </trim>
            <trim prefix="values (" suffix=")" suffixOverrides=",">
                #{id},
                <if test="province != null and province != ''">
                    #{province},
                </if>
                <if test="city != null and city != ''">
                    #{city},
                </if>
                <if test="district != null and district != ''">
                    #{district},
                </if>
                <if test="detail != null and detail != ''">
                    #{detail},
                </if>
            </trim>
        </if>
    </update>

说明:

上面的selectKey标签,可以给update标签中的parameterType属性(model类)对应的对象设置属性值

selectKey标签的属性描述:

  • keyProperty属性:selectKey 语句结果应该被设置的目标属性。上述对应的是实体City类的count属性。
  • resultType属性:结果的类型,此处为属性count的类型。
  • order属性:可以被设置为 BEFORE 或 AFTER。BEFORE表示先执行selectKey语句,后执行update语句;AFTER表示先执行update语句,后执行selectKey语句。


原文始发于微信公众号(SimpleMemory):【SpringBoot系列】SpringBoot集成Mybatis 实现InsertOrUpdate功能

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/137915.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!