前言
目前正在出一个Mybatis Plus
系列教程, 篇幅会较多, 喜欢的话,给个关注❤️ ~
之前给大家讲过Mybatis
教程,而MyBatis-Plus
是一个 MyBatis
的增强工具,在MyBatis
的基础上只做增强不做改变,为简化开发、提高效率而生。大家需要注意的是它只是一个工具,大家需要掌握和重点学习的依然是Mybatis
,在熟练掌握基础的情况下使用MyBatis-Plus
会达到事半功倍的效果。
好了, 废话不多说直接开整吧~
Mapper & CRUD
- 通用
CRUD
封装BaseMapper (opens new window)
接口,为Mybatis-Plus
启动时自动解析实体表关系映射转换为Mybatis
内部对象注入容器 - 泛型
T
为任意实体对象 - 参数
Serializable
为任意类型主键Mybatis-Plus
不推荐使用复合主键约定每一张表都有自己的唯一id 主键
- 对象
Wrapper
为 条件构造器
下面一起来看下相关的方法,其实很多方法和上节讲的Service
类似,有的方法名不一样,但是传参是想通的
Insert
// 插入一条记录 int insert(T entity);
- T entity 实体对象
示例:
User user = new User(); user.setName("小明"); user.setAge(18); user.setVersion(1); userMapper.insert(user);
Delete
// 根据 entity 条件,删除记录 int delete(@Param(Constants.WRAPPER) Wrapper<T> wrapper); // 删除(根据ID 批量删除) int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList); // 根据 ID 删除 int deleteById(Serializable id); // 根据 columnMap 条件,删除记录 int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
- Wrapper wrapper 实体对象封装操作类(可以为 null)
- Collection<? extends Serializable> idList 主键 ID 列表(不能为 null 以及 empty)
- Serializable id 主键 ID
- Map<String, Object> columnMap 表字段 map 对象
QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("name","小明-saveOrUpdate1"); userMapper.delete(queryWrapper);
其它方法参考上节的Service
Update
// 根据 whereWrapper 条件,更新记录 int update(@Param(Constants.ENTITY) T updateEntity, @Param(Constants.WRAPPER) Wrapper<T> whereWrapper); // 根据 ID 修改 int updateById(@Param(Constants.ENTITY) T entity);
- T entity 实体对象 (set 条件值,可为 null)
- Wrapper updateWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("name","小明1"); User user1 = new User(); user1.setName("小明1-UPDATE"); userMapper.update(updateWrapper);
Select
// 根据 ID 查询 T selectById(Serializable id); // 根据 entity 条件,查询一条记录 T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); // 查询(根据ID 批量查询) List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList); // 根据 entity 条件,查询全部记录 List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); // 查询(根据 columnMap 条件) List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap); // 根据 Wrapper 条件,查询全部记录 List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); // 根据 Wrapper 条件,查询全部记录。注意: 只返回第一个字段的值 List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); // 根据 entity 条件,查询全部记录(并翻页) IPage<T> selectPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper); // 根据 Wrapper 条件,查询全部记录(并翻页) IPage<Map<String, Object>> selectMapsPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper); // 根据 Wrapper 条件,查询总记录数 Integer selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
- Serializable id 主键 ID
- Wrapper queryWrapper 实体对象封装操作类(可以为 null)
- Collection<? extends Serializable> idList 主键 ID 列表(不能为 null 以及 empty)
- Map<String, Object> columnMap 表字段 map 对象
- IPage page 分页查询条件(可以为 RowBounds.DEFAULT)
就不一一演示了,大家可以自己试一下方法,看看结果
ActiveRecord 模式
该模式实体类只需继承 Model
类即可进行强大的CRUD
操作,需要项目中已注入对应实体的BaseMapper
public class User extends Model<User> implements Serializable { // .... }
使用示例
User user = new User(); user.setName("小明"); user.setAge(18); user.setVersion(1); user.insert(); List<User> list = user.selectAll(); User user1 = new User(); user1.setId(1731552348470849545L); user1.setName("小明hhh"); user1.setAge(18); user1.setVersion(1); user1.updateById(); user1.deleteById(); user1.deleteById(1731552348470849545L);
使用起来非常的方便,大家可以根据自己的项目需求选择合适crud
方法
结束语
下节给大家讲解条件构造器
,这个注意用查询条件构造
本着把自己知道的都告诉大家,如果本文对有所帮助,点赞+关注
鼓励一下呗~