• 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方法在不同主键策略下的使用方法。在实际开发中,需要根据业务需求选择合适的方法来执行相应的操作,并根据主键策略来避免重复数据的问题。同时,也可以通过设置事务管理来确保数据的一致性和完整性,从而提高系统的可靠性和稳定性。

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

  • 相关阅读:
    Redis安装
    基于Kylin的数据统计分析平台架构设计与实现
    Pulsar 各个Shedder分析及新的Shedder -- AvgShedder
    XV4001BD(数字输出陀螺传感器) 汽车级晶振
    产品升级!全球尺度下原核基因组关键基因共进化无标题
    【树莓派】yolov5 Lite,目标检测,树莓派4B,推理v5lite-e_end2end.onnx,摄像头实时目标检测
    CV计算机视觉每日开源代码Paper with code速览-2023.11.16
    Spring Data REST 敏感信息泄露漏洞
    python编程“常识”【pip安装路径、计算、pycharm中的terminal运行前面的PS修改成自己环境】
    输赢只是一时
  • 原文地址:https://blog.csdn.net/luansj/article/details/139656911