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

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

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

錯誤

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

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

在這里插入圖片描述

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

查找原因

因為項目是做了多數據源的讀寫分離,所以我把數據源的動態(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;
 }
}

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

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

在這里插入圖片描述

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

在這里插入圖片描述

改動

也就是說,注入數據源的地方還需要配置mapper的掃描路徑,如此一來,改動的地方也比較明確了,就是注入數據源的地方把 SqlSessionFactoryBean 改成 MybatisSqlSessionFactoryBean 后,并配置mapper文件對應的路徑,也就是把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語句了。

總結

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

相關文章

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

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

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

    RabbitMQ集群運維實踐教程

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

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

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

    深入理解Java中的注解Annotation

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

    Java中的Phaser使用詳解

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

    淺析Spring的事務實現原理

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

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

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

    SpringBoot與spring security的結合的示例

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

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

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

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

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

最新評論

栾城县| 南安市| 榆中县| 尉犁县| 丹阳市| 凌源市| 沈阳市| 东安县| 陆良县| 乳源| 东光县| 莱芜市| 连城县| 巍山| 仁怀市| 滕州市| 五寨县| 榕江县| 通榆县| 武城县| 从江县| 雷州市| 佳木斯市| 商水县| 新巴尔虎右旗| 阿荣旗| 宜州市| 河北省| 肇源县| 广饶县| 南阳市| 崇信县| 河北省| 牙克石市| 大英县| 二连浩特市| 江达县| 太保市| 大兴区| 苏州市| 惠安县|