电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

瀏覽:96日期: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 數據庫
相關文章:
主站蜘蛛池模板: 河南包装袋厂家_河南真空袋批发价格_河南服装袋定制-恒源达包装制品 | 刚性-柔性防水套管-橡胶伸缩接头-波纹管补偿器-启腾供水材料有限公司 | 中国玩具展_玩具展|幼教用品展|幼教展|幼教装备展 | 北京乾茂兴业科技发展有限公司| 便携式表面粗糙度仪-彩屏硬度计-分体式粗糙度仪-北京凯达科仪科技有限公司 | 捆扎机_气动捆扎机_钢带捆扎机-沈阳海鹞气动钢带捆扎机公司 | 悬浮拼装地板_篮球场木地板翻新_运动木地板价格-上海越禾运动地板厂家 | 进口便携式天平,外校_十万分之一分析天平,奥豪斯工业台秤,V2000防水秤-重庆珂偌德科技有限公司(www.crdkj.com) | 济南网站策划设计_自适应网站制作_H5企业网站搭建_济南外贸网站制作公司_锐尚 | 照相馆预约系统,微信公众号摄影门店系统,影楼管理软件-盟百网络 | 武汉高温老化房,恒温恒湿试验箱,冷热冲击试验箱-武汉安德信检测设备有限公司 | 法兰连接型电磁流量计-蒸汽孔板节流装置流量计-北京凯安达仪器仪表有限公司 | 新能源汽车电机定转子合装机 - 电机维修设备 - 睿望达 | 深圳天际源广告-形象堆头,企业文化墙,喷绘,门头招牌设计制作专家 | 精密光学实验平台-红外粉末压片机模具-天津博君 | 济南律师,济南法律咨询,山东法律顾问-山东沃德律师事务所 | 大型多片锯,圆木多片锯,方木多片锯,板材多片锯-祥富机械有限公司 | 喷漆房_废气处理设备-湖北天地鑫环保设备有限公司| 一体化污水处理设备-一体化净水设备-「山东梦之洁水处理」 | 网优资讯-为循环资源、大宗商品、工业服务提供资讯与行情分析的数据服务平台 | ★店家乐|服装销售管理软件|服装店收银系统|内衣店鞋店进销存软件|连锁店管理软件|收银软件手机版|会员管理系统-手机版,云版,App | 齿轮减速马达一体式_蜗轮蜗杆减速机配电机-德国BOSERL齿轮减速电动机生产厂家 | 苏州西朗门业-欧盟CE|莱茵UL双认证的快速卷帘门品牌厂家 | 温湿度记录纸_圆盘_横河记录纸|霍尼韦尔记录仪-广州汤米斯机电设备有限公司 | 便民信息网_家电维修,家电清洗,开锁换锁,本地家政公司 | 武汉印刷厂-不干胶标签印刷厂-武汉不干胶印刷-武汉标签印刷厂-武汉标签制作 - 善进特种标签印刷厂 | 北京征地律师,征地拆迁律师,专业拆迁律师,北京拆迁律师,征地纠纷律师,征地诉讼律师,征地拆迁补偿,拆迁律师 - 北京凯诺律师事务所 | 室内室外厚型|超薄型|非膨胀型钢结构防火涂料_隧道专用防火涂料厂家|电话|价格|批发|施工 | 机械立体车库租赁_立体停车设备出租_智能停车场厂家_春华起重 | 银川美容培训-美睫美甲培训-彩妆纹绣培训-新娘化妆-学化妆-宁夏倍莱妮职业技能培训学校有限公司 临时厕所租赁_玻璃钢厕所租赁_蹲式|坐式厕所出租-北京慧海通 | 北京工业设计公司-产品外观设计-产品设计公司-千策良品工业设计 北京翻译公司-专业合同翻译-医学标书翻译收费标准-慕迪灵 | 福尔卡(北京)新型材料技术股份有限公司 | 电动液压篮球架_圆管地埋式篮球架_移动平箱篮球架-强森体育 | 承插管件_不锈钢承插管件_锻钢高压管件-温州科正阀门管件有限公司 | 二维运动混料机,加热型混料机,干粉混料机-南京腾阳干燥设备厂 | 高压油管,液压接头,液压附件-烟台市正诚液压附件 | 网站建设-高端品牌网站设计制作一站式定制_杭州APP/微信小程序开发运营-鼎易科技 | 武汉高低温试验箱_恒温恒湿试验箱厂家-武汉蓝锐环境科技有限公司 | 粉末包装机,拆包机厂家,价格-上海强牛包装机械设备有限公司 | 尚为传动-专业高精密蜗轮蜗杆,双导程蜗轮蜗杆,蜗轮蜗杆减速机,蜗杆减速机生产厂家 | 体视显微镜_荧光生物显微镜_显微镜报价-微仪光电生命科学显微镜有限公司 |