问题背景
最近用MyBatisPlus的时候遇到一个问题,MyBatisPlus怎么忽略映射字段,就是怎么设置一个字段不为数据库字段但又是映射必须的。不忽略映射字段吧,又会报错。
Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column ‘***’ in ‘field list’
解决方案
MyBatisPlus有个不起眼的字段@TableField
,一般不是必须的。但是他有一个属性exist
,是表示这个字段在数据库中是否存在(是否实体字段)
,与JPA的@Transient
是类似的。
于是乎,加个@TableField(exist = false)
搞定
- @TableField(exist = false):表示该属性不为数据库表字段,但又是必须使用的。
- @TableField(exist = true):表示该属性为数据库表字段。
//zhengkai.blog.csdn.net
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
public @interface TableField {
String value() default "";
String el() default "";
boolean exist() default true;
String condition() default "";
String update() default "";
FieldStrategy strategy() default FieldStrategy.DEFAULT;
FieldFill fill() default FieldFill.DEFAULT;
boolean select() default true;
}
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
* @description menu
* @author zhengkai.blog.csdn.net
* @date 2020-05-20
*/
@Data
public class Menu implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 菜单id
*/
@TableId(type = IdType.AUTO)
private Integer menuId;
/**
* 地址
*/
private String href;
/**
* 图标
*/
private String icon;
/**
* 目标
*/
private String target;
/**
* 名字
*/
private String title;
private String roleId;
/**
* 父菜单id
*/
private Integer parentMenuId;
@TableField(exist = false)
private List<Menu> child;
public Menu() {
}
}