目前前后端分离项目中,采用json格式的数据作为前后端数据交换的载体,那么在MybaitsPlus如何存取json数据呢?
基本步骤如下:
1).在数据库表定义JSON字段; 例如:
CREATE TABLE `users` (
`uid` int(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`description` json NULL
);
2).在pom.xml中添加fastjson依赖。
<properties>
<!--fastjson 1.2.68以下版本存在反序列化远程命令执行漏洞-->
<fastjson.version>1.2.68</fastjson.version>
</properties>
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
</dependencies>
3).让JPA支持自定义实体类映射为json字段。
添加hibernate-types-52依赖。
<dependency>
<groupId>com.vladmihalcea</groupId>
<artifactId>hibernate-types-52</artifactId>
<version>2.12.1</version>
</dependency>
在实体类上添加 @TypeDef 注解:
@TypeDef(name = "json", typeClass = JsonStringType.class)
public class Users extends BaseEntity implements Serializable,Cloneable {
}
4).在实体类加上@TableName(autoResultMap = true)、在JSON字段映射的属性加上@TableField(typeHandler = FastjsonTypeHandler.class);
例如:
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@TableName(autoResultMap = true)
@TypeDef(name = "json", typeClass = JsonStringType.class)
public class Users extends BaseEntity implements Serializable,Cloneable {
@TableField(jdbcType =JdbcType.BLOB, typeHandler = FastjsonTypeHandler.class)
@Type(type = "json")
@Column(columnDefinition = "json" )
//Descriptione 是用户自定义类型
private Description description;
}
5).建一些业务代码进行测试;
使用FastjsonTypeHandler还可以实现对数组类型的属性的存储。例如:
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@TableName(autoResultMap = true)
public class Users extends BaseEntity implements Serializable,Cloneable {
@TableField(jdbcType = JdbcType.BLOB,typeHandler = FastjsonTypeHandler.class)
private String[] favorites; //爱好,爱好有多个,所以是数组
}