日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

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

瀏覽:205日期: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 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产日韩亚洲欧美精品| 日韩高清在线不卡| 国产激情久久| 国产精品亚洲人成在99www| 国产精品亚洲综合久久| 精品视频久久| 久久精品国产99久久| 午夜国产欧美理论在线播放| 视频在线观看国产精品| 欧美日韩夜夜| 9999国产精品| 亚洲激情婷婷| 免费在线观看日韩欧美| 日韩欧美中文字幕电影| 久久久精品区| 欧美一区二区三区激情视频| 亚洲一区二区日韩| 嫩呦国产一区二区三区av| 日本久久成人网| 亚洲深夜福利在线观看| 免费在线欧美黄色| 亚洲福利国产| 欧美日本不卡| 久久一区二区三区喷水| 日韩欧美在线精品| 日韩欧美三级| 亚洲精品成a人ⅴ香蕉片| 欧美午夜网站| 日本久久成人网| 日韩欧美在线精品| 肉色欧美久久久久久久免费看| 91精品99| 国产女人18毛片水真多18精品| 裤袜国产欧美精品一区| 亚洲无线观看| 国产亚洲一区二区手机在线观看| 爽好多水快深点欧美视频| 国产精品成人国产| 国产精品免费看| 成人在线视频免费看| 久久国产精品99国产| 久久精品资源| 91久久在线| 久久一区视频| 亚洲免费一区三区| 欧美日韩水蜜桃| 久久伊人亚洲| 蜜桃av一区二区| 亚洲精品.com| 精品国产亚洲日本| 亚洲18在线| 午夜国产精品视频| 亚洲综合电影| 国产精品白丝一区二区三区| 视频在线观看一区| 欧美亚洲激情| 激情综合五月| 日韩中文字幕在线一区| 天堂网av成人| 成人午夜毛片| 国产精品一在线观看| 蜜臀久久久久久久| 欧美特黄一级大片| 神马久久午夜| 精品久久视频| 欧美国产先锋| 国产亚洲电影| 青草综合视频| 综合激情婷婷| 午夜在线观看免费一区| 欧美日韩一区二区三区视频播放| 久久精品资源| 国产精品久久久久久av公交车 | 激情偷拍久久| 日本一区二区免费高清| 国产精品日本一区二区不卡视频| 日本伊人午夜精品| 亚洲日本久久| 亚洲免费毛片| 亚洲一区导航| 国产精品外国| 国产偷自视频区视频一区二区| 99久久久久| 99国产精品一区二区| 国产91在线精品| 国产精品亚洲产品| 国产精品久久久久久久久免费高清| 日本aⅴ免费视频一区二区三区| 亚洲最新av| 亚洲开心激情| 亚洲精品一级| 日韩动漫一区| 国产日韩欧美中文在线| 国产精品一在线观看| 国产精品一页| 成人午夜在线| 在线一区视频观看| 久久久国产亚洲精品| 中文字幕在线视频网站| 国产高潮在线| 免费在线小视频| 欧美午夜精彩| 亚洲作爱视频| 亚洲精品少妇| 日本精品国产| 国产精品99久久免费观看| 国产精品66| 精品国产精品久久一区免费式| 激情中国色综合| 久久精品国产大片免费观看| 亚洲欧洲一区二区天堂久久| 久久国产高清| 国产欧美日韩亚洲一区二区三区| 免费看一区二区三区| 蜜桃视频在线网站| 欧美.日韩.国产.一区.二区 | 92国产精品| 伊人影院久久| 日韩av黄色在线| 国产中文字幕一区二区三区| 在线一区视频观看| 99综合视频| 欧美日韩亚洲一区二区三区在线| 免费亚洲婷婷| 人人精品亚洲| 亚洲无线观看| 麻豆精品久久| 国产精品黑丝在线播放| 蜜臀久久99精品久久一区二区| 免费观看在线综合| 欧美激情一区| 99riav1国产精品视频| 欧美精品中文字幕亚洲专区| 欧美www视频在线观看| 五月天久久网站| 国产精品主播| 欧美激情久久久久久久久久久| 精品一区二区三区免费看 | 肉色欧美久久久久久久免费看| 日韩一区二区在线免费| 免费在线观看成人| 美女国产精品久久久| 欧美.日韩.国产.一区.二区| 亚洲91在线| 亚洲一区资源| 亚洲精品一二| 欧美日韩免费观看视频| 亚洲永久精品唐人导航网址| 久久97视频| 国产模特精品视频久久久久| 国产精品qvod| 国产农村妇女精品一区二区| 丝袜美腿高跟呻吟高潮一区| 国产精品密蕾丝视频下载| 国产精品毛片一区二区在线看| 快she精品国产999| 亚洲天堂资源| 国产日韩欧美一区| 亚洲一区网站| 六月婷婷综合| 欧美一区精品| 好看的亚洲午夜视频在线| 美女视频网站久久| 综合欧美亚洲| 99精品综合| 精品视频国内| 日韩不卡手机在线v区| 亚洲精品乱码日韩| 欧美美女一区| 久久一区视频| 97久久超碰| 国产亚洲欧洲| 久久九九精品| 中文字幕在线官网| 欧美激情福利| 欧美中文高清| 婷婷五月色综合香五月| 在线一区免费| 久久国产电影| 天堂√中文最新版在线| 老鸭窝一区二区久久精品| 日韩不卡一二三区| 视频一区国产视频| 亚洲欧美日韩高清在线| 福利一区视频| 欧美91在线|欧美| 日本欧美大码aⅴ在线播放| 免费人成黄页网站在线一区二区| 日本精品不卡| 四季av一区二区凹凸精品| 国产区精品区| 日韩av电影一区| 日韩中文字幕无砖| 玖玖玖国产精品| 久久都是精品| 亚洲欧美视频| 日韩精品一区第一页| 日韩视频在线一区二区三区 | 四虎精品一区二区免费| 亚洲一区二区三区高清|