Java中用Mybatis插入mysql报主键重复的解决方案
作者:泽米 时间:2024-01-20 01:49:45
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">
来源:https://blog.csdn.net/a6822342/article/details/80245007
标签:Java,Mybatis,mysql,主键重复
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Django+boostrap 美化admin后台的操作
2022-02-26 16:16:21
![](https://img.aspxhome.com/file/2023/3/71503_0s.jpg)
使用Tensorflow将自己的数据分割成batch训练实例
2023-06-14 08:18:07
![](https://img.aspxhome.com/file/2023/6/111896_0s.jpg)
python爬虫中多线程的使用详解
2021-01-18 09:16:15
详解Python中的文件操作
2022-08-26 03:35:18
MySQL切分查询用法分析
2024-01-28 01:11:35
拒绝盗图!教你怎么用python给图片加水印
2022-05-29 21:42:51
![](https://img.aspxhome.com/file/2023/6/79406_0s.png)
Mysql双主搭建的方法步骤
2024-01-29 05:57:50
![](https://img.aspxhome.com/file/2023/0/128420_0s.png)
Python常用的日期时间处理方法示例
2023-07-30 04:31:05
Python部署web开发程序的几种方法
2023-08-24 06:30:32
Python使用paramiko连接远程服务器执行Shell命令的实现
2023-01-19 15:25:39
sysbench-0.4.12编译安装和CPU测试例子分享
2024-01-24 10:06:21
从一道js笔试题到==运算符的简析
2010-05-10 20:28:00
使用11行Python代码盗取了室友的U盘内容
2021-04-05 04:08:21
![](https://img.aspxhome.com/file/2023/7/111927_0s.png)
使用 JavaScript 获取本地盘符
2010-01-12 13:49:00
![](https://img.aspxhome.com/file/UploadPic/20101/12/1262936624-37s.png)
详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)
2022-01-24 04:44:33
![](https://img.aspxhome.com/file/2023/0/99270_0s.png)
如何用mysql自带的定时器定时执行sql(每天0点执行与间隔分/时执行)
2024-01-16 01:58:31
![](https://img.aspxhome.com/file/2023/6/99496_0s.png)
python颜色随机生成器的实例代码
2022-12-03 19:40:05
vue实现表单验证功能
2024-06-05 10:03:59
![](https://img.aspxhome.com/file/2023/2/122002_0s.jpg)
php源码的使用方法讲解
2023-06-17 21:47:02
js和jquery判断数据类型的4种方法总结
2023-08-25 08:49:18