序号 | 类型 | 地址 |
1 | MySQL | MySQL操作之概念、SQL约束(一) |
2 | MySQL | MySQL操作之数据定义语言(DDL)(二) |
3 | MySQL | MySQL操作之数据操作语言(DML)(三) |
4 | MySQL | MySQL操作之数据查询语言:(DQL)(四-1)(单表操作) |
5 | MySQL | MySQL操作之数据查询语言:(DQL)(四-2)(多表查询) |
6 | MySQL | MySQL操作之数据控制语言:(DC)(五) |
7 | MySQL | MySQL操作之数据库函数 |
8 | MySQL | MySQL管理之数据类型 |
9 | MySQL | MySQL管理之索引 |
10 | MySQL | MySQL管理之事务管理 |
11 | MySQL | MySQL管理之存储过程 |
12 | MySQL | MySQL管理之视图 |
13 | MySQL | MySQL管理之数据备份与还原 |
14 | MySQL | Linux(centos 7.5)服务器安装MySQL |
15 | MyBatis | MyBatis从入门到多表关联 |
16 | MyBatis | MyBatis常用方法 |
17 | MyBatis | Mybatis逆向工程的使用(附文件地址) |
18 | MyBatis | spring boot连接Mybatis数据库的配置文件(MySql、SQLserver、Oracle) |
19 | MyBatis-Plus | Mybatis-Plus使用案例(包括初始化以及常用插件) |
20 | MyBatis-Plus | Mybatis-Plus(Service CRUD 接口) |
21 | MyBatis-Plus | Mybatis-plus 4种条件构造器方式 |
22 | MyBatis-Plus | Mybatis-Plus 执行自定义SQL |
23 | MyBatis-Plus | MyBatis-plus配置自定义SQL(执行用户传入SQL) |
24 | MyBatis-Plus | Mybatis-Plus(连接Hive) |
25 | MyBatis-Plus | Mybatis-Plus 代码生成器 |
1、简介
说明:
- 通用 Service CRUD 封装IService接口,进一步封装 CRUD 采用
get 查询单行
remove 删除
list 查询集合
page 分页
前缀命名方式区分Mapper
层避免混淆, - 泛型
T
为任意实体对象 - 建议如果存在自定义通用 Service 方法的可能,请创建自己的
IBaseService
继承Mybatis-Plus
提供的基类 - 对象
Wrapper
为 条件构造器
https://baomidou.com/pages/49cc81/#service-crud-%E6%8E%A5%E5%8F%A3
2、 Save
// 插入一条记录(选择字段,策略插入) boolean save(T entity); // 插入(批量) boolean saveBatch(Collection<T> entityList); // 插入(批量) boolean saveBatch(Collection<T> entityList, int batchSize);
参数说明
类型 | 参数名 | 描述 |
T | entity | 实体对象 |
Collection | entityList | 实体对象集合 |
int | batchSize | 插入批次数量 |
案例:
MyUser user01 = MyUser.builder().name("张三").age(12).address("北京").build(); MyUser user02 = MyUser.builder().name("李四").age(26).address("上海").build(); ArrayList<MyUser> myUsers = new ArrayList<>(); myUsers.add(user01); myUsers.add(user02); // 插入一条记录(选择字段,策略插入) boolean save = myUserService.save(user01); // 插入(批量) boolean b = myUserService.saveBatch(myUsers); // 插入(批量)(batchSize)插入批次数量 boolean c = myUserService.saveBatch(myUsers, 1);
3、 SaveOrUpdate
// TableId 注解存在更新记录,否插入一条记录 boolean saveOrUpdate(T entity); // 根据updateWrapper尝试更新,否继续执行saveOrUpdate(T)方法 boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper); // 批量修改插入 boolean saveOrUpdateBatch(Collection<T> entityList); // 批量修改插入 boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize);
参数说明
类型 | 参数名 | 描述 |
T | entity | 实体对象 |
Wrapper | updateWrapper | 实体对象封装操作类 UpdateWrapper |
Collection | entityList | 实体对象集合 |
int | batchSize | 插入批次数量 |
案例:
MyUser user01 = MyUser.builder().name("张三").age(12).address("北京").build(); MyUser user02 = MyUser.builder().name("李四").age(26).address("上海").build(); ArrayList<MyUser> myUsers = new ArrayList<>(); myUsers.add(user01); myUsers.add(user02); // TableId 注解存在更新记录,否插入一条记录 boolean a = myUserService.saveOrUpdate(user01); boolean b = myUserService.saveOrUpdateBatch(myUsers); boolean c = myUserService.saveOrUpdateBatch(myUsers, 1);
4、 Remove
// 根据 entity 条件,删除记录 boolean remove(Wrapper<T> queryWrapper); // 根据 ID 删除 boolean removeById(Serializable id); // 根据 columnMap 条件,删除记录 boolean removeByMap(Map<String, Object> columnMap); // 删除(根据ID 批量删除) boolean removeByIds(Collection<? extends Serializable> idList);
参数说明
类型 | 参数名 | 描述 |
Wrapper | queryWrapper | 实体包装类 QueryWrapper |
Serializable | id | 主键 ID |
Map<String, Object> | columnMap | 表字段 map 对象 |
Collection<? extends Serializable> | idList | 主键 ID 列表 |
案例:
MyUser user01 = MyUser.builder().name("张三").age(12).address("北京").build(); MyUser user02 = MyUser.builder().name("李四").age(26).address("上海").build(); ArrayList<MyUser> myUsers = new ArrayList<>(); myUsers.add(user01); myUsers.add(user02); LambdaQueryWrapper<MyUser> eq = new QueryWrapper<MyUser>().lambda().eq(MyUser::getAge, 1); boolean remove = myUserService.remove(eq); boolean b = myUserService.removeById(1); HashMap<String, Object> removeMap = new HashMap<>(); removeMap.put("age", 1); boolean b1 = myUserService.removeByMap(removeMap); ArrayList<Integer> ids = new ArrayList<>(); ids.add(1); ids.add(2); boolean b2 = myUserService.removeByIds(ids);
5、 Update
// 根据 UpdateWrapper 条件,更新记录 需要设置sqlset boolean update(Wrapper<T> updateWrapper); // 根据 whereWrapper 条件,更新记录 boolean update(T updateEntity, Wrapper<T> whereWrapper); // 根据 ID 选择修改 boolean updateById(T entity); // 根据ID 批量更新 boolean updateBatchById(Collection<T> entityList); // 根据ID 批量更新 boolean updateBatchById(Collection<T> entityList, int batchSize);
参数说明
类型 | 参数名 | 描述 |
Wrapper | updateWrapper | 实体对象封装操作类 UpdateWrapper |
T | entity | 实体对象 |
Collection | entityList | 实体对象集合 |
int | batchSize | 更新批次数量 |
案例:
LambdaUpdateWrapper<MyUser> eq = new UpdateWrapper<MyUser>().lambda().eq(MyUser::getAge, 1); MyUser myUser = MyUser.builder().id(18L).name("李四").age(12).build(); // 根据 UpdateWrapper 条件,更新记录 需要设置sqlset boolean update = myUserService.update(eq); boolean update1 = myUserService.update(myUser, eq); MyUser myUser01 = MyUser.builder().id(18L).name("李四").age(12).build(); MyUser myUser02 = MyUser.builder().id(18L).name("李四").age(12).build(); ArrayList<MyUser> myUsers = new ArrayList<>(); myUsers.add(myUser01); myUsers.add(myUser02); // 根据 ID 选择修改 boolean b = myUserService.updateById(myUser01); // 根据ID 批量更新 boolean b1 = myUserService.updateBatchById(myUsers); boolean b2 = myUserService.updateBatchById(myUsers,1);
6、 Get
// 根据 ID 查询 T getById(Serializable id); // 根据 Wrapper,查询一条记录。结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1") T getOne(Wrapper<T> queryWrapper); // 根据 Wrapper,查询一条记录 T getOne(Wrapper<T> queryWrapper, boolean throwEx); // 根据 Wrapper,查询一条记录 Map<String, Object> getMap(Wrapper<T> queryWrapper); // 根据 Wrapper,查询一条记录 <V> V getObj(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);
参数说明
类型 | 参数名 | 描述 |
Serializable | id | 主键 ID |
Wrapper | queryWrapper | 实体对象封装操作类 QueryWrapper |
boolean | throwEx | 有多个 result 是否抛出异常 |
T | entity | 实体对象 |
Function<? super Object, V> | mapper | 转换函数 |
案例:
MyUser byId = myUserService.getById(1); LambdaQueryWrapper<MyUser> eq = new QueryWrapper<MyUser>().lambda().eq(MyUser::getAge, 1); MyUser one = myUserService.getOne(eq); MyUser one1 = myUserService.getOne(eq, false); Map<String, Object> map = myUserService.getMap(eq); String obj1 = myUserService.getObj(eq, Object::toString);
7、 List
// 查询所有 List<T> list(); // 查询列表 List<T> list(Wrapper<T> queryWrapper); // 查询(根据ID 批量查询) Collection<T> listByIds(Collection<? extends Serializable> idList); // 查询(根据 columnMap 条件) Collection<T> listByMap(Map<String, Object> columnMap); // 查询所有列表 List<Map<String, Object>> listMaps(); // 查询列表 List<Map<String, Object>> listMaps(Wrapper<T> queryWrapper); // 查询全部记录 List<Object> listObjs(); // 查询全部记录 <V> List<V> listObjs(Function<? super Object, V> mapper); // 根据 Wrapper 条件,查询全部记录 List<Object> listObjs(Wrapper<T> queryWrapper); // 根据 Wrapper 条件,查询全部记录 <V> List<V> listObjs(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);
参数说明
类型 | 参数名 | 描述 |
Wrapper | queryWrapper | 实体对象封装操作类 QueryWrapper |
Collection<? extends Serializable> | idList | 主键 ID 列表 |
Map<String, Object> | columnMap | 表字段 map 对象 |
Function<? super Object, V> | mapper | 转换函数 |
案例:
LambdaQueryWrapper<MyUser> eq = new QueryWrapper<MyUser>().lambda().eq(MyUser::getAge, 1); ArrayList<Integer> ids = new ArrayList<>(); ids.add(1); List<MyUser> list = myUserService.list(); List<MyUser> list1 = myUserService.list(eq); Collection<MyUser> myUsers = myUserService.listByIds(ids); HashMap<String, Object> eqMap = new HashMap<>(); eqMap.put("age", 1); Collection<MyUser> myUsers1 = myUserService.listByMap(eqMap); List<Map<String, Object>> maps = myUserService.listMaps(); List<Map<String, Object>> maps1 = myUserService.listMaps(eq); List<Object> objects = myUserService.listObjs(); List<Object> objects1 = myUserService.listObjs(eq); List<String> strings1 = myUserService.listObjs(Objects::toString); List<String> strings = myUserService.listObjs(eq, Object::toString);
8、 Page
// 无条件分页查询 IPage<T> page(IPage<T> page); // 条件分页查询 IPage<T> page(IPage<T> page, Wrapper<T> queryWrapper); // 无条件分页查询 IPage<Map<String, Object>> pageMaps(IPage<T> page); // 条件分页查询 IPage<Map<String, Object>> pageMaps(IPage<T> page, Wrapper<T> queryWrapper);
参数说明
类型 | 参数名 | 描述 |
IPage | page | 翻页对象 |
Wrapper | queryWrapper | 实体对象封装操作类 QueryWrapper |
案例:
Page<MyUser> page = new Page<>(1, 2); LambdaQueryWrapper<MyUser> eq = new QueryWrapper<MyUser>().lambda().eq(MyUser::getAge, 1); // 无条件分页查询 IPage<MyUser> userIPagepage = myUserService.page(page); // 条件分页查询 IPage<MyUser> page1 = myUserService.page(page, eq); // 无条件分页查询 IPage<Map<String, Object>> mapIPage = myUserService.pageMaps(page); // 条件分页查询 IPage<Map<String, Object>> mapIPage1 = myUserService.pageMaps(page, eq);
9、 Count
// 查询总记录数 int count(); // 根据 Wrapper 条件,查询总记录数 int count(Wrapper<T> queryWrapper);
参数说明
类型 | 参数名 | 描述 |
Wrapper | queryWrapper | 实体对象封装操作类 QueryWrapper |
案例:
int count = myUserService.count(); LambdaQueryWrapper<MyUser> eq = new LambdaQueryWrapper<MyUser>().eq(MyUser::getAge, 1); int count1 = myUserService.count(eq);
10、 Chain
10.1 查询
// 链式查询 普通 QueryChainWrapper<T> query(); // 链式查询 lambda 式。注意:不支持 Kotlin LambdaQueryChainWrapper<T> lambdaQuery(); // 示例: query().eq("column", value).one(); lambdaQuery().eq(Entity::getId, value).list();
案例(在server中):
MyUser age = query().eq("age", 1).one(); List<MyUser> list = lambdaQuery().eq(MyUser::getAge, 1).list();
10.2 更新
// 链式更改 普通 UpdateChainWrapper<T> update(); // 链式更改 lambda 式。注意:不支持 Kotlin LambdaUpdateChainWrapper<T> lambdaUpdate(); // 示例: update().eq("column", value).remove(); lambdaUpdate().eq(Entity::getId, value).update(entity);
案例:
update().eq("age", 1).remove(); MyUser myUser = new MyUser(); boolean update2 = lambdaUpdate().eq(MyUser::getAge, 12).update(myUser);