User user=userService.lambdaQuery().eq(User::getUserId,userId).one();
if(user!=null){
userService.update(user,new UpdateWrapper<User>().lambda()
.set(User::getUserName,null)
.eq(User::getUserId,user.getUserId()));
这种方法不会影响其它方法,不需要修改全局配置,也不需要在字段上单独加注解,只需要在使用的时候设置一下要修改的字段为null就可以更新成功,推荐使用方法4。
1. Mybatis Plus 的 FieldStrategy 有三种策略2. 配置3. 使用 update() 方法
1. Mybatis Plus 的 FieldStrategy 有三种策略
IGNORED:忽略。当策略为 IGNORED 时,表示忽略该字段的空值判断,即无论实体对象的值为空还是非空,都会进行新增、更新操作。
NOT_NULL:非 NULL。当策略为 NOT_NULL 时,表示字段不能为空,如果实体对象的值为空,则不会进行新增、更新操作。
NOT_EMPTY:非空。当策略为 NOT_
使用Mybatis-plus的updateById()方法来更新一条记录时:只会更新不为null的字段,为null的字段会不变。在真实的线上环境是这样的。
所以要是该方法,建议:new一个新的实体,将id赋值,然后把需要更新的字段set下。
开发项目中,使用MyBatis-Plus 的updateById() 方法将查询结果中原本不为null的字段更新为null,该字段设置可为null。发现更新失败。
问题原因
mybatis-plus FieldStrategy 有三种策略:
IGNORED:0 忽略
NOT_NULL:1 非 NULL,默认策略
NOT_EMPTY:2 非空
而默认更新策略是NOT_NULL:非 NULL;即通过接口更新数据时数据为NULL值时将不更新进数据库。
1、写s...
在日常项目开发过程中,经常会使用Mybatis-plus的updateById()方法,快速将接收道德参数或者查询结果中原本不为null的字段更新为null,并且该字段在数据库中可为null,这个时候使用updateById()并不能实现这个操作,不会报错,但是对应的字段并没有更新为null。设置好了之后,在更新时就可以直接使用mybatis-plus中的updateById方法就可以成功将字段更新为null,但是这样做存在一定的弊端,就是当需要这样处理的字段比较多时,要给对应的字段都要添加上这样的注解。
一、updateById 根据主键id更新,传啥改啥!!! 对未修改的无影响
int updateById(@Param(Constants.ENTITY) T entity);
二、update 根据 whereWrapper 条件更新记录,传啥改啥!!! 可用于批量更新
// 根据 whereWrapper 条件,更新记录
int update(@Param(Constants.ENTITY) T updateEntity, @Param(Constants.WRAPPER) Wrapper wh
MyBatis Plus的updateById方法可以用于更新实体对象的数据,如果使用updateById方法时传入的对象的某些属性值为null,那么更新操作会将数据库中对应的字段值更新为null。
一般而言,如果想要更新某个字段的值为null,可以将要更新的字段值设置为null,然后使用updateById方法即可实现更新操作。
例如,假设有一个名为User的实体类,有两个属性:id和name。现在要将某个id为1的用户的name字段更新为null,可以按照以下步骤进行:
1. 实例化一个User对象,设置id为1,设置name为null;
2. 使用updateById方法,将该User对象作为参数传入;
3. MyBatis Plus会根据这个User对象的id字段值,更新数据库中对应的name字段为null。
需要注意的是,如果传入的User对象中有其他字段的值为null,那么该字段的值也会被更新为null。因此,如果不想更新其他字段的值,可以在实例化User对象之后,将其他字段值设置为原来的值再执行更新操作。
总之,MyBatis Plus的updateById方法可以更新实体对象的数据,包括将某些字段的值更新为null。