MyBatis Plus—CRUD 接口

Service CRUD 接口

说明:

  • 通用 Service CRUD 封装IService (opens new window)接口,进一步封装 CRUD 采用 get 查询单行 remove 删除 list 查询集合 page 分页 前缀命名方式区分 Mapper 层避免混淆,
  • 泛型 T 为任意实体对象
  • 建议如果存在自定义通用 Service 方法的可能,请创建自己的 IBaseService 继承 Mybatis-Plus 提供的基类
  • 对象 Wrapper 为 条件构造器

#Save

// 插入一条记录(选择字段,策略插入)
boolean save(T entity);
// 插入(批量)
boolean saveBatch(Collection entityList);
// 插入(批量)
boolean saveBatch(Collection entityList, int batchSize);

#参数说明

类型

参数名

描述

T

entity

实体对象

Collection

entityList

实体对象集合

int

batchSize

插入批次数量

#SaveOrUpdate

// TableId 注解存在更新记录,否插入一条记录
boolean saveOrUpdate(T entity);
// 根据updateWrapper尝试更新,否继续执行saveOrUpdate(T)方法
boolean saveOrUpdate(T entity, Wrapper updateWrapper);
// 批量修改插入
boolean saveOrUpdateBatch(Collection entityList);
// 批量修改插入
boolean saveOrUpdateBatch(Collection entityList, int batchSize);

#参数说明

类型

参数名

描述

T

entity

实体对象

Wrapper

updateWrapper

实体对象封装操作类 UpdateWrapper

Collection

entityList

实体对象集合

int

batchSize

插入批次数量

#Remove

// 根据 queryWrapper 设置的条件,删除记录
boolean remove(Wrapper queryWrapper);
// 根据 ID 删除
boolean removeById(Serializable id);
// 根据 columnMap 条件,删除记录
boolean removeByMap(Map columnMap);
// 删除(根据ID 批量删除)
boolean removeByIds(Collection idList);

#参数说明

类型

参数名

描述

Wrapper

queryWrapper

实体包装类 QueryWrapper

Serializable

id

主键 ID

Map

columnMap

表字段 map 对象

Collection

idList

主键 ID 列表

#Update

// 根据 UpdateWrapper 条件,更新记录 需要设置sqlset
boolean update(Wrapper updateWrapper);
// 根据 whereWrapper 条件,更新记录
boolean update(T updateEntity, Wrapper whereWrapper);
// 根据 ID 选择修改
boolean updateById(T entity);
// 根据ID 批量更新
boolean updateBatchById(Collection entityList);
// 根据ID 批量更新
boolean updateBatchById(Collection entityList, int batchSize);

#参数说明

类型

参数名

描述

Wrapper

updateWrapper

实体对象封装操作类 UpdateWrapper

T

entity

实体对象

Collection

entityList

实体对象集合

int

batchSize

更新批次数量

#Get

// 根据 ID 查询
T getById(Serializable id);
// 根据 Wrapper,查询一条记录。结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1")
T getOne(Wrapper queryWrapper);
// 根据 Wrapper,查询一条记录
T getOne(Wrapper queryWrapper, boolean throwEx);
// 根据 Wrapper,查询一条记录
Map getMap(Wrapper queryWrapper);
// 根据 Wrapper,查询一条记录
 V getObj(Wrapper queryWrapper, Function mapper);

#参数说明

类型

参数名

描述

Serializable

id

主键 ID

Wrapper

queryWrapper

实体对象封装操作类 QueryWrapper

boolean

throwEx

有多个 result 是否抛出异常

T

entity

实体对象

Function

mapper

转换函数

#List

// 查询所有
List list();
// 查询列表
List list(Wrapper queryWrapper);
// 查询(根据ID 批量查询)
Collection listByIds(Collection idList);
// 查询(根据 columnMap 条件)
Collection listByMap(Map columnMap);
// 查询所有列表
List> listMaps();
// 查询列表
List> listMaps(Wrapper queryWrapper);
// 查询全部记录
List listObjs();
// 查询全部记录
 List listObjs(Function mapper);
// 根据 Wrapper 条件,查询全部记录
List listObjs(Wrapper queryWrapper);
// 根据 Wrapper 条件,查询全部记录
 List listObjs(Wrapper queryWrapper, Function mapper);
 
  

#参数说明

类型

参数名

描述

Wrapper

queryWrapper

实体对象封装操作类 QueryWrapper

Collection

idList

主键 ID 列表

Map

columnMap

表字段 map 对象

Function

mapper

转换函数

#Page

// 无条件分页查询
IPage page(IPage page);
// 条件分页查询
IPage page(IPage page, Wrapper queryWrapper);
// 无条件分页查询
IPage> pageMaps(IPage page);
// 条件分页查询
IPage> pageMaps(IPage page, Wrapper queryWrapper);

#参数说明

类型

参数名

描述

IPage

page

翻页对象

Wrapper

queryWrapper

实体对象封装操作类 QueryWrapper

#Count

// 查询总记录数
int count();
// 根据 Wrapper 条件,查询总记录数
int count(Wrapper queryWrapper);

#参数说明

类型

参数名

描述

Wrapper

queryWrapper

实体对象封装操作类 QueryWrapper

#Chain

#query

// 链式查询 普通
QueryChainWrapper query();
// 链式查询 lambda 式。注意:不支持 Kotlin
LambdaQueryChainWrapper lambdaQuery();

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

#update

// 链式更改 普通
UpdateChainWrapper update();
// 链式更改 lambda 式。注意:不支持 Kotlin
LambdaUpdateChainWrapper lambdaUpdate();

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

#Mapper CRUD 接口

说明:

  • 通用 CRUD 封装BaseMapper (opens new window)接口,为 Mybatis-Plus 启动时自动解析实体表关系映射转换为 Mybatis 内部对象注入容器
  • 泛型 T 为任意实体对象
  • 参数 Serializable 为任意类型主键 Mybatis-Plus 不推荐使用复合主键约定每一张表都有自己的唯一 id 主键
  • 对象 Wrapper 为 条件构造器

#Insert

// 插入一条记录
int insert(T entity);

#参数说明

类型

参数名

描述

T

entity

实体对象

#Delete

// 根据 entity 条件,删除记录
int delete(@Param(Constants.WRAPPER) Wrapper wrapper);
// 删除(根据ID 批量删除)
int deleteBatchIds(@Param(Constants.COLLECTION) Collection idList);
// 根据 ID 删除
int deleteById(Serializable id);
// 根据 columnMap 条件,删除记录
int deleteByMap(@Param(Constants.COLUMN_MAP) Map columnMap);

#参数说明

类型

参数名

描述

Wrapper

wrapper

实体对象封装操作类(可以为 null)

Collection

idList

主键 ID 列表(不能为 null 以及 empty)

Serializable

id

主键 ID

Map

columnMap

表字段 map 对象

#Update

// 根据 whereWrapper 条件,更新记录
int update(@Param(Constants.ENTITY) T updateEntity, @Param(Constants.WRAPPER) Wrapper whereWrapper);
// 根据 ID 修改
int updateById(@Param(Constants.ENTITY) T entity);

使用提示:

在调用updateById方法前,需要在T entity(对应的实体类)中的主键属性上加上@TableId注解。

#参数说明

类型

参数名

描述

T

entity

实体对象 (set 条件值,可为 null)

Wrapper

updateWrapper

实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)

#Select

// 根据 ID 查询
T selectById(Serializable id);
// 根据 entity 条件,查询一条记录
T selectOne(@Param(Constants.WRAPPER) Wrapper queryWrapper);

// 查询(根据ID 批量查询)
List selectBatchIds(@Param(Constants.COLLECTION) Collection idList);
// 根据 entity 条件,查询全部记录
List selectList(@Param(Constants.WRAPPER) Wrapper queryWrapper);
// 查询(根据 columnMap 条件)
List selectByMap(@Param(Constants.COLUMN_MAP) Map columnMap);
// 根据 Wrapper 条件,查询全部记录
List> selectMaps(@Param(Constants.WRAPPER) Wrapper queryWrapper);
// 根据 Wrapper 条件,查询全部记录。注意: 只返回第一个字段的值
List selectObjs(@Param(Constants.WRAPPER) Wrapper queryWrapper);

// 根据 entity 条件,查询全部记录(并翻页)
IPage selectPage(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper);
// 根据 Wrapper 条件,查询全部记录(并翻页)
IPage> selectMapsPage(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper);
// 根据 Wrapper 条件,查询总记录数
Integer selectCount(@Param(Constants.WRAPPER) Wrapper queryWrapper);
 
  

#参数说明

类型

参数名

描述

Serializable

id

主键 ID

Wrapper

queryWrapper

实体对象封装操作类(可以为 null)

Collection

idList

主键 ID 列表(不能为 null 以及 empty)

Map

columnMap

表字段 map 对象

IPage

page

分页查询条件(可以为 RowBounds.DEFAULT)

#mapper 层 选装件

说明:

选装件位于 com.baomidou.mybatisplus.extension.injector.methods 包下 需要配合Sql 注入器使用,案例(opens new window)
使用详细见源码注释(opens new window)

#AlwaysUpdateSomeColumnById(opens new window)

int alwaysUpdateSomeColumnById(T entity);

#insertBatchSomeColumn(opens new window)

int insertBatchSomeColumn(List entityList);

#logicDeleteByIdWithFill(opens new window)

int logicDeleteByIdWithFill(T entity);

#ActiveRecord 模式

说明:

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

#操作步骤:

  • 继承 Model(opens new window)
class User extends Model{
    // fields...
}
  • 调用CRUD方法(演示部分api,仅供参考)
User user = new User();
user.insert();
user.selectAll();
user.updateById();
user.deleteById();
// ...

#SimpleQuery 工具类

说明:

  • 对selectList查询后的结果用Stream流进行了一些封装,使其可以返回一些指定结果,简洁了api的调用
  • 需要项目中已注入对应实体的BaseMapper
  • 使用方式见: 测试用例(opens new window)
  • 对于下方参数peeks,其类型为Consumer...,可一直往后叠加操作例如:List ids = SimpleQuery.list(Wrappers.lambdaQuery(), Entity::getId, System.out::println, user -> userNames.add(user.getName()));

#keyMap

// 查询表内记录,封装返回为Map<属性,实体>
Map keyMap(LambdaQueryWrapper wrapper, SFunction sFunction, Consumer... peeks);
// 查询表内记录,封装返回为Map<属性,实体>,考虑了并行流的情况
Map keyMap(LambdaQueryWrapper wrapper, SFunction sFunction, boolean isParallel, Consumer... peeks);

#参数说明

类型

参数名

描述

E

entity

实体对象

A

attribute

实体属性类型,也是map中key的类型

LambdaQueryWrapper

wrapper

支持lambda的条件构造器

SFunction

sFunction

实体中属性的getter,用于封装后map中作为key的条件

boolean

isParallel

为true时底层使用并行流执行

Consumer...

peeks

可叠加的后续操作

#map

// 查询表内记录,封装返回为Map<属性,属性>
Map map(LambdaQueryWrapper wrapper, SFunction keyFunc, SFunction valueFunc, Consumer... peeks);
// 查询表内记录,封装返回为Map<属性,属性>,考虑了并行流的情况
Map map(LambdaQueryWrapper wrapper, SFunction keyFunc, SFunction valueFunc, boolean isParallel, Consumer... peeks);

#参数说明

类型

参数名

描述

E

entity

实体对象

A

attribute

实体属性类型,也是map中key的类型

P

attribute

实体属性类型,也是map中value的类型

LambdaQueryWrapper

wrapper

支持lambda的条件构造器

SFunction

keyFunc

封装后map中作为key的条件

SFunction

valueFunc

封装后map中作为value的条件

boolean

isParallel

为true时底层使用并行流执行

Consumer...

peeks

可叠加的后续操作

#group

// 查询表内记录,封装返回为Map<属性,List<实体>>
Map> group(LambdaQueryWrapper wrapper, SFunction sFunction, Consumer... peeks);
// 查询表内记录,封装返回为Map<属性,List<实体>>,考虑了并行流的情况
Map> group(LambdaQueryWrapper wrapper, SFunction sFunction, boolean isParallel, Consumer... peeks);
// 查询表内记录,封装返回为Map<属性,分组后对集合进行的下游收集器>
M group(LambdaQueryWrapper wrapper, SFunction sFunction, Collector downstream, Consumer... peeks);
// 查询表内记录,封装返回为Map<属性,分组后对集合进行的下游收集器>,考虑了并行流的情况
M group(LambdaQueryWrapper wrapper, SFunction sFunction, Collector downstream, boolean isParallel, Consumer... peeks);

#参数说明

类型

参数名

描述

T

entity

实体对象

K

attribute

实体属性类型,也是map中key的类型

D

-

下游收集器返回类型,也是map中value的类型

A

-

下游操作中间类型

M

-

最终结束返回的Map

LambdaQueryWrapper

wrapper

支持lambda的条件构造器

SFunction

sFunction

分组依据,封装后map中作为key的条件

Collector

downstream

下游收集器

boolean

isParallel

为true时底层使用并行流执行

Consumer...

peeks

可叠加的后续操作

#list

// 查询表内记录,封装返回为List<属性>
List list(LambdaQueryWrapper wrapper, SFunction sFunction, Consumer... peeks);
// 查询表内记录,封装返回为List<属性>,考虑了并行流的情况
List list(LambdaQueryWrapper wrapper, SFunction sFunction, boolean isParallel, Consumer... peeks);

#参数说明

类型

参数名

描述

E

entity

实体对象

A

attribute

实体属性类型,也是list中元素的类型

LambdaQueryWrapper

wrapper

支持lambda的条件构造器

SFunction

sFunction

封装后list中的元素

boolean

isParallel

为true时底层使用并行流执行

Consumer...

peeks

可叠加的后续操作

#Db类

说明:

  • 使用静态调用的方式,执行CRUD方法,避免Spring环境下Service循环注入、简洁代码,提升效率
  • 需要项目中已注入对应实体的BaseMapper
  • 完整使用方式见: 测试用例(opens new window)
  • 对于参数为Wrapper的,需要在Wrapper中传入Entity或者EntityClass供寻找对应的Mapper
  • 不建议在循环中调用,如果是批量保存,建议将数据构造好后使用 Db.saveBatch(数据) 保存

例如:

// 根据id查询
List list = Db.listByIds(Arrays.asList(1L, 2L), Entity.class);
// 根据条件构造器查询
List list = Db.list(Wrappers.lambdaQuery(Entity.class));
// 批量根据id更新
boolean isSuccess = Db.updateBatchById(list);

你可能感兴趣的:(mybatis,mybatis,java,windows)