返回顶部
首页 > 资讯 > 数据库 >Java中用Mybatis插入mysql报主键重复的解决方案
  • 647
分享到

Java中用Mybatis插入mysql报主键重复的解决方案

JavaMybatisMybatis插入mysqlmysql主键重复 2023-02-08 09:02:41 647人浏览 独家记忆
摘要

目录mybatis插入Mysql报主键重复的问题Mybatis返回插入的主键总结Mybatis插入mysql报主键重复的问题 首先思路是这样的,先去数据表里面去找有没有这个主键的数

Mybatis插入mysql报主键重复的问题

首先思路是这样的,先去数据表里面去找有没有这个主键的数据(如果有会有返回值,如果没有则返回null),如果有则对该条数据进行更新操作,如果没有,则对数据表进行插入操作。

原来数据表中有这些数据。

数据表对应的bean的结构如下:

public class DataBean {
    String key;
    String value;
 
    public DataBean() {
 
    }
    public DataBean(String key, String value) {
        this.key = key;
        this.value = value;
    }
 
    public String geTKEy() {
        return key;
    }
 
    public void setKey(String key) {
        this.key = key;
    }
 
    public String getValue() {
        return value;
    }
 
    public void setValue(String value) {
        this.value = value;
    }
 
    @Override
    public String toString() {
        return "DataBean{" +
                "key='" + key + '\'' +
                ", value='" + value + '\'' +
                '}';
    }
}

下面是我Mapper内的内容:

    <insert id="InsertDataToTestTable" parameterType="test.bean.DataBean">
        insert into testtable values(#{key},#{value})
    </insert>
 
    <update id="UpdateDataToTestTable" parameterType="test.bean.DataBean">
        UPDATE testtable SET value=#{value} WHERE `key`=#{key}
    </update>
 
    <select id="SelectDataToTestTable" parameterType="int" resultType="test.bean.DataBean">
        SELECT * from testtable where `key`=#{key}
    </select>

首先通过sqlSession.selectOne去查,看我此次想要插入的bean是否存在于表里面(表的主键为key),如果存在,那么select语句会返回Databean对象,此时就可以去对表中数据进行相应的value更新操作了。

如果不存在的话,那么select语句返回的是null,此时就可以进行相应的插入操作,将数据插入到表中。

下面是测试代码:

    public static void main(String[] args) {
        SqlSession session = SqlSessionFactoryUtil.getSqlSession();
         DataBean dataBean=new DataBean();
         dataBean.setKey("123");
         dataBean.setValue("1111");
 
 
         if(session.selectOne("DataMapper.SelectDataToTestTable",Integer.valueOf(dataBean.getKey()))!=null){
             //查看select语句输出结果
             System.out.println(session.selectOne("DataMapper.SelectDataToTestTable",Integer.valueOf(dataBean.getKey())));
             session.update("DataMapper.UpdateDataToTestTable",dataBean);
         }else {
             session.insert("DataMapper.InsertDataToTestTable", dataBean);
         }
            session.commit();
    }

现在我的表里面是有key=123,value=111的记录,那么我这次执行程序会将其value更新为1111。下面请看输出结果以及表中数据更改。

select操作在查询key为123的时候返回的值。

并且数据库的记录已经做了对应的更改。

下面我进行插入记录key:123333 value:123123,我们知道表中是没有key为123333的记录的,所以select操作会返回null,然后执行insert操作而不是update操作。

    public static void main(String[] args) {
        SqlSession session = SqlSessionFactoryUtil.getSqlSession();
         DataBean dataBean=new DataBean();
         dataBean.setKey("123333");
         dataBean.setValue("123123");
 
 
 
         if(session.selectOne("DataMapper.SelectDataToTestTable",Integer.valueOf(dataBean.getKey()))!=null){
             //查看select语句输出结果
             System.out.println(session.selectOne("DataMapper.SelectDataToTestTable",Integer.valueOf(dataBean.getKey())));
             session.update("DataMapper.UpdateDataToTestTable",dataBean);
         }else {
             session.insert("DataMapper.InsertDataToTestTable", dataBean);
         }
            session.commit();
    }

至此,当数据库插入数据的时候遇到主键重复的错误问题已经解决,我这里只是提供一种思路和一些简单的实现,希望能对你们有帮助~

Mybatis返回插入的主键

<insert id="insertTask" parameterType="Task" useGeneratedKeys="true" keyProperty="id">

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

您可能感兴趣的文档:

--结束END--

本文标题: Java中用Mybatis插入mysql报主键重复的解决方案

本文链接: https://lsjlt.com/news/194586.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作