mybatis-plus<3.4.3> 因transient关键字引起的MybatisPlusExcepection,自动填充update时间失效,sun.reflect.generics.re等问题

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
所以替换版本即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值