一、代码
实际项目中,使用mybatis plus,我们经常会创建一个实体类用来和表对应,示列如下:
package com.arcade.earth.po; import com.arcade.po.BaseInfo; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.annotations.ApiModel; import lombok.*; import java.math.BigDecimal; @EqualsAndHashCode(callSuper = true) @TableName("tbl_site_contractor") @ApiModel(value="SiteContractorInfo对象") @JsonInclude(JsonInclude.Include.NON_NULL) public class SiteContractorInfo extends BaseInfo { private static final long serialVersionUID = 1L; private String siteId; private String contractorId; private String rateType; private BigDecimal price; private String status; public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public String getSiteId() { return siteId; } public void setSiteId(String siteId) { this.siteId = siteId; } public String getContractorId() { return contractorId; } public void setContractorId(String contractorId) { this.contractorId = contractorId; } public String getRateType() { return rateType; } public void setRateType(String rateType) { this.rateType = rateType; } public BigDecimal getPrice() { return price; } public void setPrice(BigDecimal price) { this.price = price; } @Override public String toString() { return "SiteContractorInfo{" + "siteId='" + siteId + '\'' + ", contractorId='" + contractorId + '\'' + ", rateType='" + rateType + '\'' + ", price=" + price + '}'; } }
该实体中的属性一一对应表 tbl_site_contractor的字段,但是有时候其他查询需要用到此实体,可能额外需要添加其他属性,并不和表字段对应,比如添加projectName属性,可能会报错,具体解决办法如下
@TableField(exist = false) private String projectName;
在属性上添加注解@TableField(exist = false),这样反射时就不会要求此字段必须和表字段对应了
可以在实体中添加其他字段,但是笔者还是建议表单独建一个实体类,其他传参需要,自行定义VO实体
二、@TableField注解拓展学习
1.忽略该属性的映射:
当实体类中的某些属性并不直接对应数据库表的任何字段,而是作为业务逻辑处理过程中的辅助变量时,可以使用此注解告知MyBatis Plus无需为这些属性执行SQL映射操作。
2.虚拟字段处理:
对于一些通过SQL计算或视图返回的字段,它们没有实际的数据库字段对应,也可以用此注解来定义,这样在查询结果映射到实体类时,MyBatis Plus不会尝试去数据库查找这个字段。
3.减少错误提示:
如果实体类中有属性但数据库表中没有对应的列,而又不想每次操作都引发不必要的警告或错误,可以使用此注解避免检查该属性的数据库映射。