MyBatis Plus的使用经验

2022年 10月 12日 63点热度 0人点赞 0条评论

MyBatisPlus 官方文档

https://baomidou.com/pages/10c804/#querywrapper

对象属性字段和表中字段不一致

/**
 * 注意: 此处如果不加 @TableField 注解, mybatisPlus 会默认将 createTime 映射成 create_time 字段
 * 由于数据库字段为 createTime, 所以需要指定
 */
@TableField("createTime")

插入或更新的字段有 空字符串 或者 null

FieldStrategy 有三种策略:

  • IGNORED: 忽略
  • NOT_NULL: 非 NULL, 默认策略
  • NOT_EMPTY: 非空

当用户有更新字段为 空字符串 或者 null 的需求时, 需要对 FieldStrategy 策略进行调整:

方式一: 调整全局的验证策略

注入配置 GlobalConfiguration 属性 fieldStrategy

方式二: 调整字段验证注解

根据具体情况, 在需要更新的字段中调整验证注解, 如验证非空:

@TableField(strategy=FieldStrategy.NOT_EMPTY)

方式三: 使用 UpdateWrapper (3.x)

使用以下方法来进行更新或插入操作:

//updateAllColumnById(entity) // 全部字段更新: 3.0 已经移除
mapper.update(
   new User().setName("mp").setAge(3),
   Wrappers.<User>lambdaUpdate()
           .set(User::getEmail, null) //把 email 设置成 null
           .eq(User::getId, 2)
);
//也可以参考下面这种写法
mapper.update(
    null,
    Wrappers.<User>lambdaUpdate()
       .set(User::getAge, 3)
       .set(User::getName, "mp")
       .set(User::getEmail, null) //把 email 设置成 null
       .eq(User::getId, 2)
);

联表查询

单靠 mybatis-plus 提供的 crud 方式是不能实现联表的复杂查询的, 这也是 plus 相对与 mybatis 唯一的短板.

解决办法: 还是需要引入 xml 写 SQL 语句的方式结合 plus 实现

条件判断

你经常会写这样的代码:

if (StringUtils.isNotBlank(name)) {
    query.like(Entity::getName, name)
}
if (age != null && age >= 0) {
    query.eq(Entity::getAge, age)
}

就是如果没有传 name 参数, 其实是没有必要添加这个条件的. 满足一定条件才会把查询条件加上去. 写的多了, 就很麻烦, 而用 MyBatis-Plus 的构造器, 你就可以这么写:

query.like(StringUtils.isNotBlank(name), Entity::getName, name)
     .eq(age!=null && age >= 0, Entity::getAge, age)

QueryWrapper 的用法

LambdaQueryWrapper<UserEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(UserEntity::getUsername, userLoginForm.getUsername());
UserEntity userEntity;
try {
    userEntity = getOne(wrapper, true);
} catch (TooManyResultsException tooManyResultsException) {
    throw new RuntimeException(" 用户信息错误");
}catch (Exception e) {
    log.error(" 用户信息错误, username = {}", userLoginForm.getUsername(), e);
    throw new RuntimeException(" 用户信息错误");
}
if (userEntity == null) {
    return Result.error(" 用户不存在或者密码错误");
}

QueryWrapper 其实可以理解成一个放查询条件的盒子, 我们把查询条件放在里面, 他就会自动按照对应的条件进行查询数据.

本文来自:https://blog.duhbb.com

本文链接地址:MyBatis Plus的使用经验,英雄不问来路,转载请注明出处,谢谢。

有话想说:那就赶紧去给我留言吧。

rainbow

这个人很懒,什么都没留下

文章评论