文章目录
MyBatis-Plus 是一个基于 MyBatis 的增强工具,能够快速开发 CRUD 操作。然而,在集成 MyBatis-Plus 时可能遇到各种问题,以下总结了常见的失败原因及对应的解决方案。
1. 配置文件路径问题
问题描述:
在 application.yml
或 application.properties
中配置了 configLocation
或 mapperLocations
,但路径错误或文件不存在。
解决方案:
-
检查
mybatis-config.xml
文件:- 路径应为
src/main/resources/mybatis/mybatis-config.xml
。 - 如果没有特殊需求,可以省略
configLocation
配置项。
示例配置:
mybatis-plus: mapper-locations: classpath:mapper/**/*.xml configuration: map-underscore-to-camel-case: true
- 路径应为
-
确保 Mapper XML 文件存在:
- 确保
src/main/resources/mapper/
下存在xxxMapper.xml
文件。 - 修改
mapper-locations
配置为正确路径。
- 确保
2. 数据源未正确配置
问题描述:
项目运行时报错,提示无法连接到数据库。
解决方案:
-
在
application.yml
中正确配置数据库信息:spring: datasource: url: jdbc:mysql://localhost:3306/your_database?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver
-
检查是否引入了正确的数据库驱动:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
3. Mapper 文件未扫描到
问题描述:
Mapper 接口文件或 XML 文件未被扫描到,导致 baseMapper
注入失败。
解决方案:
-
确保 Mapper 接口文件被扫描: 在启动类或配置类上添加注解:
@MapperScan("com.example.mapper")
-
检查
mapper-locations
配置: 确保 XML 文件路径正确,例如:mybatis-plus: mapper-locations: classpath:mapper/**/*.xml
4. 实体类未正确配置
问题描述:
查询或插入时,字段映射失败,或数据库字段未正确映射到实体类。
解决方案:
-
开启驼峰命名规则: 如果数据库字段是下划线命名,实体类是驼峰命名,需开启驼峰命名规则:
mybatis-plus: configuration: map-underscore-to-camel-case: true
-
实体类与表字段映射问题:
-
确保实体类字段名与数据库字段名一致,或通过注解指定:
@TableName("user") public class User { @TableId(type = IdType.AUTO) private Long id; @TableField("user_name") private String userName; }
-
5. 逻辑删除字段配置问题
问题描述:
逻辑删除功能未生效,或删除时报错。
解决方案:
-
在实体类中配置逻辑删除字段:
@TableLogic private Integer isDeleted;
-
在
application.yml
中配置逻辑删除值:mybatis-plus: global-config: db-config: logic-delete-value: 1 logic-not-delete-value: 0
-
确保数据库中有逻辑删除字段,类型通常为
TINYINT(1)
或BOOLEAN
。
6. MyBatis 和 MyBatis-Plus 依赖冲突
问题描述:
引入了 MyBatis 的依赖,导致与 MyBatis-Plus 冲突。
解决方案:
-
确保只引入 MyBatis-Plus 依赖:
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.0</version> </dependency>
-
删除
mybatis-spring-boot-starter
或其他 MyBatis 相关依赖。
7. SQL 执行失败
问题描述:
运行时提示 SQL 语法错误,或某些字段找不到。
解决方案:
-
检查 SQL 语句: 如果使用了自定义 SQL,确保语法正确并测试通过。
-
开启 SQL 日志,定位问题:
mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
8. 自动填充字段未生效
问题描述:
自动填充 createTime
、updateTime
等字段未生效。
解决方案:
-
配置自动填充注解:
@TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime;
-
自定义填充器:
@Component public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); } @Override public void updateFill(MetaObject metaObject) { this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); } }
9. 未正确引入全局配置
问题描述:
某些全局配置(如 ID 生成策略、逻辑删除等)未生效。
解决方案:
-
检查
application.yml
的全局配置:mybatis-plus: global-config: db-config: id-type: ASSIGN_ID table-underline: true
-
确保实体类正确配置注解:
@TableId(type = IdType.ASSIGN_ID) private Long id;
总结
MyBatis-Plus 集成失败的常见原因主要集中在以下几点:
- 配置文件路径错误或缺失。
- 数据源或 Mapper 文件未正确配置。
- 实体类与数据库字段映射错误。
- 依赖冲突或版本问题。
博客主页: 总是学不会.