package com.zx.demo.mybatisPlus.entity; import com.baomidou.mybatisplus.annotation.IdType; import java.util.Date; import com.baomidou.mybatisplus.annotation.TableId; import java.io.Serializable; import com.baomidou.mybatisplus.annotation.TableLogic; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; /** * <p> * 讲师 * </p> * * @author testjava * @since 2025-03-11 */ @Data @EqualsAndHashCode(callSuper = false) @Schema(name = "EduTeacher", description = "讲师") public class EduTeacher implements Serializable { private static final long serialVersionUID=1L; @Schema(description = "讲师ID", requiredMode = Schema.RequiredMode.REQUIRED) private Long id; @TableId(type = IdType.AUTO) @Schema( description = "id", requiredMode = Schema.RequiredMode.REQUIRED ) private String i_id; @Schema(description = "讲师姓名") private String name; @Schema(description = "讲师简介") private String intro; @Schema(description = "讲师资历,一句话说明讲师") private String career; @Schema(description = "头衔 1高级讲师 2首席讲师") private Integer level; @Schema(description = "讲师头像") private String avatar; @Schema(description = "排序") private Integer sort; @Schema(description = "逻辑删除 1(true)已删除, 0(false)未删除") @TableLogic//逻辑删除注解 private Boolean isDeleted; @Schema(description = "创建时间") private Date gmtCreate; @Schema(description = "更新时间") private Date gmtModified; }如何修改实体类
时间: 2025-07-10 22:42:22 浏览: 6
<think>好的,我现在需要帮助用户解决关于MyBatis Plus实体类修改字段或结构的最佳实践问题。首先,我应该回顾用户提供的引用内容,看看有哪些已有的解决办法。
用户引用了四个资料,其中提到的主要方法包括使用@TableField注解来映射不同名字的字段,处理非数据库字段用@TableField(exist = false),以及字段名和数据库列名不一致的问题。例如,引用[3]提到用@TableField(exist = false)来忽略非数据库字段,引用[4]则讨论了字段名因下划线位置不同导致的匹配问题,并建议使用@TableField注解指定列名。
接下来,我需要将这些信息整理成结构化的步骤。可能需要分几个方面:字段映射、忽略非数据库字段、修改表结构后的实体调整、全局配置策略等。用户的问题是关于修改字段或结构的最佳实践,所以应该涵盖如何正确使用注解,以及如何处理不同情况下的字段调整。
还要注意用户提到的示例中,数据库字段和实体类字段不一致的情况,比如数据库中的name对应实体类的u_name,这时候需要用@TableField(value = "name")来指定正确的数据库列名。同时,如果有非数据库字段,必须用exist=false来避免报错。
另外,引用[4]提到字段名中的下划线问题,比如ext_attr4与ext_attr_4,这可能涉及到MyBatis Plus的命名策略,可能需要配置全局的columnUnderline属性或者使用@TableField注解明确指定。
然后,我需要考虑是否需要提到全局配置,比如在配置文件中设置字段策略,这样可以在全局范围内处理字段和列名的映射,减少重复注解的工作。
可能还需要提到修改表结构后,如何同步更新实体类,例如添加新字段时需要确保使用正确的注解,或者使用自动生成工具时需要注意调整生成的代码。
最后,要确保回答结构清晰,分点列出,每个点都给出具体的做法和示例代码,并引用相关的资料作为支持。同时,生成的相关问题需要与主题紧密相关,帮助用户进一步了解可能遇到的问题。</think>### MyBatis Plus实体类字段或结构修改的最佳实践
#### 1. **字段名与数据库列名映射**
当实体类字段名与数据库列名不一致时,使用`@TableField`注解显式指定映射关系:
```java
// 示例:实体类字段u_name对应数据库列name
@TableField(value = "name")
private String uName;
```
此方法适用于数据库字段名包含特殊符号(如下划线)或遵循不同命名规范的情况[^2][^4]。
#### 2. **忽略非数据库字段**
若实体类中存在非数据库字段(如计算字段或临时变量),需添加`@TableField(exist = false)`避免SQL报错:
```java
@TableField(exist = false)
private String tempValue;
```
未标注时,MyBatis Plus会尝试映射该字段到数据库,导致`Unknown column`错误[^1][^3]。
#### 3. **修改表结构后的实体类同步**
- **新增字段**:直接在实体类中添加字段并使用`@TableField`映射:
```java
@TableField("new_column")
private String newField;
```
- **删除字段**:从实体类中移除对应字段,并检查相关SQL操作是否依赖该字段。
#### 4. **全局命名策略配置**
在`application.yml`中配置全局字段映射规则,减少重复注解:
```yaml
mybatis-plus:
configuration:
map-underscore-to-camel-case: true # 自动将数据库下划线命名转为驼峰命名
global-config:
db-config:
column-format: "%s" # 自定义列名格式(可选)
```
此配置适用于字段名与列名遵循`user_name`→`userName`的规范场景[^4]。
#### 5. **逆向工程工具调整**
使用代码生成器(如MyBatis Plus Generator)时,通过模板配置确保生成的字段名与数据库列名正确匹配:
```java
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel); // 下划线转驼峰
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
```
可避免类似`ext_attr4`与`ext_attr_4`的匹配问题。
#### 6. **动态表名与字段**
若需动态修改表名或字段(如多租户场景),使用`@TableName`注解和动态SQL:
```java
@TableName("user_${tenantId}")
public class User {
private String tenantId;
}
```
结合`TableNameParser`实现运行时解析。
---
###
阅读全文
相关推荐


















