Mybatis-plus实体类属性与表字段不一致解决方法

本文详细介绍了Java中MyBatis-Plus框架用于数据库表映射的注解,如@TableName用于指定表名,@TableId用于标识主键自增,@TableField解决字段名不匹配问题。通过这些注解,可以方便地实现实体类与数据库表之间的映射,提高开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要注释到实体类上的注解:

@TableName(value = …)
当数据库名与实体类名不一致或不符合驼峰命名时,需要在此注解指定表名

主键自增的设定:

@TableId(type = IdType.AUTO)
指定实体类的属性为对应的主键

@TableField注解

1、 主要用来解决实体类的字段名与数据库中的字段名不匹配的问题(数据库user_addr,字段useraddr未驼峰,mp默认开启驼峰)
2. 实体类中的属性字段在表中不存在的问题

// 用来解决数据库中的字段和实体类的字段不匹配问题
@TableField(value = "age")
 
// 用来解决实体类中有的属性但是数据表中没有的字段
@TableField(exist = false)  // 默认为true
### 禁用 MyBatis-Plus 实体类字段自动映射 在 MyBatis-Plus 中,默认情况下会基于实体类字段数据库表字段名之间的映射规则进行操作。如果希望禁用这种默认行为,可以通过调整全局配置或者修改实体类的设计方式实现。 #### 方法一:通过全局配置取消默认字段映射 MyBatis-Plus 的 `global-config` 配置项允许开发者自定义字段映射的行为。具体来说,可以在配置文件中设置 `field-strategy` 参数为 `NONE` 来关闭字段策略[^2]: ```yaml mybatis-plus: global-config: db-config: field-strategy: NONE ``` 上述配置的作用是告诉框架对未标记注解的字段执行任何插入或更新操作,从而达到禁用默认字段映射的效果。 #### 方法二:使用注解显式指定字段映射 对于某些特定场景下的字段映射需求,可以选择依赖于默认命名规则,而是通过手动添加注解的方式来完成映射。例如,在实体类中使用 `@TableField(exist = false)` 注解声明某个字段存在于数据库中[^4]: ```java import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; @TableName("example_table") public class ExampleEntity { private Long id; @TableField(exist = false) private String nonExistentColumn; // 数据库中无此列 } ``` 这样做的好处是可以灵活控制哪些字段 SQL 查询过程,而无需完全遵循框架设定好的规则。 #### 方法三:重写 BaseMapper 接口方法 另一种更彻底的方法是从源头上改变 Mapper 层逻辑。即继承官方提供的 `BaseMapper<T>` 并覆盖其中涉及字段处理的部分函数,比如 `insert`, `updateById` 等核心 CRUD 功能。过这种方式较为复杂且容易引入维护成本,仅推荐给有特殊业务诉求的应用开发人员尝试。 --- ### 注意事项 当决定要禁用自动映射机制之后,请务必确认项目内的其他部分会因此受到影响。特别是那些高度依赖原有约定俗成做法的地方可能需要额外适配工作才能正常运转下去。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值