参考:MyBatis-Plus 使用详解
官方文档:https://baomidou.com/pages/49cc81/#get
MyBatis-Plus(page和pageMaps分页查询)
MyBatis-Plus 条件构造器

分页查询

1、要定义一个分页拦截器【重点】,不定义的话,无法使用

  1. package com.tj.config;
  2. import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
  3. import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6. @Configuration
  7. public class MPConfig {
  8. @Bean
  9. public MybatisPlusInterceptor mybatisPlusInterceptor(){
  10. //1.定义Mp拦截器
  11. MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
  12. //2.添加具体的拦截器,分页拦截器
  13. interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
  14. return interceptor;
  15. }
  16. }

2、selectPage方法进行分页查询

Page(1,5),第一个参数表示第几页,第二个参数表示共几条数据

  1. @Test
  2. void testGetPage() { //分页查询
  3. IPage page = new Page(3, 5);
  4. usersDao.selectPage(page, null);
  5. long current = page.getCurrent();//当前页
  6. long pages = page.getPages();//总页数
  7. long size = page.getSize();//每页显示几条
  8. long total = page.getTotal();//总条数
  9. List records = page.getRecords();// 分页对象记录列表
  10. }

按条件查询

  1. @Test
  2. void testGetBy() { //按条件查询
  3. QueryWrapper<Users> qw = new QueryWrapper<>();
  4. qw.like("user_name","王");
  5. List<Users> userList = usersDao.selectList(qw);
  6. }
  1. @Test
  2. void testGetBy() { //按条件查询
  3. LambdaQueryWrapper<Users> lqw = new LambdaQueryWrapper<>();
  4. String name = "1";
  5. String name2 = "2";
  6. String name3 = "3";
  7. lqw.like(name3 != null, Users::getUser_name, name3);
  8. lqw.and(e -> {
  9. e.like(name != null, Users::getUser_name, name).or();
  10. e.like(name2 != null, Users::getUser_name, name2);
  11. });
  12. //等于 WHERE (user_name LIKE ? AND (user_name LIKE ? OR user_name LIKE ?))
  13. List<Users> userList = usersDao.selectList(lqw);
  14. }

1、Mapper 接口方法(CRUD)

  1. 【添加数据:(增)】
  2. int insert(T entity); // 插入一条记录
  3. 注:
  4. T 表示任意实体类型
  5. entity 表示实体对象
  6. 【删除数据:(删)】
  7. int deleteById(Serializable id); // 根据主键 ID 删除
  8. int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap); // 根据 map 定义字段的条件删除
  9. int delete(@Param(Constants.WRAPPER) Wrapper<T> wrapper); // 根据实体类定义的 条件删除对象
  10. int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList); // 进行批量删除
  11. 注:
  12. id 表示 主键 ID
  13. columnMap 表示表字段的 map 对象
  14. wrapper 表示实体对象封装操作类,可以为 null
  15. idList 表示 主键 ID 集合(列表、数组),不能为 null empty
  16. 【修改数据:(改)】
  17. int updateById(@Param(Constants.ENTITY) T entity); // 根据 ID 修改实体对象。
  18. int update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper<T> updateWrapper); // 根据 updateWrapper 条件修改实体对象
  19. 注:
  20. update 中的 entity set 条件,可以为 null
  21. updateWrapper 表示实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)
  22. 【查询数据:(查)】
  23. T selectById(Serializable id); // 根据 主键 ID 查询数据
  24. List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList); // 进行批量查询
  25. List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap); // 根据表字段条件查询
  26. T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); // 根据实体类封装对象 查询一条记录
  27. Integer selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); // 查询记录的总条数
  28. List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); // 查询所有记录(返回 entity 集合)
  29. List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); // 查询所有记录(返回 map 集合)
  30. List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper); // 查询所有记录(但只保存第一个字段的值)
  31. <E extends IPage<T>> E selectPage(E page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper); // 查询所有记录(返回 entity 集合),分页
  32. <E extends IPage<Map<String, Object>>> E selectMapsPage(E page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper); // 查询所有记录(返回 map 集合),分页
  33. 注:
  34. queryWrapper 表示实体对象封装操作类(可以为 null
  35. page 表示分页查询条件

2、Service 接口方法(CRUD)

  1. 【添加数据:(增)】
  2. default boolean save(T entity); // 调用 BaseMapper 的 insert 方法,用于添加一条数据。
  3. boolean saveBatch(Collection<T> entityList, int batchSize); // 批量插入数据
  4. 注:
  5. entityList 表示实体对象集合
  6. batchSize 表示一次批量插入的数据量,默认为 1000
  7. 【添加或修改数据:(增或改)】
  8. boolean saveOrUpdate(T entity); // id 若存在,则修改, id 不存在则新增数据
  9. default boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper); // 先根据条件尝试更新,然后再执行 saveOrUpdate 操作
  10. boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize); // 批量插入并修改数据
  11. 【删除数据:(删)】
  12. default boolean removeById(Serializable id); // 调用 BaseMapper 的 deleteById 方法,根据 id 删除数据。
  13. default boolean removeByMap(Map<String, Object> columnMap); // 调用 BaseMapper 的 deleteByMap 方法,根据 map 定义字段的条件删除
  14. default boolean remove(Wrapper<T> queryWrapper); // 调用 BaseMapper 的 delete 方法,根据实体类定义的 条件删除对象。
  15. default boolean removeByIds(Collection<? extends Serializable> idList); // 用 BaseMapper 的 deleteBatchIds 方法, 进行批量删除。
  16. 【修改数据:(改)】
  17. default boolean updateById(T entity); // 调用 BaseMapper 的 updateById 方法,根据 ID 选择修改。
  18. default boolean update(T entity, Wrapper<T> updateWrapper); // 调用 BaseMapper 的 update 方法,根据 updateWrapper 条件修改实体对象。
  19. boolean updateBatchById(Collection<T> entityList, int batchSize); // 批量更新数据
  20. 【查找数据:(查)】
  21. default T getById(Serializable id); // 调用 BaseMapper 的 selectById 方法,根据 主键 ID 返回数据。
  22. default List<T> listByIds(Collection<? extends Serializable> idList); // 调用 BaseMapper 的 selectBatchIds 方法,批量查询数据。
  23. default List<T> listByMap(Map<String, Object> columnMap); // 调用 BaseMapper 的 selectByMap 方法,根据表字段条件查询
  24. default T getOne(Wrapper<T> queryWrapper); // 返回一条记录(实体类保存)。
  25. Map<String, Object> getMap(Wrapper<T> queryWrapper); // 返回一条记录(map 保存)。
  26. default int count(Wrapper<T> queryWrapper); // 根据条件返回 记录数。
  27. default List<T> list(); // 返回所有数据。
  28. default List<T> list(Wrapper<T> queryWrapper); // 调用 BaseMapper 的 selectList 方法,查询所有记录(返回 entity 集合)。
  29. default List<Map<String, Object>> listMaps(Wrapper<T> queryWrapper); // 调用 BaseMapper 的 selectMaps 方法,查询所有记录(返回 map 集合)。
  30. default List<Object> listObjs(); // 返回全部记录,但只返回第一个字段的值。
  31. default <E extends IPage<T>> E page(E page, Wrapper<T> queryWrapper); // 调用 BaseMapper 的 selectPage 方法,分页查询
  32. default <E extends IPage<Map<String, Object>>> E pageMaps(E page, Wrapper<T> queryWrapper); // 调用 BaseMapper 的 selectMapsPage 方法,分页查询
  33. 注:
  34. get 用于返回一条记录。
  35. list 用于返回多条记录。
  36. count 用于返回记录总数。
  37. page 用于分页查询。
  38. 【链式调用:】
  39. default QueryChainWrapper<T> query(); // 普通链式查询
  40. default LambdaQueryChainWrapper<T> lambdaQuery(); // 支持 Lambda 表达式的修改
  41. default UpdateChainWrapper<T> update(); // 普通链式修改
  42. default LambdaUpdateChainWrapper<T> lambdaUpdate(); // 支持 Lambda 表达式的修改
  43. 注:
  44. query 表示查询
  45. update 表示修改
  46. Lambda 表示内部支持 Lambda 写法。
  47. 形如:
  48. query().eq("column", value).one();
  49. lambdaQuery().eq(Entity::getId, value).list();
  50. update().eq("column", value).remove();
  51. lambdaUpdate().eq(Entity::getId, value).update(entity);