-
版本:
版本不同有可能報錯!!!!
SpringBoot: 2.1.8.RELEASE
mybatis-plus-boot-starter: 3.3.2
-
首先配置MybatisPlus配置類:
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
/**
* MybatisConfig配置類
*
* @author 陳定雄
* @date 2019/10/26 0:31
*/
@Configuration
@ConditionalOnClass(value = {PaginationInterceptor.class})
@MapperScan("mapper包路徑1(使用.分級)")
@MapperScan("mapper路徑2")
public class MybatisPlusConfig {
//設(shè)置分頁的bean=====================================================================================================
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
// 設(shè)置請求的頁面大于最大頁后操作衡怀, true調(diào)回到首頁耘分,false 繼續(xù)請求 默認(rèn)false
// paginationInterceptor.setOverflow(false);
// 設(shè)置最大單頁限制數(shù)量,默認(rèn) 500 條,-1 不受限制
// paginationInterceptor.setLimit(500);
// 開啟 count 的 join 優(yōu)化,只針對部分 left join
paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
return paginationInterceptor;
}
@Configuration
@MapperScan(basePackages = "mapper包路徑2(使用.分級)", sqlSessionTemplateRef = "sqlSessionTemplate")
public class Db1 {
@Bean
@Primary
public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) throws Exception {
//mybatis應(yīng)該使用 SqlSessionFactoryBean
//SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
//mybatis-plus應(yīng)該使用 MybatisSqlSessionFactoryBean 否則無法使用baseMapper
MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
sqlSessionFactory.setDataSource(dataSource);
sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath:mapper包路徑(使用 / 分級)/*.xml"));
//添加分頁功能================================================================================================
sqlSessionFactory.setPlugins(new Interceptor[]{paginationInterceptor()});
return sqlSessionFactory.getObject();
}
@Bean
@Primary
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("sqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
@Bean
@Primary
public DataSourceTransactionManager dataSourceTransactionManager(@Qualifier("dataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
@Configuration
@MapperScan(basePackages = "mapper包路徑1(使用.分級)", sqlSessionTemplateRef = "sqlSessionTemplate2")
public class Db2 {
@Bean
public SqlSessionFactory sqlSessionFactory2(@Qualifier("dataSource2") DataSource dataSource) throws Exception {
//mybatis應(yīng)該使用 SqlSessionFactoryBean
//SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
//mybatis-plus應(yīng)該使用 MybatisSqlSessionFactoryBean 否則無法使用baseMapper
MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
sqlSessionFactory.setDataSource(dataSource);
sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath:mapper包路徑(使用 / 分級)/*.xml"));
//添加分頁功能================================================================================================
sqlSessionFactory.setPlugins(new Interceptor[]{paginationInterceptor()});
return sqlSessionFactory.getObject();
}
@Bean
public SqlSessionTemplate sqlSessionTemplate2(@Qualifier("sqlSessionFactory2") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
@Bean
public DataSourceTransactionManager dataSourceTransactionManager2(@Qualifier("dataSource2") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
}
-
Controller
controller接收前端穿來的頁數(shù),條數(shù),裝入Page<屬性類的名稱>對象,將分頁的Page對象與需要查詢的條件的對象穿入service
@ApiOperation(value = "")
@ResponseBody
@ApiImplicitParams({@ApiImplicitParam(name = "current", value = "分頁的頁數(shù)"),
@ApiImplicitParam(name = "limit", value = "需要查詢的記錄條數(shù)")})
@RequestMapping(value = "/路徑/{current}/{limit}", method = RequestMethod.POST)
public List<屬性類> 方法名(@PathVariable Long current, @PathVariable Long limit, @RequestBody QueryHeader queryHeader) {
Page<屬性類> Page = new Page<>(current, limit);//參數(shù)一是當(dāng)前頁扮宠,參數(shù)二是每頁數(shù)據(jù)的條數(shù)
service層.queryConditionPage(Page,queryHeader);
return Page.getRecords();
}
-
service
service再調(diào)用mapper,mapper會返回一個IPage<屬性對象>對象
@Override
public IPage<屬性類> queryConditionPage(Page<屬性類> Page, QueryHeader queryHeader) {
if(queryHeader==null){
mapper.selectPage(shuxing,queryHeader);
}
IPage<屬性類> Pages = mapper.selectPage(Page, queryHeader);
return Pages;
}
-
mapper
mapper再執(zhí)行sql,數(shù)據(jù)會自動封裝到在controller創(chuàng)建出來的Page對象中,所以在controller直接調(diào)用Page.getRecords()方法就可以獲取到已經(jīng)分頁好的數(shù)據(jù)了
-
mapper接口
IPage<屬性類> selectPage(Page<屬性類> page, @Param("queryHeader")QueryHeader queryHeader);
-
sql
<select id="selectPage" resultType="返回類型">
SQL
</select>