← 返回首页
MybatisPlus基础教程(十五)
发表时间:2020-11-11 16:28:27
读取JSON类型

目前前后端分离项目中,采用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; //爱好,爱好有多个,所以是数组
}