手机版

hibernate访问json数据的代码分析

时间:2021-09-03 来源:互联网 编辑:宝哥软件园 浏览:

第一,现场

公共类order model { private ListString favorabledescrist;}订单中会存储一些优惠信息,方便页面显示,如:

1.超过100减50

2.参加【老会员真实反馈——精品课程体验活动】,只需支付200.00元

3.【Oracle PL/SQL实战】套餐课程的【抢购】活动,优惠120.00元.等等

如图所示,我们在页面上向用户展示了他们参与的优惠信息:

二、分析

上述优惠信息具有以下特点:

1.仅供展示,不涉及修改;

2.订单支付一旦成功,就不会再更改;

3.数据量不会很大。

第三,解决方案

1.最简单的解决方案是关联表:

但是,这个解决方案需要连接表进行查询,所以感觉没有必要。毕竟只是为了展示数据,感觉像是用刀杀鸡。

2.JSON解决方案:

通过以上思路,我们可以解决很多类似的问题。

3.代码示例:

1.模型类:

Java代码

公共类order model { @ Type(Type=' com . bjpowernode . framework . hibernate . Type . jsontype ')//私有ListString favorableDescList} (1)使用我们定制的Hibernate类型进行转换,只需上面的部分代码

2.自定义JsonType

Java代码

打包。bjpowernode。框架。冬眠。类型;//省略导入公共类JsonType实现UserType,Serializable {私有字符串JSON@ Override public int[]sqlTypes(){ 0返回新int[] {Hibernate .字符串。sqltype()};} @ Override public Class返回Class(){ return jsonlist。类;} @覆盖公共布尔等于(对象o,对象o1)抛出hibernate异常{ if(o==O1){返回true} if(o==null | | o==null){ return false;}返回o . equals(O1);} @覆盖公共int hashCode(对象o)抛出hibernate异常{ return o . HashCode();} /** * 从JDBC结果集读取数据,将其转换为自定义类型后返回* (此方法要求对克能出现空值进行处理)*姓名中包含了当前自定义类型的映射字段名称* @ param resultSet * @ param name * @ param owner * @ return * @抛出休眠异常* @抛出SQLException */@覆盖公共对象空安全获取(结果集结果集,字符串[]名称,对象所有者)抛出休眠异常,SQLException { String JSON=resultSet。getstring(名称[0]);if(json==null || json.trim().length()==0){ 0返回新的JsonList();}返回jsonarray。要列出(jsonarray。FromObject(JSON),jsonList。类);} /** * 本方法将在冬眠进行数据保存时被调用* 我们可以通过PreparedStateme将自定义数据写入到对应的数据库表字段* @ param prepared statement * @ param value * @ param I * @抛出休眠异常* @抛出SQLException */@覆盖公共无效的空安全集(preparedStatement preparedStatement,Object value,int i)抛出休眠异常,SQLException { if(value==null){ preparedStatement }。setnull(我,Hibernate .字符串。sqltype());} else { preparedStatement。setString(I,JSONArray.fromObject(值))。toString());} } /** * 提供自定义类型的完全复制方法* 本方法将用构造返回对象* 当nullSafeGet方法调用之后,我们获得了自定义数据对象,在向用户返回自定义数据之前,* deepCopy方法将被调用,它将根据自定义数据对象构造一个完全拷贝,并将此拷贝返回给用户* 此时我们就得到了自定义数据对象的两个版本,第一个是从数据库读出的原始版本,其二是我们通过*深度复制方法构造的复制版本,原始的版本将有冬眠维护,复制版由用户使用。原始版本用作* 稍后的脏数据检查依据;冬眠将在脏数据检查过程中将两个版本的数据进行对比(通过调用*等于方法),如果数据发生了变化(等于方法返回假),则执行对应的持久化操作* * @ param o * @ return * @抛出休眠异常*/@覆盖公共对象深度复制(对象o)抛出休眠异常{ if(o==null)返回nullJsonList JsonList=new JsonList();jsonlist。addall((列表)o);返回jsonList} /** *本类型实例是否可变* @ return */@ Override public boolean IsmPlayee(){ return true;} /* 序列化*/@重写公共可序列化反汇编(对象值)引发休眠异常{返回((可序列化)值);} /* 反序列化*/@重写公共对象程序集(可序列化缓存,对象所有者)引发休眠异常{返回缓存;} @覆盖公共对象替换(对象原始,对象目标,对象所有者)抛出休眠异常{返回原始;} } JSON框架使用的是json-lib 2.1。

3、自定义JsonList

爪哇代码

打包。bjpowernode。框架。冬眠;公共类JsonListT扩展了数组列表,实现了可克隆{ }就这么简单,欢迎大家讨论。

有人说有性能问题,我写了个测试用例:

测试机器:CPU:p8700(双核@2.53GHZ)内存:2G

一、插入

1、JSON方式插入10w条

创建100000运行时间(毫秒),210312,关联表插入10w条

创建100000运行时间(毫秒):79219 JSON性能远远好于关联表,关联表要插入两个表。

二、查询

1.JSON分页(100页)查询10w页

选择100000运行时间(毫秒):146047

2.关联表分页(100页),查询10w项

选择100000运行时间(毫秒):275375

JSON的性能远远优于关联表,后者需要join join查询。

JSON的缺点:分析统计等查询是鸡肋,数据量大是鸡肋(一列存储的数据量不能太大)。

我的应用场景:优惠信息、购物车持久性(每个用户最多有50个购物车)。

摘要

以上是边肖介绍的hibernate访问json数据的代码分析,希望对大家有所帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!

版权声明:hibernate访问json数据的代码分析是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。