本文最后更新于: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();
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();
LambdaUpdateChainWrapper<T> lambdaUpdate();
update().eq("column", value).remove(); lambdaUpdate().eq(Entity::getId, value).update(entity);
|
ActiveRecord模式
说明:
- 实体类只需继承Model类即可进行强大的CRUD操作
- 需要项目中已注入对应实体的BaseMapper
用法:
1 2 3
| class User extends Model<User>{ }
|
1 2
| User user = new User(); user.insert();
|
Db类
说明:
- 使用静态调用的方式,执行CRUD方法,避免
Service
循环注入。 - 需要项目中已注入对应实体的BaseMapper
- 对于参数为Wrapper的,需要在Wrapper中传入Entity或者EntityClass供寻找对应的Mapper
- 不建议在循环中调用,如果是批量保存,建议将数据构造好后使用 Db.saveBatch(数据) 保存
用法参见:测试用例
条件构造器
AbstractWrapper
用于生成sql
的where
条件,entity
属性也用于生成sql
的where
条件。同时也是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);
|

希望本文章能够帮到您~