最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

引入mybatis-plus報 Invalid bound statement錯誤問題的解決方法

 更新時間:2020年05月29日 15:28:19   作者:鄙人薛某  
這篇文章主要介紹了引入mybatis-plus報 Invalid bound statement錯誤問題的解決方法,需要的朋友可以參考下

錯誤

Mybatis-Plus (簡稱MP) 是mybatis的一個增強工具,在mybatis的基礎(chǔ)上只做增強不做改變,簡化了開發(fā)效率。其實就是幫我們封裝了一些簡單的curd方法,可以直接調(diào)用,不必再重寫這些簡單的sql語句,類似JPA那樣。

前兩天創(chuàng)建了一個新項目,持久層框架用的是mybatis,同時引入mybatis-plus做增強工具,項目啟動后,調(diào)用接口卻發(fā)現(xiàn)報錯了,報錯的提醒如下:

在這里插入圖片描述

錯誤的信息顯示的是 “無效的綁定語句“,報錯的地方正是操作sql語句的方法,從網(wǎng)上查了一下答案,該錯誤主要是數(shù)據(jù)源綁定的配置問題,于是我順騰摸瓜,從配置數(shù)據(jù)源的地方下手。

查找原因

因為項目是做了多數(shù)據(jù)源的讀寫分離,所以我把數(shù)據(jù)源的動態(tài)配置整合到了一個類DataSourceConfig中,這是該類的代碼:

@Configuration
@MapperScan(basePackages = "com.xjt.proxy.mapper", sqlSessionTemplateRef = "sqlTemplate")
public class DataSourceConfig {
 /**
  * 主庫
  */
 @Bean
 @ConfigurationProperties(prefix = "spring.datasource.master")
 public DataSource masterDb() {
  return DruidDataSourceBuilder.create().build();
 }

 /**
  * 從庫
  */
 @Bean
 @ConfigurationProperties(prefix = "spring.datasource.slave")
 public DataSource slaveDb() {
  return DruidDataSourceBuilder.create().build();
 }

 /**
  * 主從動態(tài)配置
  */
 @Bean
 public DynamicDataSource dynamicDb(@Qualifier("masterDb") DataSource masterDataSource,
          @Autowired(required = false) @Qualifier("slaveDb") DataSource slaveDataSource) {
  DynamicDataSource dynamicDataSource = new DynamicDataSource();
  Map<Object, Object> targetDataSources = new HashMap<>();
  targetDataSources.put(DynamicDataSourceEnum.MASTER.getDataSourceName(), masterDataSource);
  if (slaveDataSource != null) {
   targetDataSources.put(DynamicDataSourceEnum.SLAVE.getDataSourceName(), slaveDataSource);
  }
  dynamicDataSource.setTargetDataSources(targetDataSources);
  dynamicDataSource.setDefaultTargetDataSource(masterDataSource);
  return dynamicDataSource;
 }

 @Bean
 public SqlSessionFactory sessionFactory(@Qualifier("dynamicDb") DataSource dynamicDataSource) throws Exception {
  SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
  bean.setMapperLocations(
    new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/*Mapper.xml"));
  bean.setDataSource(dynamicDataSource);
  return bean.getObject();
 }

 @Bean
 public SqlSessionTemplate sqlTemplate(@Qualifier("sessionFactory") SqlSessionFactory sqlSessionFactory) {
  return new SqlSessionTemplate(sqlSessionFactory);
 }

 @Bean(name = "dataSourceTx")
 public DataSourceTransactionManager dataSourceTx(@Qualifier("dynamicDb") DataSource dynamicDataSource) {
  DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();
  dataSourceTransactionManager.setDataSource(dynamicDataSource);
  return dataSourceTransactionManager;
 }
}

內(nèi)容沒什么復(fù)雜的,主要是對主從庫的數(shù)據(jù)源配置映射,以及把數(shù)據(jù)源注入SqlSessionFactory對象中,如果對該部分代碼或者讀寫分離比較疑惑的話,可以看我之前的文章《讀寫分離很難嗎?springboot結(jié)合aop簡單就實現(xiàn)了》

主從庫映射數(shù)據(jù)源沒什么異議,想來想去應(yīng)該是注入那一步有問題,然后就把目光放到了sessionFactory方法上,該方法主要是返回一個SqlSessionFactory對象,該對象是由通過新建一個SqlSessionFactoryBean對象并注入數(shù)據(jù)源后返回的,問題應(yīng)該是出在這個SqlSessionFactoryBean類上,后來,經(jīng)平哥(我旁邊的大佬)提醒后,這里應(yīng)該要換成mybatis-plus中另一個Bean工廠類,叫做MybatisSqlSessionFactoryBean,點開該類的源碼,才發(fā)現(xiàn)該類正是拷貝了SqlSessionFactoryBean,并且重寫了自己的自定義加載方法buildSqlSessionFactory,

在這里插入圖片描述

跳轉(zhuǎn)到該方法的源碼中,發(fā)現(xiàn)其中有一段代碼比較重要,配置中少了這一步就會注入失敗,

在這里插入圖片描述

改動

也就是說,注入數(shù)據(jù)源的地方還需要配置mapper的掃描路徑,如此一來,改動的地方也比較明確了,就是注入數(shù)據(jù)源的地方把 SqlSessionFactoryBean 改成 MybatisSqlSessionFactoryBean 后,并配置mapper文件對應(yīng)的路徑,也就是把sessionFactory方法改成如下代碼:

@Bean
 public SqlSessionFactory sessionFactory(@Qualifier("dynamicDb") DataSource dynamicDataSource) throws Exception {
  MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
  sqlSessionFactoryBean.setDataSource(dynamicDataSource);
  PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();  sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath*:mapper/*Mapper.xml"));
  return sqlSessionFactoryBean.getObject();
 }

這樣一來,再次啟動項目就可以正常操作sql語句了。

總結(jié)

到此這篇關(guān)于引入mybatis-plus報 Invalid bound statement錯誤問題的解決方法的文章就介紹到這了,更多相關(guān)Mybatis plus Invalid bound statement內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入理解java動態(tài)代理的兩種實現(xiàn)方式(JDK/Cglib)

    深入理解java動態(tài)代理的兩種實現(xiàn)方式(JDK/Cglib)

    本篇文章主要介紹了java動態(tài)代理的兩種實現(xiàn)方式,詳細的介紹了JDK和Cglib的實現(xiàn)方法,具有一定的參考價值,有興趣的可以了解一下
    2017-04-04
  • RabbitMQ集群運維實踐教程

    RabbitMQ集群運維實踐教程

    RabbitMQ的集群模式主要有兩種普通集群模式和鏡像隊列模式,下面給大家分享RabbitMQ集群運維實踐教程,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • JVM類加載之雙親委派機制解讀

    JVM類加載之雙親委派機制解讀

    這篇文章主要介紹了JVM類加載之雙親委派機制解讀,類加載階段分為加載、連接、初始化三個階段,而加載階段需要通過類的全限定名來獲取定義了此類的二進制字節(jié)流,Java特意把這一步抽出來用類加載器來實現(xiàn),需要的朋友可以參考下
    2023-12-12
  • 深入理解Java中的注解Annotation

    深入理解Java中的注解Annotation

    這篇文章主要介紹了深入理解Java中的注解Annotation,注解在Java中確實也很常見,但是人們常常不會自己定義一個注解拿來用,我們雖然很少去自定義注解,但是學(xué)會注解的寫法,注解的定義,學(xué)會利用反射解析注解中的信息,在開發(fā)中能夠使用到,這是很關(guān)鍵的,需要的朋友可以參考下
    2023-10-10
  • Java中的Phaser使用詳解

    Java中的Phaser使用詳解

    這篇文章主要介紹了Java中的Phaser使用詳解,與其他障礙不同,注冊在phaser上進行同步的parties數(shù)量可能會隨時間變化,任務(wù)可以隨時進行注冊,需要的朋友可以參考下
    2023-11-11
  • 淺析Spring的事務(wù)實現(xiàn)原理

    淺析Spring的事務(wù)實現(xiàn)原理

    這篇文章主要為大家詳細介紹了Spring中事務(wù)實現(xiàn)的原理,文中的示例代碼講解詳細,對我們學(xué)習(xí)Spring有一定的幫助,需要的可以參考一下
    2022-11-11
  • 基于java讀取并引用自定義配置文件

    基于java讀取并引用自定義配置文件

    這篇文章主要介紹了基于java讀取并引用自定義配置文件,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • SpringBoot與spring security的結(jié)合的示例

    SpringBoot與spring security的結(jié)合的示例

    這篇文章主要介紹了SpringBoot與spring security的結(jié)合的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • JSON 格式的弊端與解決方法(真實示例)

    JSON 格式的弊端與解決方法(真實示例)

    JSON 格式是目前最流行的數(shù)據(jù)交互格式,廣泛應(yīng)用于前后端分離的系統(tǒng)。但也有一些場合不適合使用 JSON 格式,這篇文章主要介紹了JSON 格式的弊端與解決方法,需要的朋友可以參考下
    2022-09-09
  • mybatis-generator-gui 工具使用(圖形化工具)

    mybatis-generator-gui 工具使用(圖形化工具)

    基于 mybatis generator 開發(fā)一款界面工具, 本工具可以使你非常容易及快速生成 Mybatis 的 Java POJO 文件及數(shù)據(jù)庫 Mapping 文件。本文重點給大家介紹mybatis-generator-gui 工具使用,感興趣的朋友一起看看吧
    2022-03-03

最新評論

阿坝| 永兴县| 天峻县| 凤阳县| 厦门市| 寿光市| 襄城县| 林甸县| 房山区| 比如县| 泗水县| 山西省| 韶关市| 锦州市| 屏东县| 沅江市| 昔阳县| 古交市| 鹿邑县| 乌鲁木齐县| 镇巴县| 黄浦区| 色达县| 长治市| 治县。| 怀仁县| 南乐县| 托克逊县| 成武县| 波密县| 闽侯县| 罗江县| 滨海县| 义马市| 普安县| 昌江| 邹平县| 张掖市| 大厂| 包头市| 铁力市|