背景: 数据库中有一个表form, 里面有一个创建人属性,存储创建人Id, 在java的form 类里面,定义一个SimpleUser对象来接收创建人信息, 使用mybatis-plus的时候,需要获取到user对象的Id进行存储
实现方式: 我们通过mybatis-plus的 @TableField 注解和TypeHanlder配合来实现
1.实体类展示
1.1 用户类
@Data
public class SimpleUser implements Serializable {
private static final long serialVersionUID = 8797387968531262608L;
private Long id;
}
1.2 表单类
@TableName(autoResultMap = true)
@EqualsAndHashCode(callSuper = true)
@Data
public class Form extends FormBaseEntity {
private static final long serialVersionUID = -7883088166454023696L;
/**
* 表单名称
*/
private String name;
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
private SimpleUser creator;
private Date createTime;
private Date updateTime;
}
2.数据库设计
CREATE TABLE `form`
(
`id` decimal(20, 0) NOT NULL,
`name` varchar(50) DEFAULT NULL,
`creator` decimal(20, 0) NOT NULL,
`create_time` datetime DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
3.实现自定义typeHeadler
/**
* SysUserTypeHandler
*/
public class SysUserTypeHandler extends BaseTypeHandler<SimpleUser> {
@Override
public void setNonNullParameter(PreparedStatement ps, int i, SimpleUser parameter, JdbcType jdbcType) throws SQLException {
# 获取id内容
ps.setLong(i, parameter.getId());
}
@Override
public SimpleUser getNullableResult(ResultSet rs, String columnName) throws SQLException {
return null;
}
@Override
public SimpleUser getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
return null;
}
@Override
public SimpleUser getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
return null;
}
}
4. 在form类中新增注解
@TableName(autoResultMap = true)
@EqualsAndHashCode(callSuper = true)
@Data
public class Form extends FormBaseEntity {
private static final long serialVersionUID = -7883088166454023696L;
/**
* 表单名称
*/
private String name;
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
/**
* 使用此注解在实体类中要同步新增配置 否则不生效
* @TableName(autoResultMap = true)
*/
@TableField(typeHandler = SysUserTypeHandler.class)
private SimpleUser creator;
private Date createTime;
private Date updateTime;
}
5.测试
==> Preparing: INSERT INTO form ( id, name, creator, create_time ) VALUES ( ?, ?, ?, ? )
==> Parameters: 6228948182529317756(Long), 12(String), 1(Long), 2023-07-16 12:30:25.287(Timestamp)
<== Updates: 1