springboot整合mybatis报错
项目结构
pom.xml
<dependencies>
<!--spring-web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis-spring.version}</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
application.properties
server.port=8001
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/pos?serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=root
项目简介
这是我自己学习时搭的项目,本来是想练习搭微服务、远程调用、maven父子模块的,但这些和本次记录的问题关系不大,就把相关的东西截图记录下来
项目很简单,从Controller到entity都是最基础的,每层该加的注解(@Controller、@Service、@Repository)都加了,但当我想启动测测接口时,却问题百出
问题
问题一
首先启动报错,提示“xxxServiceImpl里的xxxMapper找不到”
我先想到的是注解没写,并检查了Mapper类的注解
百度说,@Repository是spring的注解,这里需要Mybatis的@Mapper或者在启动类加上@MapperScan才能使mybatis配置Mapper接口,动态生成实体类
问题二
当我加上@Mapper后,启动确实可以了,但测试接口时,又提示xxxMapper的xxx方法找不到
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.ly.takeawayservice.dao.TakeawayMapper.queryCount
又百度了好久,说是缺了mybatis-spring整合包(上面pom.xml我已经加上了)
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis-spring.version}</version>
</dependency>
可以加上之后,测试接口依然报错
问题三
继续百度,又说可能是Mapper.xml文件中的namespace没写对、对应的方法名没写对、返回值没写对,我一一检查了都没问题(其实我确实写错了,但不是我这次出错的重点/笑哭)
继续百度,又说需要在pom.xml的build中配置resource
<!-- 如果不添加此节点mybatis的mapper.xml文件都会被漏掉。 -->
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
————————————————
版权声明:本文为CSDN博主「非阳」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/k469785635/article/details/77532512/
问题四
加上了问题三的pom配置,在我这依然没用,而且还报了个新错说找不到**/*.xml,我日了个DJ,赶快注释掉
这时我想到好像可以在application.properties中配置mapper.xml的路径,于是就试试
# 我的xml文件是放在resources资源目录下的mapper文件夹中的
mybatis.mapper-locations=classpath:mapper/*.xml
终于成了,我直接抽出一根烟,坐在窗台上抽了起来,抽的是那么的舒畅
总结
springboot整合mybatis
- pom中jar包要导全,特别是整合包mybatis-spring-boot-starter
- Mapper类注解需要用@Mapper或者在启动类使用@MapperScan(“包名”)
- 配置文件中需要指明mapper.xml文件的路径 mybatis.mapper-locations=
结语
上述报错花了我前后三个多小时才解决,还是对框架的知识不够熟悉和面对问题解决思路不清晰导致的,写个文章记录下,加深印象