• Mybatis save、saveOrUpdate、update的区别


    哈喽,大家好,我是木头左!

    1. save方法

    Mybatis的save方法用于插入一条新的记录。当数据库中不存在相同的记录时,会执行插入操作;如果已经存在相同的记录,则会抛出异常。

    int result = sqlSession.insert("userMapper.save", user);
    

    2. saveOrUpdate方法

    Mybatis的saveOrUpdate方法用于插入或更新一条记录。当数据库中不存在相同的记录时,会执行插入操作;如果已经存在相同的记录,则会执行更新操作。

    int result = sqlSession.insert("userMapper.saveOrUpdate", user);
    

    3. update方法

    Mybatis的update方法用于更新一条记录。当数据库中存在相同的记录时,会执行更新操作;如果不存在相同的记录,则不会执行任何操作。

    int result = sqlSession.update("userMapper.update", user);
    

    4. 区别总结

    • save方法只适用于插入操作,如果数据库中已经存在相同的记录,会抛出异常。
    • saveOrUpdate方法既可以用于插入操作,也可以用于更新操作,当数据库中不存在相同的记录时,会执行插入操作;如果已经存在相同的记录,则会执行更新操作。
    • update方法只适用于更新操作,如果数据库中不存在相同的记录,则不会执行任何操作。

    通过以上介绍,可以看到save、saveOrUpdate和update方法在Mybatis中的不同作用。在实际开发中,需要根据业务需求选择合适的方法来执行相应的操作。同时,也可以通过设置主键策略来避免重复数据的问题,从而更好地使用Mybatis的这些方法。

    5. 主键策略设置

    5.1 自增主键

    当使用自增主键时,可以保证每条记录的主键都是唯一的,因此可以直接使用save或saveOrUpdate方法进行插入或更新操作。例如:

    <insert id="insertUser" parameterType="com.example.User">
        INSERT INTO user (id, name, age) VALUES (#{id}, #{name}, #{age})
    insert>
    

    5.2 非自增主键

    当使用非自增主键时,需要确保数据库中没有重复的主键值,否则会抛出异常。此时,可以使用以下两种方法来处理:

    • 先查询再判断:在执行插入或更新操作之前,先查询数据库中是否存在相同的主键值。如果存在,则不执行操作;如果不存在,则执行插入或更新操作。这种方法的缺点是可能会影响性能,因为需要多次查询数据库。例如:
    User user = getUserById(id);
    if (user == null) {
        user = new User();
        user.setId(id);
        user.setName(name);
        user.setAge(age);
        sqlSession.insert("userMapper.insert", user);
    } else {
        sqlSession.update("userMapper.update", user);
    }
    
    • 使用主键策略:在Mybatis的配置文件中设置主键策略为“NOT_NULL”,这样当数据库中不存在相同的主键值时,会自动生成一个新的主键值并执行插入或更新操作;如果已经存在相同的主键值,则会抛出异常。这种方法的优点是简单方便,但缺点是无法自定义主键生成逻辑。例如:
    <insert id="insertUser" parameterType="com.example.User">
        INSERT INTO user (id, name, age) VALUES (#{id,jdbcType=INTEGER}, #{name}, #{age}) ON CONFLICT DO NOTHING;
    insert>
    

    通过以上介绍,可以看到Mybatis save、saveOrUpdate和update方法在不同主键策略下的使用方法。在实际开发中,需要根据业务需求选择合适的方法来执行相应的操作,并根据主键策略来避免重复数据的问题。同时,也可以通过设置事务管理来确保数据的一致性和完整性,从而提高系统的可靠性和稳定性。

    我是木头左,感谢各位童鞋的点赞、收藏,我们下期更精彩!

  • 相关阅读:
    845. 八数码
    一文吃透Vuex3的状态管理
    2023年NPDP报考指南,有你不知道的吗?
    OJ_最大序列和
    六月集训(30)拓扑排序
    基于Java+Springmvc+vue+element实现高校心理健康系统详细设计和实现
    Spring Data JPA 之乐观锁
    故障管理:故障应急和故障复盘
    数据仓库介绍及应用场景
    【深度学习】NLP,Transformer讲解,代码实战
  • 原文地址:https://blog.csdn.net/luansj/article/details/139656911