likes
comments
collection
share

使用Batis-Plus分页难道不香吗❓

作者站长头像
站长
· 阅读数 18

🍎 题记

爱工作,爱生活,奥利给!!!

人生短短几个秋,不醉不罢休!

使用Batis-Plus分页难道不香吗❓

时间匆匆,转眼间来到了八月份,时间过的真快!!!感叹时间的流逝,也感叹自己半年多来的碌碌无为!

不知道掘友们,你们这多半年过的怎样呢?是飞黄腾达?是一马平川?还是一言难尽?还是 . . . . . .

🍏 主题

最近一直负责项目上小程序后台接口开发的工作,还要负责接口的测试和接口文档编写的工作。说的是8月15号要交工,但是由于好多资料还没准备好,导致服务器、小程序啥的都还没有申请,岂不是很牵强的,确实有点难搞呦!🐞

再者说,工作嘛?就那样,主打一个开心就好。

还是说项目吧,项目核心框架是 SpringBoot+MyBatis-Plus ,也是当下比较主流的。框架这块不做过多的描述,大家应该都是很了解的,网上的教程、资料啥的都很多。

早期的项目用的是 SSM 框架,后面转成了 Springboot+Mybatis ,最后转成了 Springboot+Mybatis-plus 。在使用过程中,添加、修改、删除直接使用了 Mybatis-plus 自带的方法,除非特殊情况。但是在查询列表分页这块还沿用之前Mybatis中的方法,需要写两个方法,一个查询数量的,一个查询列表的,开始写的时候感觉还行,越到后面感觉还是不爽,感觉还是有点麻烦。心想着还是用 Mybatis-plus 中的分页功能吧,肯定会比当下的写法能方便一点,效率还是会提升的。

接下来,我们就开始使用 Springboot 集成 Mybatis-plus 进行实现列表分页功能。

🍊 开搞

💴 数据准备

一如既往的还是使用我们之前一直使用过的 user

/*Table structure for table `user1` */
DROP TABLE IF EXISTS `user1`;
CREATE TABLE `user1` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '用户id',
  `name` varchar(64) DEFAULT NULL COMMENT '用户名称',
  `phone` varchar(64) DEFAULT NULL COMMENT '用户电话',
  `age` int DEFAULT NULL COMMENT '用户年龄',
  `address` varchar(128) DEFAULT NULL COMMENT '用户地址',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 COMMENT='用户表';

/*Data for the table `user1` */
insert  into `user1`(`id`,`name`,`phone`,`age`,`address`) values 
(1,'孙一','13800138002',27,'西安市雁塔区'),
(2,'黄二','13900139002',31,'青岛市市南区'),
(3,'张三','13800138000',30,'北京市海淀区'),
(4,'李四','13900139000',25,'上海市浦东新区'),
(5,'王五','13600136000',35,'广州市天河区'),
(6,'赵六','13700137000',28,'深圳市南山区'),
(7,'陈七','13800138001',22,'杭州市西湖区'),
(8,'周八','13900139001',32,'南京市鼓楼区'),
(9,'吴九','13600136001',40,'成都市武侯区'),
(10,'郑十','13700137001',33,'武汉市江汉区');

💵 配置

📄 pom引入

<!--   mybatis-plus-boot     -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.2</version>
</dependency>

📃 application.yml 配置

spring:
  datasource:
    #   数据源基本配置
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
    druid:
      # 初始连接数
      initialSize: 5
      # 最小连接池数量
      minIdle: 10
      # 最大连接池数量
      maxActive: 20
      # 配置获取连接等待超时的时间
      maxWait: 60000
#mybatis-plus
mybatis-plus:
  # 配置mapper的扫描,找到所有的mapper.xml映射文件
  mapper-locations: classpath*:mapper/*Mapper.xml
  # 搜索指定包别名
  typeAliasesPackage: org.example.pojo
  global-config:
    db-config:
      id-type: auto
  configuration:
    call-setters-on-nulls: true
    map-underscore-to-camel-case: true
    object-wrapper-factory: com.baomidou.mybatisplus.extension.MybatisMapWrapperFactory

📑 MybatisPlusConfig

@Configuration
public class MybatisPlusConfig {

    /**
     * 新的插件配置
     * PaginationInnerInterceptor分页一缓和二缓遵循mybatis的规则 PaginationInnerInterceptor
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 配置分页插件
        PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
        paginationInnerInterceptor.setOverflow(true);
        paginationInnerInterceptor.setMaxLimit(1000L);
        interceptor.addInnerInterceptor(paginationInnerInterceptor);
        return interceptor;
    }
}

💷 编码

Service 与 Mapper 中的代码就不放了,那个也就继承下 BaseService 与 BaseMapper 就行,核心就在ServiceImpl 里面。

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
    @Resource
    private UserMapper userMapper;

   //获取用户分页
    @Override
    public IPage<User> getUserPage() {
        //构建分页模型,拼装参数(第一页,每一页5条数据)
        Page page = new Page<>(1, 5);
        //执行分页查询,返回对应实体类分页
        return userMapper.selectPage(page,new LambdaQueryWrapper<>());
    }

    //获取用户分页Map
    @Override
    public IPage<Map<String, Object>> getUserPageMap() {
        //构建分页模型,拼装参数(第一页,每一页5条数据)
        Page page = new Page<>(1, 5);
        //定义查询LambdaQueryWrapper
        LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        //设置只查询的参数,并设置排序
        lambdaQueryWrapper.select(User::getName,User::getPhone)
                .orderByDesc(User::getId);
        //执行分页查询,返回Map分页
        return userMapper.selectMapsPage(page,lambdaQueryWrapper);
    }
}

📄 执行对应查询的Sql语句

获取用户分页(getUserPage):

使用Batis-Plus分页难道不香吗❓

获取用户分页Map(getUserPageMap): 使用Batis-Plus分页难道不香吗❓

💶 备注

简单说明一下IPage里面的一些常用的参数,其他可以自行了解。

常用字段备注信息
records分页记录列表(列表中所包含的数据信息)
total总条数
size每页显示的条数
current当前页
pages总页数

💳 总结

在调用 selectPage 与 selectMapsPage 时,就会进行数量与列表的查询,这一点就在一定意义上就提升了效率。

也可以自己进一步封装分页返回的数据格式,比如:有些分页插件只需要总条数和记录、有些全都需要、有些只要其中几个,这个根据情况可自行封装处理。

有好多种实现的方式,就看你喜欢哪种就用哪种,让自己快乐才是真的快乐,其他的一切随缘。哈哈😍

🍋 展望

人呢,还是需要忙起来,可以去学习,可以去旅游,可以去考研、考证 . . . . . .

学会思考,学会总结,学会调整。

人活着就是为了让自己快乐起来!!!

使用Batis-Plus分页难道不香吗❓

转载自:https://juejin.cn/post/7398150089557082124
评论
请登录