国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - hibernate存取json數據的代碼分析

hibernate存取json數據的代碼分析

2021-01-03 14:35動力節點 Java教程

這篇文章主要介紹了hibernate存取json數據的代碼分析,需要的朋友可以參考下

一、場景

?
1
2
3
public class ordermodel {
private list<string> favorabledesclist;
}

訂單中會存儲一些優惠信息,方便頁面展示時使用,如:

1、滿100減50

2、參與【老會員真情回饋——精品課程體驗活動】,僅需支付200.00學幣

3、【oracle + pl/sql 實戰】套裝課程的【搶購】活動,優惠120.00學幣
……等等

如圖所示,我們在頁面給用戶展示他們參與的優惠信息:

hibernate存取json數據的代碼分析

二、分析

如上優惠信息有如下特點:

1、只用于展示,不會涉及修改;

2、一旦訂單支付成功,不會再改變;

3、數據量不會很大。

三、解決方案

1、最簡單的解決方案是關聯表:

hibernate存取json數據的代碼分析

 但這種解決方案需要連表進行查詢,感覺是沒有必要的,畢竟只是展示數據,用關聯表有點殺雞用牛刀的感覺。

2、json解決方案:

hibernate存取json數據的代碼分析

通過如上思路我們可以解決許多類似的問題。 

3、代碼示例: 

1、模型類:

java代碼  

?
1
2
3
4
public class ordermodel {
 @type(type = "com.bjpowernode.framework.hibernate.type.jsontype") //①
 private list<string> favorabledesclist;
}

 ①處使用我們自定義的hibernate類型來進行轉換,上邊代碼只有一部分 

2、自定義jsontype

java代碼  

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package com.bjpowernode.framework.hibernate.type;
//省略import
public class jsontype implements usertype, serializable {
 private string json;
 @override
 public int[] sqltypes() {
  return new int[] {hibernate.string.sqltype()};
 }
 @override
 public class returnedclass() {
  return jsonlist.class;
 }
 @override
 public boolean equals(object o, object o1) throws hibernateexception {
  if (o == o1) {
   return true;
  }
  if (o == null || o == null) {
   return false;
  }
  return o.equals(o1);
 }
 @override
 public int hashcode(object o) throws hibernateexception {
  return o.hashcode();
 }
 /**
 * 從jdbc resultset讀取數據,將其轉換為自定義類型后返回
 * (此方法要求對克能出現null值進行處理)
 * names中包含了當前自定義類型的映射字段名稱
 * @param resultset
 * @param names
 * @param owner
 * @return
 * @throws hibernateexception
 * @throws sqlexception
 */
 @override
 public object nullsafeget(resultset resultset, string[] names, object owner) throws hibernateexception, sqlexception {
  string json = resultset.getstring(names[0]);
  if(json == null || json.trim().length() == 0) {
   return new jsonlist();
  }
  return jsonarray.tolist(jsonarray.fromobject(json), jsonlist.class);
 }
  /**
 * 本方法將在hibernate進行數據保存時被調用
 * 我們可以通過preparedstateme將自定義數據寫入到對應的數據庫表字段
 * @param preparedstatement
 * @param value
 * @param i
 * @throws hibernateexception
 * @throws sqlexception
 */
 @override
 public void nullsafeset(preparedstatement preparedstatement, object value, int i) throws hibernateexception, sqlexception {
  if(value == null) {
   preparedstatement.setnull(i, hibernate.string.sqltype());
  } else {
   preparedstatement.setstring(i, jsonarray.fromobject(value).tostring());
  }
 }
 /**
  * 提供自定義類型的完全復制方法
  * 本方法將用構造返回對象
  * 當nullsafeget方法調用之后,我們獲得了自定義數據對象,在向用戶返回自定義數據之前,
  * deepcopy方法將被調用,它將根據自定義數據對象構造一個完全拷貝,并將此拷貝返回給用戶
  * 此時我們就得到了自定義數據對象的兩個版本,第一個是從數據庫讀出的原始版本,其二是我們通過
  * deepcopy方法構造的復制版本,原始的版本將有hibernate維護,復制版由用戶使用。原始版本用作
  * 稍后的臟數據檢查依據;hibernate將在臟數據檢查過程中將兩個版本的數據進行對比(通過調用
  * equals方法),如果數據發生了變化(equals方法返回false),則執行對應的持久化操作
  *
  * @param o
  * @return
  * @throws hibernateexception
  */
 @override
 public object deepcopy(object o) throws hibernateexception {
  if(o == null) return null;
  jsonlist jsonlist = new jsonlist();
  jsonlist.addall((list)o);
  return jsonlist;
 }
 /**
  * 本類型實例是否可變
  * @return
 */
 @override
 public boolean ismutable() {
  return true;
 }
 /* 序列化 */
 @override
 public serializable disassemble(object value) throws hibernateexception {
  return ((serializable)value);
 }
 /* 反序列化 */
 @override
 public object assemble(serializable cached, object owner) throws hibernateexception {
  return cached;
 }
 @override
 public object replace(object original, object target, object owner) throws hibernateexception {
  return original;
 }
}

json框架使用的是json-lib 2.1。 

3、自定義jsonlist

java代碼  

?
1
2
3
package com.bjpowernode.framework.hibernate;
public class jsonlist<t> extends arraylist implements cloneable {
}

就這么簡單,歡迎大家討論。

有人說有性能問題,我寫了個測試用例:

測試機器:cpu:p8700(雙核@2.53ghz)  內存:2g 

一、插入

1、json方式插入10w條

?
1
create 100000 elapsed time(millis):21031

2、關聯表插入10w條

?
1
create 100000 elapsed time(millis):79219

json性能遠遠好于關聯表,關聯表要插入兩個表。 

二、查詢

1、json方式分頁(100條一頁)查詢10w條

select 100000 elapsed time(millis):146047

2、關聯表分頁(100條一頁)查詢10w條

select 100000 elapsed time(millis):275375 

json性能遠遠好于關聯表,關聯表需要join連表查詢。

json方式的缺點:分析統計等查詢是雞肋、大數據量是雞肋(一列存儲數據量不可能太大)。 

我的應用場景:優惠信息、購物車持久化(每個用戶購物車最多50條)。

總結

以上所述是小編給大家介紹的hibernate存取json數據的代碼分析,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:http://blog.sina.com.cn/s/blog_9c6852670102wvqd.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 免费观看一级淫片 | 日本伊人久久 | 日韩日韩日韩日韩日韩日韩 | 亚洲乱码国产乱码精品精的特点 | 日韩一区二区三区在线视频 | 国产精品区二区三区日本 | 国产精品a久久久久 | 成人午夜网 | 天天艹视频 | 99视频精品 | 99久久免费看精品国产 | 中文字幕久久伊人 | 日韩一区二区三区视频 | 成人亚洲 | 国产脚交av在线一区二区 | 久草视频在线观 | 欧美精品一区三区 | 色五月激情综合网 | 欧美日韩三级在线 | 日本免费在线视频 | 色av中文字幕 | 国产中文字幕在线 | 午夜视频免费 | 日本丶国产丶欧美色综合 | av入口| 黄色片在线免费观看 | 精品久| 亚洲国产成人av | 欧美国产日韩一区 | 午夜免费av | 精品国产一区二区三区久久久蜜 | 久久9国产偷伦 | 一区二区三区国产在线 | 日韩在线 | 日韩精品影视 | 日韩精品91爱爱 | 国产精品久久久久久久久久久久久 | 欧美成人a∨高清免费观看 国产99久久 | 九九九九国产 | 久久伊人网视频 | 日韩精品一区二区三区免费视频 |