mybatis-plus 分页插件很好用

  1. 导入依赖包
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.3.1.tmp</version>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-extension</artifactId>
            <version>3.4.1</version>
        </dependency>

2.在mapper.xml中编写sql语句

    <select id="getKeyword" parameterType="com.creaditx.adnetworkbackend.model.req.KeywordReq" resultType="com.creaditx.adnetworkbackend.model.res.KeywordRes">

        SELECT bb.account,plan,unit,keyword,display,click,round(cost,2) as cost,if(opp_cnt is null,0,opp_cnt) as businessNum,round(if(opp_cnt is null,0,cost/opp_cnt),2) as businessCost
        FROM
        ( SELECT account,plan,unit,keyword,utm_medium,SUM(display) AS display,SUM(click) AS click ,SUM(cost) AS cost,type,date
        FROM detail_data_media_hour b
        WHERE  cost>0 AND b.date = date_format(curdate(),'%Y-%m-%d')
        <if test="keywordReq.accounts != null and keywordReq.accounts.size() > 0">
            and b.account in
            <foreach collection="keywordReq.accounts" index="index" item="item" open="(" separator="," close=")">
                #{item}
            </foreach>
        </if>
        <if test="keywordReq.channel != null and keywordReq.channel != ''   ">
            <if test="keywordReq.channel == 1 ">
                and b.type = '百度_搜索'
            </if>
            <if test="keywordReq.channel == 2 ">
                and b.type = '头条_信息流'
            </if>
        </if>
        GROUP BY account,plan,unit,keyword,utm_medium) bb
        left join opp_cnt aa on aa.utm_medium = bb.utm_medium and aa.date = bb.date
        order by bb.date

    </select>
    

3.在mapper.java中编写方法

    IPage<KeywordRes> getKeyword(@Param("page") Page<KeywordRes> page, @Param("keywordReq") KeywordReq keywordReq);

4.在实现类impl中实现方法

    private RestfulResult<ResponseEntity> getKeywords(KeywordReq keywordReq,Integer index, Integer pageSize) {
        RestfulResult<ResponseEntity> restfulResult = new RestfulResult<>();
        Page<KeywordRes> page = new Page<>(index, pageSize);
        IPage<KeywordRes> iPage = realTimeBoardDatacollectMapper.getKeyword(page, keywordReq);
        List<KeywordExcel> KeywordExcels = new ArrayList<>();
        if (CollectionUtils.isNotEmpty(iPage.getRecords())) {
            for (KeywordRes keywordRes : iPage.getRecords()) {
                KeywordExcel keywordExcel = new KeywordExcel();
                BeanUtils.copyProperties(keywordRes, keywordExcel);
                KeywordExcels.add(keywordExcel);
            }
        }
        ResponseEntity responseEntity = new ResponseEntity();
        responseEntity.setList(KeywordExcels);
        responseEntity.setTotal(iPage.getTotal());
        restfulResult.setInstall(ResCode.SUCCESS, responseEntity);
        return restfulResult;
    }

分页就这样完成了,很好用吧

<think>好的,我现在需要回答用户关于MyBatis-Plus分页插件如何传参数实现不分页查询的问题。首先,我得回忆一下MyBatis-Plus分页插件的使用方式。 用户想知道传什么参数可以让分页插件返回全部数据,也就是不分页。通常分页需要传入一个Page对象,设置当前页和每页大小。那如果不想分页,可能需要调整这些参数。 可能的情况是,将分页的大小设置为一个很大的数,比如Integer.MAX_VALUE,这样就能一次性获取所有数据。或者有没有其他方式,比如设置分页的某些参数为特定值,让插件自动识别不分页。 另外,可能分页插件本身是否有配置可以关闭分页功能。例如,通过配置pageSizeLimit,把最大页数设置为0或者负数,但不确定是否可行。 需要查阅MyBatis-Plus的官方文档,确认分页插件的配置参数。根据文档,分页插件默认需要传入Page对象,如果不想分页,是否可以不传Page对象,直接使用BaseMapper的selectList方法?但用户可能是在Service层已经封装了分页方法,希望在不修改代码的情况下通过参数控制。 或者,在创建Page对象时,设置size为-1或者其他特定值,是否会被识别为不分页?这可能需要看源码中的处理逻辑。例如,分页插件在接收到size小于等于0时是否自动查询全部数据。 如果用户在使用中希望动态控制是否分页,可能需要在构造Page对象时根据条件设置size的值。例如,当size为0或负数时,执行不分页查询,否则正常分页。 另外,是否有配置项如overflow,当请求页数超过总页数时返回全部数据?不过这可能不是用户想要的场景。 总结可能的解决方案是:传入一个Page对象,并将size设置为一个非常大的数值,如Integer.MAX_VALUE,或者根据分页插件的处理逻辑,设置特定值(如0或-1)来触发不分页。需要验证这些方法的有效性,并参考官方文档或源码确认正确的方式。 最后,给出用户明确的参数设置方法,并提醒可能需要注意的地方,比如性能问题,一次性查询大量数据可能影响数据库性能。</think>在MyBatis-Plus分页插件中,若希望一次性查询全部数据**不分页**,可通过以下两种方式实现: --- ### 方案一:设置分页参数为极大值 构造`Page`对象时,将分页参数设置为极大值: ```java Page<T> page = new Page<>(1, Integer.MAX_VALUE); // 当前页=1, 每页数量=Integer最大值 Page<T> result = mapper.selectPage(page, queryWrapper); List<T> list = result.getRecords(); // 获取全部数据 ``` **原理**: MyBatis-Plus分页插件会生成SQL: ```sql LIMIT 2147483647 -- 相当于查询全部数据 ``` --- ### 方案二:关闭分页模式(推荐) 通过`Page`构造函数的第三个参数直接关闭分页: ```java Page<T> page = new Page<>(1, 10, false); // 关闭count查询及分页 List<T> list = mapper.selectList(page, queryWrapper); // 直接返回全部数据 ``` 此时生成的SQL**不会包含`LIMIT`子句**。 --- ### 📌 注意事项 1. **性能问题**:全表查询可能对数据库造成压力,建议配合索引使用。 2. **官方推荐**:MyBatis-Plus官方推荐使用`selectList()`直接查询全部数据,而非通过分页插件: ```java List<T> list = mapper.selectList(queryWrapper); // 无需构造Page对象 ``` 3. **参数验证**:若设置`size <= 0`,分页插件会默认按`Integer.MAX_VALUE`处理。 --- ### 总结 | 场景 | 推荐方法 | SQL表现 | |--------------------|-------------------------------|------------------| | 必须通过分页插件 | `new Page(1, Integer.MAX_VALUE)` | 带LIMIT | | 完全禁用分页 | `new Page(1, 10, false)` | 不带LIMIT | | 直接查询全部数据 | `baseMapper.selectList(wrapper)`| 不带LIMIT | 建议根据实际场景选择最合适的方式。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

辞暮尔尔-烟火年年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值