Spring Boot学习随笔- 集成MyBatis-Plus(三)自定义SQL、分页实现(Pagina ...

打印 上一主题 下一主题

主题 900|帖子 900|积分 2700

学习视频:【编程不良人】Mybatis-Plus整合SpringBoot实战教程,提高的你开发效率,后端人员必备!
自定义SQL

自定义mapper文件是为了应对一些更复杂的查询场景,首先先配置映射路径
  1. mybatis-plus:
  2.   mapper-locations: com/mp/dao/xml/*
复制代码
由于这里的mapper文件放在java文件夹中,所以要在pom.xml里进行配置
  1. <build>
  2.   <resources>
  3.       <resource>
  4.          
  5.           <directory>src/main/java</directory>
  6.           <includes>
  7.               <include>**/*.xml</include>
  8.           </includes>
  9.       </resource>
  10.       
  11.       <resource>
  12.           <directory>src/main/java</directory>
  13.       </resource>
  14.   </resources>
  15. </build>
复制代码

  • mapper
    1. public interface UserMapper extends BaseMapper<User> {
    2.     List<User> selectAll(@Param(Constants.WRAPPER) Wrapper<User> wrapper);
    3. }
    复制代码
    1. <?xml version="1.0" encoding="UTF-8" ?>
    2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
    3. <mapper namespace="com.mp.dao.UserMapper">
    4.     <select id="selectAll" resultType="com.mp.entity.User">
    5.         select * FROM `mp_user` ${ew.customSqlSegment}
    6.     </select>
    7. </mapper>
    复制代码
  • 测试
    1. @Test
    2.     public void selectMy() {
    3.         LambdaQueryWrapper<User> lambda= Wrappers.<User>lambdaQuery();
    4.         lambda.likeRight(User::getName,"刘")
    5.                 .and(lqw->lqw.lt(User::getAge,30)
    6.                         .or().isNotNull(User::getEmail));
    7.         List<User> userList = userMapper.selectAll(lambda);
    8.         userList.forEach(System.out::println);
    9.     }
    复制代码
分页

在MyBatis Plus中,物理分页内存分页是两种不同的分页方式。
物理分页【推荐】是在数据库层面进行分页操作,通过SQL语句的LIMITOFFSET关键字来实现。这种分页方式直接在数据库中进行数据的截取和返回,因此适用于大数据量的分页查询。
内存分页【了解】是在应用程序内存中进行分页操作,即先将所有数据查询出来,然后在内存中进行分页处理。这种分页方式适用于数据量较小的情况,因为需要将所有数据加载到内存中,可能会导致内存占用过高。

  • 配置插件
    1. @Configuration
    2. public class MybatisPlusConfig {
    3.     @Bean
    4.     public PaginationInterceptor paginationInterceptor() {
    5.         return new PaginationInterceptor();
    6.     }
    7. }
    复制代码
  • 分页实现
    1. @Test
    2. public void selectPage() {
    3.     QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    4.     queryWrapper.ge("age", 30);
    5.     Page<User> page = new Page<User>(1, 2,false);// fasle指的是不查询总记录数,提高性能
    6. //        IPage<User> iPage = userMapper.selectPage(page, queryWrapper);
    7. //        List<User> userList = iPage.getRecords();
    8.                 // selectMapsPage
    9.     IPage<Map<String, Object>> iPage = userMapper.selectMapsPage(page, queryWrapper);
    10.     System.out.println("总页数 = " + iPage.getPages());
    11.     System.out.println("总记录数 = " + iPage.getTotal());
    12.     List<Map<String, Object>> userList = iPage.getRecords();
    13.     userList.forEach(System.out::println);
    14. }
    复制代码
  • 自定义分页

    • UserMapper
      1. IPage<User> selectUserPage(Page<User> page, @Param(Constants.WRAPPER) Wrapper<User> wrapper);
      2. }
      复制代码
    • UserMapper.xml
      1. <select id="selectUserPage" resultType="com.mp.entity.User">
      2.     select * from mp_user ${ew.customSqlSegment}
      3. </select>
      复制代码
    • 测试
      1. @Test
      2. public void selectMyPage() {
      3.     QueryWrapper<User> queryWrapper = new QueryWrapper<>();
      4.     queryWrapper.ge("age", 30);
      5.     Page<User> page = new Page<User>(1, 2);
      6.     IPage<User> iPage = userMapper.selectUserPage(page, queryWrapper);
      7.     System.out.println("总页数 = " + iPage.getPages());
      8.     System.out.println("总记录数 = " + iPage.getTotal());
      9.     List<User> userList = iPage.getRecords();
      10.     userList.forEach(System.out::println);
      11. }
      复制代码

Update,更新方法详解
  1. @Test
  2. public void updateById() {
  3.     User user = new User();
  4.     user.setUserId(3L);
  5.     user.setAge(28);
  6.     user.setEmail("xiao@163.com");
  7.     // 传入实体对象作为参数,自动根据id字段定位对应的记录,根据其他set的值进行更新
  8.     int rows = userMapper.updateById(user);
  9.     System.out.println("rows = " + rows);
  10. }
  11. /**
  12. * 条件构造器更新
  13. */
  14. @Test
  15. public void updateByWrapper() {
  16.     UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
  17.     updateWrapper.eq("name", "小刚").eq("age", 18); // where条件
  18.     // set更新条件
  19.     User user = new User();
  20.     user.setAge(28);
  21.     user.setEmail("xiao@163.com");
  22.     // 传入实体对象作为参数,自动根据id字段定位对应的记录,根据其他set的值进行更新
  23.     int rows = userMapper.update(user, updateWrapper);
  24.     System.out.println("rows = " + rows);
  25. }
  26. /**
  27. * 快速更新少量字段
  28. */
  29. @Test
  30. public void updateByWrapper2() {
  31.     UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
  32.     updateWrapper.eq("name", "李刚").eq("age", 29).set("age", 30);
  33.     int rows = userMapper.update(null,updateWrapper);
  34.     System.out.println("rows = " + rows);
  35. }
  36. /**
  37. * lambda表达式
  38. */
  39. @Test
  40. public void updateByWrapper3() {
  41.     LambdaUpdateWrapper<User> lambdaUpdate = Wrappers.lambdaUpdate();
  42.     lambdaUpdate.eq(User::getName, "小刚").eq(User::getAge, 28).set(User::getAge, 31);
  43.     int rows = userMapper.update(null,lambdaUpdate);
  44.     System.out.println("rows = " + rows);
  45. }
  46. /**
  47. * lambda表达式链式调用
  48. */
  49. @Test
  50. public void updateByWrapper4() {
  51.     boolean update = new LambdaUpdateChainWrapper<User>(userMapper)
  52.             .eq(User::getName, "小刚").eq(User::getAge, 31).set(User::getAge,28).update();
  53.     System.out.println("update = " + update);
  54. }
复制代码
Delete 删除
  1. @Test
  2. public void deleteById() {
  3.     int rows = userMapper.deleteById(1739970502337392641L);
  4.     System.out.println("rows = " + rows);
  5. }
  6. @Test
  7. public void deleteByMap() {
  8.     Map<String,Object> map = new HashMap<>();
  9.     map.put("name", "小刚");
  10.     map.put("age", "25");
  11.     // DELETE FROM mp_user WHERE name = ? AND age = ?
  12.     int rows = userMapper.deleteByMap(map);
  13.     System.out.println("rows = " + rows);
  14. }
  15. @Test
  16. public void deleteBatchIds() {
  17.     int rows = userMapper.deleteBatchIds(Arrays.asList(121111123010L, 126372731123L, 127381787813L));
  18.     // 相当于 where id in(?,?,?)
  19.     System.out.println("rows = " + rows);
  20. }
  21. @Test
  22. public void deleteByWrapper() {
  23.     LambdaQueryWrapper<User> lambdaQuery = Wrappers.lambdaQuery();
  24.     lambdaQuery.eq(User::getAge, 28)
  25.             .or().gt(User::getAge, 41);
  26.     int rows = userMapper.delete(lambdaQuery);
  27.     System.out.println("rows = " + rows);
  28. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

愛在花開的季節

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表