温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

使用SpringBoot对mybatis进行整合需要注意哪些问题

发布时间:2020-12-25 14:45:16 来源:亿速云 阅读:207 作者:Leah 栏目:开发技术

使用SpringBoot对mybatis进行整合需要注意哪些问题?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

Spring中常见问题

1.NoSuchBeanDefinitionException

使用SpringBoot对mybatis进行整合需要注意哪些问题

2.'..Service' that could not be found service找不到

使用SpringBoot对mybatis进行整合需要注意哪些问题

3.port 80 was already in use 端口号被占用

使用SpringBoot对mybatis进行整合需要注意哪些问题

4.TemplateInputException 模板解析异常或找不到模板

  • 1.检查模板所在的目录是否与配置的前缀目录相同

  • 2.检查返回的模板是否存在,返回值类型是否一致

  • 3.检查配置前缀时是否以"/"斜杠结尾

  • 4.控制层的url与客户端的ur是否一致

使用SpringBoot对mybatis进行整合需要注意哪些问题

5. 404异常 访问资源不存在

使用SpringBoot对mybatis进行整合需要注意哪些问题

6. 500异常 500异常要查看控制台

使用SpringBoot对mybatis进行整合需要注意哪些问题

Mybatis中常见问题

1.springboot中添加maven依赖

使用SpringBoot对mybatis进行整合需要注意哪些问题

2.BadSqlGrammarException 错误的sql语句

使用SpringBoot对mybatis进行整合需要注意哪些问题

使用SpringBoot对mybatis进行整合需要注意哪些问题

3.BindingException 绑定异常

  • 1.检查映射文件的路径配置与实际存储位置是否一致

  • 2.检查dao接口的类名是否与映射文件的namespace值相同(不能有空格)

  • 3.检查dao接口中的方法名是否在映射文件中有对应的id

使用SpringBoot对mybatis进行整合需要注意哪些问题

使用SpringBoot对mybatis进行整合需要注意哪些问题

使用SpringBoot对mybatis进行整合需要注意哪些问题

使用SpringBoot对mybatis进行整合需要注意哪些问题

4.IllegalArgumentException

原因:同样说我sql映射是否出现了重复性的定义(例如:分别以注解方式和xml配置文件方式进行定义,也就是说在同一个namespace下出现了重复的元素id)

使用SpringBoot对mybatis进行整合需要注意哪些问题

5.SAXParseException xml解析问题

使用SpringBoot对mybatis进行整合需要注意哪些问题

补充

问题一: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扫描成功后,继续报错,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,引入数据源,sqlSessionFactory,sqlSessionTemplate,事务管理器  */   @Configuration //配置类 @EnableTransactionManagement //允许使用事务管理器 public class MyBatisModelConfig implements TransactionManagementConfigurer {     @Autowired   private DataSource dataSource;     @Bean(name = "sqlSessionFactory")   public SqlSessionFactory getSqlSessionFactory(){     SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();     ssfb.setDataSource(dataSource); //设置数据源     ssfb.setTypeAliasesPackage("com.yx.readingwebsite.model");  //设置扫描模型包【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  //事务管理器   public PlatformTransactionManager annotationDrivenTransactionManager() {     return new DataSourceTransactionManager(dataSource);   } }

需要注意的是,xml版的mybatis一定要在sqlSessionFactory中指定mapperLocations,即下图

使用SpringBoot对mybatis进行整合需要注意哪些问题

总结:
两种配置方案。方案一,使用配置类;方案二,使用配置文件。完整配置如下:

方案一:配置类

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,引入数据源,sqlSessionFactory,sqlSessionTemplate,事务管理器  */   @Configuration //配置类 @EnableTransactionManagement //允许使用事务管理器 public class MyBatisModelConfig implements TransactionManagementConfigurer {     @Autowired   private DataSource dataSource;     @Bean(name = "sqlSessionFactory")   public SqlSessionFactory getSqlSessionFactory(){     SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();     ssfb.setDataSource(dataSource); //设置数据源     ssfb.setTypeAliasesPackage("com.yx.readingwebsite.model");  //设置扫描模型包【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  //事务管理器   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);   }   }

看完上述内容,你们掌握使用SpringBoot对mybatis进行整合需要注意哪些问题的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI