SpringBoot整合mybatis常見問題(小結(jié))
Spring中常見問題
1.NoSuchBeanDefinitionException
2.'..Service' that could not be found service找不到
3.port 80 was already in use 端口號被占用
4.TemplateInputException 模板解析異?;蛘也坏侥0?/p>
- 1.檢查模板所在的目錄是否與配置的前綴目錄相同
- 2.檢查返回的模板是否存在,返回值類型是否一致
- 3.檢查配置前綴時是否以"/"斜杠結(jié)尾
- 4.控制層的url與客戶端的ur是否一致
5. 404異常 訪問資源不存在
6. 500異常 500異常要查看控制臺
Mybatis中常見問題
1.springboot中添加maven依賴
2.BadSqlGrammarException 錯誤的sql語句
3.BindingException 綁定異常
- 1.檢查映射文件的路徑配置與實(shí)際存儲位置是否一致
- 2.檢查dao接口的類名是否與映射文件的namespace值相同(不能有空格)
- 3.檢查dao接口中的方法名是否在映射文件中有對應(yīng)的id
4.IllegalArgumentException
原因:同樣說我sql映射是否出現(xiàn)了重復(fù)性的定義(例如:分別以注解方式和xml配置文件方式進(jìn)行定義,也就是說在同一個namespace下出現(xiàn)了重復(fù)的元素id)
5.SAXParseException xml解析問題
補(bǔ)充
問題一:Mapper類 autowired失敗
原因:掃描mapper包沒有配置或配置不正確
解決:
方案一:
1. 啟動類加@MapperScan("mapperPackagePath")
方案二:
增加配置類:
package com.yx.readingwebsite.config; import org.mybatis.spring.mapper.MapperScannerConfigurer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * MapperScannerConfigurer 配置DAO層 */ @Configuration public class MyBatisMapperScannerConfig { @Bean public MapperScannerConfigurer getMapperScannerConfigurer(){ MapperScannerConfigurer msc = new MapperScannerConfigurer(); msc.setSqlSessionFactoryBeanName("sqlSessionFactory"); msc.setBasePackage("com.yx.readingwebsite.mapper"); return msc; } }
問題二:Mapper掃描成功后,繼續(xù)報(bào)錯,org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
原因:xml的mapper SQL 和 Mapper接口沒有綁定
解決:
方案一:全局配置文件application.yml增加mybatis配置【xml mapper包在resource目錄下】
mybatis: mapper-locations: classpath:mapper/*.xml
方案二:增加配置類
package com.yx.readingwebsite.config; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.annotation.TransactionManagementConfigurer; import javax.sql.DataSource; /** * 配置MyBatis,引入數(shù)據(jù)源,sqlSessionFactory,sqlSessionTemplate,事務(wù)管理器 */ @Configuration //配置類 @EnableTransactionManagement //允許使用事務(wù)管理器 public class MyBatisModelConfig implements TransactionManagementConfigurer { @Autowired private DataSource dataSource; @Bean(name = "sqlSessionFactory") public SqlSessionFactory getSqlSessionFactory(){ SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean(); ssfb.setDataSource(dataSource); //設(shè)置數(shù)據(jù)源 ssfb.setTypeAliasesPackage("com.yx.readingwebsite.model"); //設(shè)置掃描模型包【po】 try { Resource[] resources = new PathMatchingResourcePatternResolver() .getResources("classpath:mapper/*.xml"); ssfb.setMapperLocations(resources); return ssfb.getObject(); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(); } } @Bean //獲得Session 模板,從而獲得Session public SqlSessionTemplate getSqlSessionTemplate(SqlSessionFactory sqlSessionFactory){ return new SqlSessionTemplate(sqlSessionFactory); } @Override //事務(wù)管理器 public PlatformTransactionManager annotationDrivenTransactionManager() { return new DataSourceTransactionManager(dataSource); } }
需要注意的是,xml版的mybatis一定要在sqlSessionFactory中指定mapperLocations,即下圖
總結(jié):
兩種配置方案。方案一,使用配置類;方案二,使用配置文件。完整配置如下:
方案一:配置類
package com.yx.readingwebsite.config; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.annotation.TransactionManagementConfigurer; import javax.sql.DataSource; /** * 配置MyBatis,引入數(shù)據(jù)源,sqlSessionFactory,sqlSessionTemplate,事務(wù)管理器 */ @Configuration //配置類 @EnableTransactionManagement //允許使用事務(wù)管理器 public class MyBatisModelConfig implements TransactionManagementConfigurer { @Autowired private DataSource dataSource; @Bean(name = "sqlSessionFactory") public SqlSessionFactory getSqlSessionFactory(){ SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean(); ssfb.setDataSource(dataSource); //設(shè)置數(shù)據(jù)源 ssfb.setTypeAliasesPackage("com.yx.readingwebsite.model"); //設(shè)置掃描模型包【po】 try { Resource[] resources = new PathMatchingResourcePatternResolver() .getResources("classpath:mapper/*.xml"); ssfb.setMapperLocations(resources); return ssfb.getObject(); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(); } } @Bean //獲得Session 模板,從而獲得Session public SqlSessionTemplate getSqlSessionTemplate(SqlSessionFactory sqlSessionFactory){ return new SqlSessionTemplate(sqlSessionFactory); } @Override //事務(wù)管理器 public PlatformTransactionManager annotationDrivenTransactionManager() { return new DataSourceTransactionManager(dataSource); } }
package com.yx.readingwebsite.config; import org.mybatis.spring.mapper.MapperScannerConfigurer; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * MapperScannerConfigurer 配置DAO層 */ @Configuration @AutoConfigureAfter(MyBatisModelConfig.class) public class MyBatisMapperScannerConfig { @Bean public MapperScannerConfigurer getMapperScannerConfigurer(){ MapperScannerConfigurer msc = new MapperScannerConfigurer(); msc.setSqlSessionFactoryBeanName("sqlSessionFactory"); msc.setBasePackage("com.yx.readingwebsite.mapper"); return msc; } }
方案二:配置文件 application.yml
spring: datasource: url: jdbc:mysql://127.0.0.1:3306/readingWebsite?useUnicode=true&characterEncoding=utf-8 username: password: driver-class-name: com.mysql.jdbc.Driver max-active: 100 max-idle: 10 max-wait: 10000 default-auto-commit: false time-between-eviction-runs-millis: 30000 min-evictable-idle-time-millis: 30000 test-while-idle: true test-on-borrow: true test-on-return: true validation-query: SELECT 1 mybatis: mapper-locations: classpath:mapper/*.xml
package com.yx.readingwebsite; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @MapperScan("com.yx.readingwebsite") public class ReadingWebsiteApplication { public static void main(String[] args) { SpringApplication.run(ReadingWebsiteApplication.class, args); } }
到此這篇關(guān)于SpringBoot整合mybatis常見問題(小結(jié))的文章就介紹到這了,更多相關(guān)SpringBoot整合mybatis問題內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
若依 MyBatis改為MyBatis-Plus的實(shí)現(xiàn)步驟
本文主要介紹了若依 MyBatis改為MyBatis-Plus的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08Windows下使用Graalvm將Springboot應(yīng)用編譯成exe大大提高啟動和運(yùn)行效率(推薦)
這篇文章主要介紹了Windows下使用Graalvm將Springboot應(yīng)用編譯成exe大大提高啟動和運(yùn)行效率,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-02-02在deepin上如何使用Fleet開發(fā)SpringBoot?3.0.0項(xiàng)目
這篇文章主要介紹了在deepin上使用Fleet開發(fā)SpringBoot?3.0.0項(xiàng)目的過程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-09-09Java設(shè)計(jì)模式之命令模式_動力節(jié)點(diǎn)Java學(xué)院整理
命令模式就是對命令的封裝,下文中給大家介紹了命令模式類圖中的基本結(jié)構(gòu),對java設(shè)計(jì)模式之命令模式相關(guān)知識感興趣的朋友一起看看吧2017-08-08在Spring Boot中加載初始化數(shù)據(jù)的實(shí)現(xiàn)
這篇文章主要介紹了在Spring Boot中加載初始化數(shù)據(jù)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02淺談MySQL中是如何實(shí)現(xiàn)事務(wù)提交和回滾的
本文主要介紹了MySQL中是如何實(shí)現(xiàn)事務(wù)提交和回滾的,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02