官網地址: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);
}
要點!! ++分頁返回的對象與傳入的對象是同一個++