SpringBoot+MyBatis项目Bean定义无效问题求助
SpringBoot整合MyBatis时出现Invalid bean definition error的解决方案
核心问题排查与修复步骤
缺失Mapper接口定义
你的MemberService中注入了MemberMapper但未提供该接口代码,这是Bean定义失败的核心原因之一。必须创建对应Mapper接口:package data.mapper; import data.dto.MemberDto; import org.apache.ibatis.annotations.Mapper; @Mapper // 或依靠启动类的@MapperScan扫描,二选一即可 public interface MemberMapper { void insertMember(MemberDto dto); }SQL语句语法错误
XML中的INSERT语句列名部分不能写null,若id为自增主键,需省略列名或明确写出正确字段名:<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="data.mapper.MemberMapper"> <!-- 假设表字段为id, user_id, password, email, created_at --> <insert id="insertMember" parameterType="MemberDto"> INSERT INTO user (user_id, password, email, created_at) VALUES (#{userId}, #{password}, #{email}, now()) <!-- id为自增时数据库自动生成,无需传入 --> </insert> </mapper>依赖版本不一致
SpringBoot版本为3.3.2,但spring-boot-starter-web指定了3.1.2,版本不匹配会引发依赖冲突。修改build.gradle,去掉web的版本号,让SpringBoot依赖管理自动匹配:dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' // 移除版本号 implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.0' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.mysql:mysql-connector-j:8.0.33' testImplementation 'org.springframework.boot:spring-boot-starter-test' implementation group: 'io.awspring.cloud', name: 'spring-cloud-starter-aws', version: '2.4.4' annotationProcessor 'org.projectlombok:lombok' }MyBatis配置优化
为mapper-locations添加classpath前缀,确保正确扫描XML文件:mybatis: type-aliases-package: data.dto mapper-locations: - classpath:mapper/**/*.xml重复Dto类清理
你重复粘贴了两次MemberDto代码,删除其中一份即可,避免类定义冲突。@ComponentScan简化
@SpringBootApplication默认扫描主类所在包(com.example.jake)及其子包,若data包与com.example.jake同级,当前配置有效;若data是其子包,可直接移除@ComponentScan注解减少冗余。
内容的提问来源于stack exchange,提问作者Kwohyuno
相关产品推荐
相关产品推荐

