关于SpringBoot和Spring下,整合mybatis使用通用mapper插件时,无法根据id进行查询,修改,删除的问题

在使用通用mapper的时候,如果调用默认的selectByPrimaryKey方法,以及updateByPrimarykey和deleteByPrimaryKey方法的时候,无法进行相关操作,如果传递参数的类型错误,会直接报错,无法继续进行。有的时候,会忽略一个问题,就是在使用通用mapper的时候,对应数据库映射的实体类的主键为进行id的指明,就会发生无法根据id查询,无法根据id删除以及修改等问题。

所以在使用通用mapper的时候,一定要在对应的实体类中的主键属性上面加上@Id注解,标明到底是否主键id。这样就能够使用对应的方法了。

如下所示:

    

在实体类的主键属性加上这个注解:
@Id
private String userid;
调用下面方法测试即可。
Userinfo info = this.userMapper.selectByPrimaryKey(id);
int isUpdate = this.userMapper.updateByPrimaryKeySelective(info);


<think>我们正在解决Spring Boot整合MyBatis自定义Mapper无法被识别的问题根据引用内容,我们可以通过多种方式配置MyBatisMapper扫描。以下是几种常见解决方法: 1. **使用@MapperScan注解**:在Spring Boot启动类上添加`@MapperScan`注解,指定Mapper接口所在的包路径。例如: ```java @SpringBootApplication @MapperScan("com.example.mapper") // 指定Mapper接口所在的包 public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 2. **使用@Mapper注解**:在每个Mapper接口上直接添加`@Mapper`注解,这样Spring Boot会自动识别。例如: ```java @Mapper public interface UserMapper { @Select("SELECT * FROM user") List<User> findAll(); } ``` 3. **配置mapper-locations**:如果使用XML文件定义SQL,需要在`application.properties`中配置XML文件的位置。例如: ```properties mybatis.mapper-locations=classpath*:mapper/**/*.xml ``` 4. **检查包扫描范围**:确保Mapper接口所在的包在Spring Boot主应用的子包下,或者被`@MapperScan`明确指定。 5. **检查依赖**:确保项目中已正确引入MyBatisSpring Boot整合依赖,例如: ```xml <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.0</version> </dependency> ``` 6. **检查接口方法定义**:确保自定义Mapper方法有正确的SQL注解或对应的XML文件(见引用[2][3])。如果使用XML,需要确保XML文件路径配置正确。 7. **检查IDEA配置**:如果使用IntelliJ IDEA,有需要标记资源目录。确保XML文件放在`src/main/resources`下,且被正确识别为资源文件。 8. **通用Mapper插件**:如果使用通用Mapper(见引用[4]),需要配置`@MapperScan`的`markerInterface`属性指向通用Mapper接口。 **示例配置:** ```java // 启动类配置 @MapperScan(basePackages = "com.example.dao", markerInterface = MyMapper.class) public class Application { ... } ``` 请根据实际情况选择合适的方法进行排查。 §§相关问题§§ 1. 如何配置MyBatis的XML映射文件路径? 2. Spring Boot中如何使用@MapperScan扫描多个包? 3. 通用Mapper插件Spring Boot中如何整合?</think>### Spring Boot整合MyBatis自定义Mapper无法识别的解决方法 在Spring Boot整合MyBatis,自定义Mapper无法被识别通常是由于扫描配置问题导致的。以下是具体解决步骤: #### 1. **使用`@MapperScan`注解全局扫描** 在启动类添加注解指定Mapper接口的包路径: ```java @SpringBootApplication @MapperScan("com.example.mapper") // 替换为你的Mapper接口包名 public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` > **关键点**:`@MapperScan`会扫描指定包下所有Mapper接口[^4]。 #### 2. **为每个Mapper接口添加`@Mapper`注解** 在每个自定义Mapper接口上单独添加注解: ```java @Mapper // 声明为MyBatis组件 public interface CustomMapper { @Select("SELECT * FROM table WHERE column = #{value}") List<Entity> customQuery(String value); } ``` #### 3. **配置XML映射文件路径** 在`application.properties`中配置XML文件位置: ```properties # 配置XML映射文件路径 mybatis.mapper-locations=classpath*:mapper/**/*.xml ``` 支持模糊匹配路径格式:`classpath*:com/package/**/mapping/*.xml`[^3] #### 4. **检查接口与XML的对应关系** 确保XML配置正确绑定接口: ```xml <!-- resources/mapper/CustomMapper.xml --> <mapper namespace="com.example.mapper.CustomMapper"> <select id="customMethod" resultType="com.example.Entity"> SELECT * FROM table WHERE id = #{id} </select> </mapper> ``` > **注意**:`namespace`必须与Mapper接口全限定名完全一致[^2]。 #### 5. **验证依赖配置** 检查`pom.xml`是否包含必要依赖: ```xml <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.0</version> <!-- 使用最新版本 --> </dependency> ``` #### 6. **项目结构规范示例** ``` src/main/java └─ com.example ├─ Application.java # 包含@MapperScan的启动类 └─ mapper └─ CustomMapper.java # Mapper接口 src/main/resources └─ mapper └─ CustomMapper.xml # XML映射文件 ``` > **常见错误排查**: > 1. 检查`@MapperScan`包路径是否包含Mapper接口 > 2. 确认XML文件在`resources`目录且路径匹配`mapper-locations` > 3. 确保接口方法名与XML中的`id`一致 > 4. IDE(有IDE缓存导致扫描失败) 通过以上步骤,99%的自定义Mapper识别问题都能解决。若仍存在问题,建议检查MyBatis日志级别: ```properties logging.level.org.mybatis=DEBUG ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值