MybatisPlus中分頁插件的使用


官網地址:https://baomidou.com/guide/page.html

引入

在引入mybatisplus依賴后,就不需要引入mybatis依賴了,也可使用其內置的Page分頁插件

spring boot 引入 mybatisplus依賴

官網地址:https://baomidou.com/guide/install.html#release

Maven

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

spring boot 配置mybatisplus

@SpringBootApplication
@MapperScan("com.baomidou.mybatisplus.samples.quickstart.mapper")
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

配置分頁插件

XML方式配置

<!-- spring xml 方式 -->
<property name="plugins">
    <array>
        <bean class="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor">
            <property name="sqlParser" ref="自定義解析類、可以沒有"/>
            <property name="dialectClazz" value="自定義方言類、可以沒有"/>
            <!-- COUNT SQL 解析.可以沒有 -->
            <property name="countSqlParser" ref="countSqlParser"/>
        </bean>
    </array>
</property>

<bean id="countSqlParser" class="com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize">
    <!-- 設置為 true 可以優化部分 left join 的sql -->
    <property name="optimizeJoin" value="true"/>
</bean>

spring bean 方式配置

@Configuration
@MapperScan("com.baomidou.cloud.service.*.mapper*")
public class MybatisPlusConfig {

    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // 設置請求的頁面大於最大頁后操作, true調回到首頁,false 繼續請求  默認false
        // paginationInterceptor.setOverflow(false);
        // 設置最大單頁限制數量,默認 500 條,-1 不受限制
        // paginationInterceptor.setLimit(500);
        // 開啟 count 的 join 優化,只針對部分 left join
        paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
        return paginationInterceptor;
    }
}

編寫sql代碼

按照個人習慣,簡單的CRUD操作直接使用mybatisplus提供的接口使用,涉及到復雜的多表聯查及分頁查詢則自己手寫sql語句

官網示例

UserMapper.java

public interface UserMapper {//可以繼承或者不繼承BaseMapper
    /**
     * <p>
     * 查詢 : 根據state狀態查詢用戶列表,分頁顯示
     * </p>
     *
     * @param page 分頁對象,xml中可以從里面進行取值,傳遞參數 Page 即自動分頁,必須放在第一位(你可以繼承Page實現自己的分頁對象)
     * @param state 狀態
     * @return 分頁對象
     */
    IPage<User> selectPageVo(Page<?> page, Integer state);
}

UserMapper.xml

<select id="selectPageVo" resultType="com.baomidou.cloud.entity.UserVo">
    SELECT id,name FROM user WHERE state=#{state}
</select>

UserServiceImpl.java

public IPage<User> selectUserPage(Page<User> page, Integer state) {
    // 不進行 count sql 優化,解決 MP 無法自動優化 SQL 問題,這時候你需要自己查詢 count 部分
    // page.setOptimizeCountSql(false);
    // 當 total 為小於 0 或者設置 setSearchCount(false) 分頁插件不會進行 count 查詢
    // 要點!! 分頁返回的對象與傳入的對象是同一個
    return userMapper.selectPageVo(page, state);
}

要點!! ++分頁返回的對象與傳入的對象是同一個++


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM