MyBatis-Plus学习笔记-1

本文最后更新于:2023年5月13日 下午

快速入门

假设我们现在有一个映射数据库中user表的实体类User

1
2
3
4
5
6
7
@Data
public class User {
private Long id;
private String name;
private Integer age;
private String email;
}

要使用MyBatis-Plus进行CRUD操作,就在Mapper文件夹下编写对应的Mapper类:

1
2
3
public interface UserMapper extends BaseMapper<User> {

}

然后在启动类中添加@MapperScan注解,扫描Mapper文件夹即可。

1
2
3
4
5
6
7
8
9
@SpringBootApplication
@MapperScan("com.me.quickstart.mapper")
public class Application {

public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}

}

注解

@TableName

  • 描述:表名注解,标识实体类对应的表
  • 使用位置:实体类
    一般来说只需要知道value属性(即表名)就行了。用法:@TableName(value="sys_user")@TableName("sys_user")

@TableId

  • 描述:主键注解
  • 使用位置:实体类主键字段
    用法:
    1
    2
    @TableId
    private Long id;

TableField

  • 描述:字段注解(非主键)
    用法:
    1
    2
    @TableField("nickname")
    private String name;

CRUD接口

建议转到文档看:CRUD接口

Chain

query

1
2
3
4
5
6
7
8
// 链式查询 普通
QueryChainWrapper<T> query();
// 链式查询 lambda 式。注意:不支持 Kotlin
LambdaQueryChainWrapper<T> lambdaQuery();

// 示例:
query().eq("column", value).one();
lambdaQuery().eq(Entity::getId, value).list();

update

1
2
3
4
5
6
7
8
// 链式更改 普通
UpdateChainWrapper<T> update();
// 链式更改 lambda 式。注意:不支持 Kotlin
LambdaUpdateChainWrapper<T> lambdaUpdate();

// 示例:
update().eq("column", value).remove();
lambdaUpdate().eq(Entity::getId, value).update(entity);

ActiveRecord模式

说明

  • 实体类只需继承Model类即可进行强大的CRUD操作
  • 需要项目中已注入对应实体的BaseMapper

用法:

  • 继承Model
    1
    2
    3
    class User extends Model<User>{
    // fields...
    }
  • 调用CRUD方法
    1
    2
    User user = new User();
    user.insert();

Db类

说明

  • 使用静态调用的方式,执行CRUD方法,避免Service循环注入。
  • 需要项目中已注入对应实体的BaseMapper
  • 对于参数为Wrapper的,需要在Wrapper中传入Entity或者EntityClass供寻找对应的Mapper
  • 不建议在循环中调用,如果是批量保存,建议将数据构造好后使用 Db.saveBatch(数据) 保存

用法参见:测试用例

条件构造器

AbstractWrapper

用于生成sqlwhere条件,entity属性也用于生成sqlwhere条件。同时也是QueryWrapper(LambdaQueryWrapper)UpdateWrapper(LambdaUpdateWrapper)的父类。
方法参照:条件构造器

使用方法

继续使用最开始提到的User实体类,假设id对应数据库中的uid字段。

QueryWrapper

1
2
3
4
5
// 查询条件构造器
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("uid", id);
// 查询操作
List<User> users = userMapper.selectList(wrapper);

引入lambda来避免硬编码

1
2
3
4
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.lambda().eq(User::getId, id);
// 查询操作
List<User> users = userMapper.selectList(wrapper);

LambdaQueryWrapper

上面的简化版本,使用方法:

1
2
3
LambdaQueryWrapper<User> wrapper = new QueryWrapper<User>().lambda();
wrapper.eq(User::getId, id);
List<User> user = userMapper.selectList(wrapper);

简化再简化:

1
2
3
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getId, id);
List<User> user = userMapper.selectList(wrapper);

UpdateWrapper

既然都有查询用的wrapper那肯定也有更新用的wrapper啦,使用方法:

1
2
3
4
UpdateWrapper<User> wrapper = new UpdateWrapper<>();
wrapper.set("user_name", name);
wrapper.eq("uid", id);
userMapper.update(null, wrapper);

LambdaUpdateWrapper

那其实用法和上面的lambda查询差不多

1
2
3
4
LambdaUpdateWrapper<User> wrapper = new LambdaUpdateWrapper<User>()
.eq(User::getId, id)
.set(User::getName, name);
userMapper.udpate(null, wrapper);

这里有一只爱丽丝

希望本文章能够帮到您~


MyBatis-Plus学习笔记-1
https://map1e-g.github.io/2023/05/09/mybatis-plus-1/
作者
MaP1e-G
发布于
2023年5月9日
许可协议