Mybatis 中的INSERT ON DUPLICATE KEY UPDATE用法 - 面试宝典

举报
皮牙子抓饭 发表于 2023/08/21 09:27:35 2023/08/21
【摘要】 在Mybatis中,INSERT ON DUPLICATE KEY UPDATE是一种用于处理插入重复数据的语法。它可以在插入数据时,如果遇到重复的唯一键(unique key)或主键(primary key),就执行更新操作而不是插入操作。 具体用法如下:sqlCopy codeINSERT INTO table_name (column1, column2, ...)VALUES (va...

在Mybatis中,INSERT ON DUPLICATE KEY UPDATE是一种用于处理插入重复数据的语法。它可以在插入数据时,如果遇到重复的唯一键(unique key)或主键(primary key),就执行更新操作而不是插入操作。 具体用法如下:

sqlCopy codeINSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...)
ON DUPLICATE KEY UPDATE column1 = value1, column2 = value2, ...

其中,table_name是要插入数据的表名,column1、column2等是要插入的列名,value1、value2等是对应的值。 ON DUPLICATE KEY UPDATE后面的部分是要执行的更新操作,可以按需指定要更新的列和对应的值。 需要注意的是,使用INSERT ON DUPLICATE KEY UPDATE时,表中需要存在唯一键或主键约束,才能判断是否重复。如果插入的数据不重复,则会执行插入操作;如果数据重复,则会执行更新操作。 这种语法可以避免在应用层面进行判断和操作,提高了数据插入的效率和简洁性。在实际应用中,可以根据具体业务需求来选择使用该语法。

下面是一个示例的Mybatis Mapper XML配置和对应的Java代码: Mapper XML配置:

xmlCopy code<!-- 定义插入数据的SQL语句 -->
<insert id="insertOrUpdateData" parameterType="com.example.model.Data">
    INSERT INTO data_table (id, name, value)
    VALUES (#{id}, #{name}, #{value})
    ON DUPLICATE KEY UPDATE name = #{name}, value = #{value}
</insert>

Java代码:

javaCopy code// 定义数据模型
public class Data {
    private int id;
    private String name;
    private String value;
    // 省略getter和setter方法
}
// 定义Mapper接口
public interface DataMapper {
    void insertOrUpdateData(Data data);
}
// 调用Mapper接口方法
Data data = new Data();
data.setId(1);
data.setName("example");
data.setValue("123");
// 通过Mybatis的SqlSession执行插入或更新操作
SqlSession sqlSession = sqlSessionFactory.openSession();
DataMapper dataMapper = sqlSession.getMapper(DataMapper.class);
dataMapper.insertOrUpdateData(data);
// 提交事务
sqlSession.commit();
sqlSession.close();

以上示例代码中,假设有一个名为data_table的表,其中id列为主键或唯一键。通过调用DataMapper接口的insertOrUpdateData方法,可以插入或更新数据到data_table表中。如果数据已存在,则会执行更新操作;如果数据不存在,则会执行插入操作。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。