一. 总结
1. MyBatis插入数据
Mapper文件的SQL语句 | 场景 | 执行结果 | Dao层返回值 | 主键是否自增 | 浏览器访问示例 |
---|---|---|---|---|---|
insert into | 正常插入 | 程序正常执行 | 1 | 主键自增 | |
insert into | 唯一索引重复 | ERROR(DuplicateKeyException),Duplicate entry ‘xixi1’ for key 'name’) | - | 主键不自增 | http://localhost:8080/insertUser?id=26&name=xixi1&age=21 |
insert into | 主键重复 | ERROR(DuplicateKeyException),Duplicate entry ‘25’ for key 'PRIMARY’ | - | 主键不自增 | http://localhost:8080/insertUser?id=25&name=xixi2&age=21 |
insert ignore into | 正常插入 | 程序正常执行 | 1 | 主键自增 | |
insert ignore into | 唯一索引重复 | 程序正常执行 | 0 | 主键不自增 | |
insert ignore into | 主键重复 | 程序正常执行 | 0 | 主键不自增 | |
replace into | 唯一索引重复 | 程序正常运行 | 2 | 删除旧记录,插入新记录 | |
replace into | 主键重复 | 程序正常运行 | 2 | 直接替换该行记录,id不会改变 | |
replace into | 主键和唯一索引都不重复 | 程序正常运行 | 1 | 新增一条记录 | http://localhost:8080/replaceNamesDO2?id=30&name=xixi7&age=189 |
2. MyBatis更新数据
Mapper文件的SQL语句 | 场景 | 执行结果 | Dao层返回值 | 主键是否自增 | 示例 |
---|---|---|---|---|---|
update | 正常更新 | 更新成功 | 1 | - | |
update | 旧数据和要更新的值完全一样 | 程序正常执行 | 1 | - | |
update | 没有找到该条数据 | 程序正常执行 | 0 | - | |
update | 修改的唯一索引字段已有值 | ERROR(DuplicateKeyException), Duplicate entry ‘xixi1’ for key 'name’ | - | - |
3. MyBatis删除数据
Mapper文件的SQL语句 | 场景 | 执行结果 | Dao层返回值 | 主键是否自增 | 示例 |
---|---|---|---|---|---|
delete | 正常删除数据 | 删除成功 | 1 | - | |
delete | 没有该条记录 | 程序正常运行 | 0 | - |
二. MyBatis与MySQL执行增删改操作的区别
- 插入操作:Mysq在执行插入操作(insert或insert ignore)时,如果唯一索引重复,无论SQL执行结果,主键仍会自增。
- Mysql中执行insert:执行报错,主键自增;
- Mysql中执行insert ignore:执行告警,主键自增。
- 更新操作:没有找到该条数据时,原生sql返回0行受影响,MyBatis返回结果为1。
- Mysql:执行结果为受影响的行数;
- MyBatis:执行结果为被匹配的影响行数。