1.1 transient 导致mybatis-plus更新代码失败(8/26)

transient

百度百科的解释:

    Java语言的关键字,变量修饰符,如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。换句话来说就是,用transient关键字标记的成员变量不参与序列化过程。

作用:
Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。当一个对象被序列化的时候,transient型变量的值不包括在序列化的表示中,然而非transient型的变量是被包括进去的。

    /**
     * 密码
     */
    private transient String password;

此关键字配合mybatis-plus ==<mybatis-plus.version>3.4.3</mybatis-plus.version>==使用时会把修饰的属性移除出操作,不管是insert还是update都无效产生如下错误:

MybatisPlusExcepection: can not find lambda cache for this property [XX] for entity [xxx]

1.2 mybatis-plus<3.4.3> 配置自动填充,update操作的些许变化(8/26)

配置

    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    
    /**
     * 更新时间
     */
    @TableField(fill = FieldFill.UPDATE)
    private Date updateTime;

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        // 起始版本 3.3.3(推荐)
        this.strictInsertFill(metaObject, "createTime", Date::new, Date.class);

    }

    @Override
    public void updateFill(MetaObject metaObject) {
        // 起始版本 3.3.3(推荐)
        this.strictUpdateFill(metaObject, "updateTime", Date::new, Date.class);
    }
}

baseMapper.update(null,Wrappers.lambdaUpdate()) 这样的写法是没有拦截到的,所以无效

      baseMapper.update(null,new LambdaUpdateWrapper<SysUser>()
                   .eq(SysUser::getId,user.getId())
                    .set(SysUser::getPassword,user.getPassword())
                    .set(SysUser::getUpdateBy,user.getUpdateBy()));
应该改为 
    //将实体对象添加进去不能传null
       baseMapper.update(user,new LambdaUpdateWrapper<SysUser>()
                   .eq(SysUser::getId,user.getId())
                    .set(SysUser::getPassword,user.getPassword())
                    .set(SysUser::getUpdateBy,user.getUpdateBy()));
或者
        Users users = new Users();
        users.setId(userId);
        users.setConcernType(1);
        baseMapper.updateById(users);

1.3 mybatis-plus<3.4.3> 抽离base层报错sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class

public class BaseServiceImpl<M extends BaseMapper<T>, T extends BaseEntity> extends ServiceImpl<M,T> implements BaseService<T> 

BaseServiceImpl继承extends ServiceImpl<M,T> 删掉则不报错,可其他版本没有这个问题!比如3.4.0,3.4.3.1
所以替换版本即可

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐