Mybaits-plus采坑之UpdateWrapper 更新字段重复
Mybaits-plus简介
MyBatis-Plus 是基于 MyBatis 的增强工具库,旨在简化 MyBatis 的开发。它提供了一系列的功能和特性,可以提高开发效率,减少重复的编码工作,并且与原生的 MyBatis 兼容。
下面是 MyBatis-Plus 的一些主要特点和功能:
-
简化 CRUD 操作:MyBatis-Plus 提供了通用的 CRUD 接口和方法,通过继承和配置,可以快速进行数据库的增删改查操作,减少了编写重复的 SQL 语句的工作。
-
条件构造器:MyBatis-Plus 的条件构造器(Wrapper)提供了一种灵活的查询条件构建方式,可以通过链式调用的方式组装查询条件,支持动态条件的拼接,减少了手动拼接 SQL 的繁琐工作。
-
分页查询:MyBatis-Plus 提供了方便的分页查询支持,可以轻松实现分页查询功能,支持多种数据库的分页方式。
-
代码生成器:MyBatis-Plus 提供了代码生成器工具,可以根据数据库表结构自动生成实体类、Mapper 接口和 XML 映射文件,减少了手动编写这些代码的工作量。
-
乐观锁支持:MyBatis-Plus 内置了乐观锁的支持,可以通过注解和版本号字段实现乐观锁的机制,方便处理并发更新的场景。
-
主键生成策略:MyBatis-Plus 提供了多种主键生成策略,可以根据需求选择适合的主键生成方式,如自增主键、雪花算法、UUID 等。
-
Lambda 表达式支持:MyBatis-Plus 支持使用 Lambda 表达式进行条件构造,可以通过 Lambda 表达式更直观地构建查询条件,提高代码可读性。
总体来说,MyBatis-Plus 提供了丰富的功能和工具,可以简化开发者对数据库的操作,提高开发效率。它与原生的 MyBatis 框架兼容,并且易于集成到现有的项目中。无论是小型项目还是大型项目,MyBatis-Plus 都是一个强大而受欢迎的数据库访问工具库。
问题描述
baseMapper.update(group, new LambdaUpdateWrapper<Group>()
.eq(Group::getId, newGroup.getId())
.set(Group::getPid, newGroup.getNewGroupPid()));
Preparing: UPDATE group SET name=?, pid=?, level=?, type=?, create_by=?, data=?, create_time=?, update_time=?, pid=? WHERE is_deleted=0 AND (id = ?)
UpdateWrapper
或者 LambdaUpdateWrapper
更新实体的指定字段时,Mybatisplus插件 update()
生成的sql字段重复,而我们需要的实际情况应该是更新为UpdateWrapper set
字段加上自动填充字段、乐观锁字段,但是实际情况字段pid重复出现了,Mysql数据库不报错,换用其他数据库报错更新字段重复。
解决方案
重新 new 一个新的对象,通过spring的 BeanUtils.copyProperties()
方法拷贝一份,修改内容后使用 update()
方法进行更新,切勿使用 set()
进行指定字段更新。
gitee上issue
git问题单:UpdateWrapper 更新字段重复
标签:采坑,重复,数据库,更新,Mybaits,Plus,UpdateWrapper,MyBatis,plus From: https://blog.51cto.com/u_15399050/7437905