国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:60日期:2023-10-24 08:42:35

錯誤

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

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

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

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

查找原因

因為項目是做了多數據源的讀寫分離,所以我把數據源的動態配置整合到了一個類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(); } /** * 主從動態配置 */ @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,點開該類的源碼,才發現該類正是拷貝了SqlSessionFactoryBean,并且重寫了自己的自定義加載方法buildSqlSessionFactory,

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

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

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

改動

也就是說,注入數據源的地方還需要配置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內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Mybatis 數據庫
相關文章:
主站蜘蛛池模板: 国产亚洲精品资源一区 | 毛片基地看看成人免费 | 99re6这里有精品热视频在线 | 亚欧美| 欧美大尺度免费一级特黄 | 国产一区二区在免费观看 | 日本久久网 | 第一色网站| 日韩一级精品视频在线观看 | 日韩三级一区 | 欧美成a | 国产欧美日韩亚洲 | 萌白酱白丝护士服喷水铁牛tv | 欧洲做人爱c欧美 | 亚洲欧美日韩一级特黄在线 | 亚洲免费网站在线观看 | 亚洲综合一区二区三区 | 久久久久一 | 国产精品99久久免费观看 | 亚洲怡红院在线 | 一级毛片在线视频 | 久久亚洲精品中文字幕 | 亚洲国产成人久久三区 | 免费网站看v片在线香蕉 | 精品视频国产狼人视频 | 无限资源中文免费 | 美女插跳蛋视频叫爽 | 日韩综合 | 亚欧视频在线观看 | 欧美成人免费全部观看天天性色 | 亚洲无线一二三区2021 | 久久久久久88色愉愉 | 免费黄色欧美 | 精品午夜久久网成年网 | 高清韩国a级特黄毛片 | 成人在线视频免费观看 | 久久一级毛片 | 韩日一级片 | 欧美国产日韩一区二区三区 | 欧美色视频日本片高清在线观看 | 亚洲国产综合人成综合网站00 |