springboot整合mybatis报错

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类的注解
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

  1. pom中jar包要导全,特别是整合包mybatis-spring-boot-starter
  2. Mapper类注解需要用@Mapper或者在启动类使用@MapperScan(“包名”)
  3. 配置文件中需要指明mapper.xml文件的路径 mybatis.mapper-locations=

结语

上述报错花了我前后三个多小时才解决,还是对框架的知识不够熟悉和面对问题解决思路不清晰导致的,写个文章记录下,加深印象

  • 28
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值