springboot整合mybatis
使用start.spring.io源出错
添加起步依赖
无法启动项目
改用阿里源
查看pom文件
启动项目
测试类无法注入Spring容器类
写springboot项目时,遇到了一个很令人困惑的问题,就是在junit测试时,项目运行会报
java.lang.IllegalStateException: Failed to load ApplicationContext;
报错原因,xml配置文件路径问题。。。
但是我检查了mapper.xml和接口mapper路径都一致
测试类路径也一致(项目目录已经对齐了,junit测试类的包和所写的类的包要同)
找了半天,找到了问题所在
application.yam的优先级低于application.properties
更加详细就查看资料:“YAML文件_配置文件存放位置及优先级”
导致正确的mapper.xml路径被覆盖
application.properties中的所有内容如下
# 应用名称
spring.application.name=springbootmybatis2
# 应用服务 WEB 访问端口
server.port=8080
#下面这些内容是为了让MyBatis映射
#指定Mybatis的Mapper文件
mybatis.mapper-locations=classpath:mappers/*xml
#指定Mybatis的实体目录
mybatis.type-aliases-package=com.itbz.springbootmybatis2.mybatis.entity
# 数据库驱动:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 数据源名称
spring.datasource.name=defaultDataSource
# 数据库连接地址
spring.datasource.url=jdbc:mysql://localhost:3306/blue?serverTimezone=UTC
# 数据库用户名&密码:
spring.datasource.username=***
spring.datasource.password=***
全部删除
保留application.yam的内容
# 数据源
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql:///student?serverTimezone=UTC
username: root
password: root
# mybatis配置
mybatis:
# 映射文件位置
mapper-locations: com/itbz/springbootmybatis2/mapper/*Mapper.xml
# 别名
type-aliases-package: com.itbz.springbootmybatis2.domain
#日志格式
logging:
pattern:
console: '%d{HH:mm:ss.SSS}%clr(%-5level) --- [%-15thread]%cyan(%-50logger{50}):%msg%n'
成功查询到数据
但是注入spring容器类还是爆红
自动注入IDEA爆红
在使用@Autowrited注解时,报红提示我“Could not autowire. No beans of ‘UserMapper’ type found.”错误,但可以运行,结果也正确
方法1
将@Autowrited改为@Autowrited(required = false)。原因是spring auto scan配置找不到对应的bean,于是提示找不到对应bean的错误。
方法2(不推荐,好像会报错)
将@Mapper注解改为@Repository
方法3
修改IDEA的方法
@Mapper和@Repository的区别
@Repository需要在Spring中配置扫描地址,然后生成Dao层的Bean才能被注入到Service层中。
@Mapper不需要配置扫描地址,通过xml里面的namespace里面的接口地址,生成了Bean后注入到Service层中。