Springboot集成Mybatis和Mybatis-Plus的大坑
- 集成問題來源
- 問題來源
- 挖坑程序
- 解決方案
集成問題來源
問題來源
筆者近期在整合Springboot和mybatis時,一直采用的以下方式:
pom檔案:
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
yml檔案:
mybatis:
type-aliases-package: top.powersys..*.entity
mapper-locations: classpath:top/powersys/**/**/dao/xml/*.xml
mapper介面:
@Mapper
public interface DebtMapper {
List<DebtRecordDto> getDebtByAccoutNoList( @Param("accountNo") String accountNo);
}
一直也都是沒有什么問題,由于功能除錯沒問題了,便打算添加分頁,調研了許久,在朋友的建議下決定不自己手寫分頁工具,直接利用Myabtis-plus進行集成,
依賴如下:
<!--mp-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>2.1.5</version>
</dependency>
并且添加配置:
@Configuration
public class PageConfig {
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
return paginationInterceptor;
}
}
將Mapper中的介面修改為:
@Mapper
public interface DebtMapper {
Page<DebtRecordDto> getDebtByAccoutNoList(Page<DebtRecordDto> page, @Param("accountNo") String accountNo);
}
結果報錯,報錯內容:應該selectOne() 為一個物件或者null,而不該為多個,于是筆者無語了,本想著用IPage直接對封裝物件DebtRecordDto進行封裝,怎么就沒有封裝成List查詢,
于是筆者跟隨原始碼后,發現原始碼中,statement的執行結果直接封裝回傳,并且直接進入selectOne()方法中,并沒有回傳給IPage做再封裝,于是筆者將上述代碼改為:
@Mapper
public interface DebtMapper {
List<DebtRecordDto> getDebtByAccoutNoList(Page<DebtRecordDto> page, @Param("accountNo") String accountNo);
}
最終完美解決,page中存的包括paginationInterceptor攔截器執行后的select count(1),而List則是分頁后的結果,回傳Page的時候,要把List反過來賦給Page,
挖坑程序
雖然能夠分頁回傳,但每次都要將回傳的值在反過來賦給page,筆者不爽于多寫代碼,于是運用了百度大法,看到都用
@Mapper
public interface DebtMapper {
IPage<DebtRecordDto> getDebtByAccoutNoList(Page<DebtRecordDto> page, @Param("accountNo") String accountNo);
}
后,便也朝著改造,卻發現沒有IPage的類,于是提高了Mybatis的依賴版本:
<!--mp-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.1.0</version>
</dependency>
別的依賴不做修改,并且跟著一起做,結果又報了詭異的錯誤,雖然能跑起來,但是每次跳轉都會出現例外,于是筆者升級到3.1.2版本,結果報錯,說
ibatis.session.Configuration 不能cast to mybatisplus.core.MybatisConfiguration
在網上搜了很多資料,毫無所獲
解決方案
Configuration作為MybatisConfiguration的父類,不該無法強轉,于是筆者想,也許是原來的ibatis類下沒有MybatisConfiguration這個子類,一查ibatis包,果然沒有,于是棄用mybatis的依賴,而改為mybatis-plus-boot-starter的依賴
<!--添加mybatis-->
<!-- <dependency>-->
<!-- <groupId>org.mybatis.spring.boot</groupId>-->
<!-- <artifactId>mybatis-spring-boot-starter</artifactId>-->
<!-- <version>2.1.3</version>-->
<!-- </dependency>-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.2</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-core</artifactId>
<version>3.0.7.1</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-extension</artifactId>
<version>3.0.7.1</version>
</dependency>
同時,要把yml組態檔修改,不然找不到xml和entity
mybatis-plus:
type-aliases-package: top.powersys..*.entity
mapper-locations: classpath:top/powersys/**/**/dao/xml/*.xml
然后,重新更新Mapper類:
@Mapper
public interface DebtMapper {
IPage<DebtRecordDto> getDebtByAccoutNoList(Page<DebtRecordDto> page, @Param("accountNo") String accountNo);
}
最終能夠正常輸出出來

終于解決了,不需要自己回傳再封裝,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/139356.html
標籤:其他
上一篇:【解決方案】國標GB28181視頻監控平臺國標流媒體服務器EasyGBS如何實作安保行業日常巡查視頻監控系統解決方案?
