myabtisPlus雙數(shù)據(jù)源使用分頁插件 2020-12-06

  • 版本:

版本不同有可能報錯!!!!

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>


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末秃嗜,一起剝皮案震驚了整個濱河市尺棋,隨后出現(xiàn)的幾起案子琳状,更是在濱河造成了極大的恐慌,老刑警劉巖硝桩,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異枚荣,居然都是意外死亡碗脊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進(jìn)店門橄妆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來衙伶,“玉大人,你說我怎么就攤上這事害碾∈妇ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵慌随,是天一觀的道長芬沉。 經(jīng)常有香客問我,道長阁猜,這世上最難降的妖魔是什么丸逸? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮剃袍,結(jié)果婚禮上黄刚,老公的妹妹穿的比我還像新娘。我一直安慰自己民效,他們只是感情好憔维,可當(dāng)我...
    茶點故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著畏邢,像睡著了一般业扒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上棵红,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天凶赁,我揣著相機與錄音,去河邊找鬼逆甜。 笑死虱肄,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的交煞。 我是一名探鬼主播咏窿,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼素征!你這毒婦竟也來了集嵌?” 一聲冷哼從身側(cè)響起萝挤,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎根欧,沒想到半個月后怜珍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡凤粗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年酥泛,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嫌拣。...
    茶點故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡柔袁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出异逐,到底是詐尸還是另有隱情捶索,我是刑警寧澤,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布灰瞻,位于F島的核電站腥例,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏箩祥。R本人自食惡果不足惜院崇,卻給世界環(huán)境...
    茶點故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望袍祖。 院中可真熱鬧底瓣,春花似錦、人聲如沸蕉陋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凳鬓。三九已至茁肠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缩举,已是汗流浹背垦梆。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留仅孩,地道東北人托猩。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像辽慕,于是被迫代替她去往敵國和親京腥。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,747評論 2 361

推薦閱讀更多精彩內(nèi)容