MyBatis-Plus:问题解决

导读:本篇文章讲解 MyBatis-Plus:问题解决,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

1. Mapper.xml别名爆红,程序运行没问题

在这里插入图片描述

可能由于你装了上述IDEA插件导致的


解决方案
在这里插入图片描述

2. xml重写selectPage模板方法,导致QueryWrapper.lambda后面的查询条件失效

改成Bean对象入参
在这里插入图片描述

在这里插入图片描述


3. Model继承问题 – 多加一个BaseModel(用于标识公共字段)

BaseDB.java

@Getter
@Setter
@ToString
@Accessors(chain = true)
public class BaseDB<T extends BaseDB<?>> extends Model<T> {


    private static final long serialVersionUID = 3253505422347170166L;


    /** 主键 - 记录插入自动填充主键处理{@path application.yml} */
    @TableId
    private String id;

    @TableField(fill = FieldFill.INSERT)
    private String createTime;

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String updateTime;

    /** 记录是否被逻辑删除:0未删除 1逻辑删除 - 逻辑处理值定义{@path application.yml}*/
    @TableField
    @TableLogic
    private Integer isDel;

    /**
     * 乐观锁(记录的被修改数)
     *
     * 很鸡肋,需要通过代码查出记录然后手动取此对象的version给准备update的对象,或者直接在查出记录上进行update
     */
    @TableField
    @Version
    private Integer version;


}



SysUser.java

@Data
@ToString(callSuper=true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@TableName("sys_user")
public class SysUser extends BaseDB<SysUser> implements Serializable {
    private static final long serialVersionUID = 2095940921263481761L;


    /**
     * 用户昵称 - 如果没有设置昵称直接使用账户名显示
     */
    private String nickName;

    /**
     * 头像图片地址
     */
    private String headUrl;

    /**
     * 账户名
     */
    private String loginName;

    /**
     * 手机号
     */
    private String phoneNumber;

    /**
     * 邮箱
     */
    private String email;

    /**
     * 性别
     */
    private Integer gender;

    /**
     * 个性签名
     */
    private String personalMotto;

    //@ApiModelProperty("我的分类专栏,逗号分隔 - article_category表的id")
    //private String myArticleCategory;


    /**
     * 最近登录时间 - 格式 - yyyyMMddHHmmss
     */
    private String lastLoginTime;


    /**
     * 登录状态:0未登录 1单设备登陆  2多设备登陆
     */
    private Integer loginStatus;


    /** 账户禁用状态:0账户可使用  1账户不可使用(封号) */
    private Integer disabledStatus;

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


}


4. Wrapper的优先级高于实体

MyMetaObjectHandler.java

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        this.strictInsertFill(metaObject, "createTime", String.class, DatePattern.NORM_DATETIME_FORMATTER.format(LocalDateTime.now()));
        this.strictInsertFill(metaObject, "updateTime", String.class, DatePattern.NORM_DATETIME_FORMATTER.format(LocalDateTime.now()));
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.strictUpdateFill(metaObject, "updateTime", String.class, DatePattern.NORM_DATETIME_FORMATTER.format(LocalDateTime.now()));
    }
}


test5.java

    /**
     * Active Record模式
     */
    @Test
    public void test5() {
            //把wrapper中的upateTime去掉就会使用实体的,如果实体中也没有设置updatetime则使用MyMetaObjectHandler的设置值
        boolean updateFlag = new        SysUser().setUpdateTime(DatePattern.NORM_DATETIME_FORMAT.format(DateUtil.endOfMonth(new Date())))
                .update(Wrappers.<SysUser>lambdaUpdate()
                        .set(SysUser::getEmail, "2329073340@qq.com")
                        //到时数据库使用的是这里
                        .set(SysUser::getUpdateTime, DatePattern.NORM_DATETIME_FORMAT.format(DateUtil.beginOfMonth(new Date())))
                        .eq(SysUser::getId, "6d72c93aa292cf2ca2e789919a5e7bdc"));
        Console.log("更新状态:{}", updateFlag);
    }


5. @Version – 仅以实体生效

//实体传过去version的字段值,然后mybatisplus就会生成更新sql
update 表 set version = version + 1 where version = version实体字段值


//wrapper必须设置 eq、set 对应的version字段值,否则不生效
否则只会生成一个where或者set版本值

//如果同时设置实体version 以及 wraper的get、set
会有两个set version版本值 以及两个 where 版本值


6. 构建条件

如果实体以及wrapper都设置了对应的字段值,则会同时两个都会生成,而不会去重优先选一个

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/46398.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!