对象字段存储
郭胜凯2026/08/17
说明
在使用 Smart Mybatis 进行开发时, 我们可以将实体类中的对象字段存储为 JSON 格式的字符串。这对于存储复杂的数据结构非常有用, 可以简化数据库设计并提高数据的可读性。
您必须知道, @TableField 注解并非只可以对字段和属性进行映射, 它还可以对字段的存储方式进行配置. 例如, 我们可以将一个对象字段存储为 JSON 字符串.
配置对象字段存储为 JSON
要将对象字段存储为 JSON 格式,在字段上设置 @TableField(json = true):
public class Example extends PO {
@TableField(json = true)
private Address address;
// ...
}
在上述示例中, address 字段是一个对象类型, 通过设置 json = true, Smart Mybatis 会将该字段序列化为 JSON 字符串存储在数据库中, 并在读取时反序列化回对象。
示例
下面是一个完整的示例, 展示如何使用对象字段存储为 JSON:
public class UserProfile extends PO {
@ID
private Long id;
private String userName;
@TableField(json = true)
private Address address;
// Getter和Setter方法
}
public class Address {
private String street;
private String city;
private String zipCode;
// Getter和Setter方法
}
在这个示例中, UserProfile 类包含一个 Address 对象字段。通过使用 @TableField(json = true), address 字段将被存储为 JSON 格式的字符串, 例如:
{
"street": "123 Main St",
"city": "Springfield",
"zipCode": "12345"
}
这样, 我们可以方便地存储和检索复杂的对象数据, 而无需创建额外的数据库表。
注意事项
- JSON 类型需要能被 Jackson 正确序列化和反序列化;普通 JavaBean 建议提供可访问的构造方式和属性访问器。
- JSON 列类型由当前方言决定,例如 MySQL 使用
LONGTEXT,H2/Oracle/DB2 使用CLOB。 - 在查询时, Smart Mybatis 会自动处理 JSON 的序列化和反序列化, 开发者无需手动进行转换。
- Smart Mybatis 使用 Jackson 作为默认 JSON 处理库,并支持字段泛型信息,例如
List<SomeType>。 - 变更已有列为 JSON/CLOB 可能涉及数据转换,生产环境应使用迁移脚本并验证历史数据。
