gpt4 book ai didi

java - MySql Json对象反序列化优化

转载 作者:行者123 更新时间:2023-11-29 19:16:25 24 4
gpt4 key购买 nike

我在 mysql 中有一个“text”类型的字段,并在其中存储 json 数据。例如:- "["android_app","iphone_app","windows_app"]";

我正在使用 hibernate 与 mysql 交互,在阅读此字段时,我将其反序列化为 Java 中的数组列表。

我的问题是,这是处理此类情况的最佳和最快的方法还是有一些更好的方法。

最佳答案

如果您能够利用某些 JPA 2.1 功能,则可以使用 AttributeConverter自动为您处理此问题,而无需在您的业务代码中处理此问题。

public class YourEntity {
// other stuff
@Convert(converter = StringArrayToJsonConverter.class)
List<String> textValues;
}

然后您只需按如下方式定义转换器:

public class StringArraytoJsonConverter 
implements AttributeConverter<List<String>, String> {

@Override
public string convertToDatabaseColumn(List<String> list) {
// convert the list to a json string here and return it
}

@Override
public List<String> convertToEntityAttribute(String dbValue) {
// convert the json string to the array list here and return it
}
}

最好的部分是,它成为一个可重用的组件,您可以简单地将其放置在需要将 json 数组表示为 List<> 的任何位置。在您的 java 类中,但宁愿使用单个文本字段将其作为 JSON 存储在数据库中。

另一种选择是避免将数据存储为 JSON,而是使用真实的表,这样您就可以实际查询 JSON 值。为此,您需要使用 JPA 的 @ElementCollection 重写该映射。

@ElementCollection
private List<String> textValues;

在内部,Hibernate 创建一个辅助表,在其中存储数组的文本字符串值以及对所属​​实体主键的引用,其中实体主键和字符串值被视为该辅助表的 PK。

然后,您可以处理序列化 List<>作为 Controller /业务代码中的 JSON 数组,以避免将持久性与该类型的介质混合,特别是考虑到大多数数据库尚未引入真正的 JSON数据类型还没有:)。

关于java - MySql Json对象反序列化优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42666696/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com