成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

介紹Hibernate使用UserType

開發 后端
這里介紹Hibernate使用UserType,UserType就是用戶自定義類型,這里的類型指的是除了Hibernate定義的那些類型之外的用戶自己定義的。

Hibernate有很多值得學習的地方,這里我們主要介紹Hibernate使用UserType,包括介紹UserType就是用戶自定義類型等方面。

1、建立數據庫的時候***建立一個跟業務邏輯完全沒有關系的id,這樣的好處就是以后當數據量大的時候可以容易的建立索引,而且當業務邏輯變化的時候底層的數據結構不用變化很大。

2、代碼的干凈是非常非常的重要的,從現在開始盡量讓自己的代碼寫的漂亮把!因為干凈的代碼不僅容易維護,而且容易發現bug,在Hibernate使用UserType是很好用的。舉個經典的例子:

實現Hibernate使用UserType接口的email 類

比如 你需要在 TUSER 表中記錄一個人的 email ,單獨為其建立一張數據庫表是很浪費資源的,一般的方法是將TUSER 一欄 varchar 的來記錄email ,多個 email 之間用 " ; "號分開,我曾經做的項目中采取的方法是:取出一個記錄著多條 email 的 string然后再來用 ; 號拆開,但是這樣子就有個不好,在一堆整齊的 get 方法用出來一個有 bad smell 的代碼。

有兩個方法,一個是修改映射TUSER的 java 類在其中增加一個 getEmail 方法,返回一個 list ,該方法對原先的 getEmail 方法進行二次處理。第二個方法就是采用UserType 。

UserType就是用戶自定義類型,這里的類型指的是除了Hibernate定義的那些類型之外的用戶自己定義的。

一個實現Hibernate使用UserType接口的 email 類如下(里面的每個方法都是必須實現的接口方法,許多都可以復制粘貼的,不復雜):

  1. public class Email implements UserType  
  2. ...{  
  3.  
  4. // 表示本類型實例是否可變,一般是不可變  
  5. public boolean isMutable()  
  6. ...{  
  7. return false;  
  8. }  
  9.  
  10. //該類型對應的 sql 類型  
  11. public int[] sqlTypes()  
  12. ...{  
  13. return new int[]......{Types.VARCHAR};  
  14. }  
  15.  
  16. // 改類型對應的 java 類型  
  17. public Class returnedClass()  
  18. ...{  
  19. return List.class;  
  20. }  
  21.  
  22. // 完全復制的方法,由于是用戶自己定義的類型
  23. //所以hibernate并不知道要如何來復制這個類,需要用戶自己定義  
  24. public Object deepCopy(Object value)throws HibernateException  
  25. ...{  
  26. List source = (List)value;  
  27. List target = new ArrayList();  
  28. target.addAll(source);  
  29. return target;  
  30. }  
  31.  
  32. //equals方法,這個就不用多說了吧,肯定是要用戶自定義的  
  33. public boolean equals(Object x,Object y) throws HibernateException  
  34. ...{  
  35. //這部分不寫出來了,自己實現吧,這個不是我要講的重點  
  36. }  
  37.  
  38. /** *//**//*  
  39. 這才是重頭戲!nullSafeGet 和nullSafeSet 是核心所在,對數據的后期處理都在這兩個方法里面  
  40. nullSafeGet 是讀取的方法  
  41. owner 目前沒用到過。  
  42. names 是對應的數據庫列名,UserType是可以對應多個列的  
  43. */  
  44. public Object nullSafeGet(ResultSet rs,String[] names,Object owner) 
    throws HibernateException,SQLException  
  45. ...{  
  46. String value = (String)Hibernate.STRING.nullSafeGet(rs,names[0]);  
  47. if(value != null)  
  48. ...{  
  49. //把 string 拆開成 list 的代碼放在這里  
  50. }  
  51. return resultList;//得到了拆開的 郵件列表  
  52. }  
  53.  
  54. /**//*  
  55. 保存的方法  
  56. index 是那個 PreparedStatement 的參數序號,一般來說不用管直接往下傳  
  57. value 就是要保存的數據,在這邊是一個保存著 email 列表的 List  
  58. */  
  59. public void nullSafeSet(PreparedStatement st,Object value,int index) 
    throws HibernateException,SQLException  
  60. ...{  
  61. if(value != null)  
  62. ...{  
  63. String email = assemble(value);//將 List 拼合成 String 的 Email 的方法  
  64. Hibernate.STRING.nullSafeSet(st,email,index);  
  65. }  
  66. else  
  67. ...{  
  68. Hibernate.STRING.nullSafeSet(st,value,index);  
  69. }  
  70. }  

在TUser.hbm.xml 中如此設置:

  1. <hibernate-mapping> 
  2. <class name="entity.TUser" table="T_USER"> 
  3. </class> 
  4. ..............  
  5. <property name = "emali"column = "email"type = "mytype.Email"/> 
  6. </hibernate-mapping> 

在TUser.java中如此設置

  1. public class TUser implement Serializable  
  2. ...{  
  3. private Integer id;  
  4. privarte Stirng name;  
  5. //看,這邊的 email 可以大膽的使用 List 了  
  6. private List email;  
  7.  
  8. //下面是一些 getter 和 setter 了  

這樣設置后你使用 TUser的時候要取出  email 直接 getEmail 出來的就是一個List 了,而且前臺根本不知道后臺干了什么,這樣代碼就簡潔多了。

【編輯推薦】

  1. 簡單描述Hibernate單元測試
  2. 概括Hibernate多表關聯查詢
  3. 淺談Hibernate Session Factory
  4. 淺析Hibernate加載配置文件
  5. 深入剖析Hibernate核心接口
責任編輯:佚名 來源: IT168
相關推薦

2009-09-22 09:27:29

Hibernate P

2009-09-28 13:49:44

Hibernate Q

2009-09-27 14:41:05

Hibernate I

2009-09-23 17:41:05

Hibernate事務

2009-09-25 09:46:03

Hibernate s

2009-09-28 10:24:58

Hibernate基礎

2009-06-17 11:18:02

Hibernate延遲

2009-09-22 10:57:42

Hibernate專業

2009-09-27 14:24:10

Hibernate配置

2009-06-25 16:52:34

2009-09-21 14:50:01

Hibernate部署

2009-09-24 10:13:05

Hibernate版本

2009-06-12 16:00:13

Session方法Hibernate

2009-09-27 10:10:47

Hibernate處理

2009-09-25 17:19:28

Hibernate持久

2009-09-28 13:43:28

使用Hibernate

2009-09-29 16:48:42

Hibernate J

2009-09-23 10:14:10

Hibernate使用

2009-06-30 16:52:30

DetchedCrit

2009-09-21 17:23:49

Hibernate使用
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人免费小视频 | 在线观看的av | 无毛av| 国产一级片精品 | 伊人久久大香线 | 国产人久久人人人人爽 | 在线视频 中文字幕 | 久久久久久国产精品免费 | 完全免费在线视频 | 国产丝袜一区二区三区免费视频 | 久久精品欧美一区二区三区不卡 | 欧洲尺码日本国产精品 | 国产激情一区二区三区 | 搞av.com| 亚洲激情一区二区三区 | 国产精品国产三级国产aⅴ无密码 | 国产精品一区二区久久 | 国产成在线观看免费视频 | 欧美日本韩国一区二区 | 久色网| 久久久久黄色 | 亚洲国产精品成人 | 精品欧美色视频网站在线观看 | 日本免费黄色一级片 | 亚洲国产精品久久久久秋霞不卡 | 国产精品久久九九 | 亚洲福利在线视频 | 亚洲成人久久久 | 国产精品久久久久久久久久久久久 | 欧美一区日韩一区 | 国产成人精品久久二区二区91 | 国产精品美女久久久久aⅴ国产馆 | 国产精品久久久久久久久久 | 亚洲在线观看视频 | 久久不射电影网 | 蜜桃视频在线观看免费视频网站www | 亚洲精品区 | 日韩视频免费在线 | 在线观看欧美日韩视频 | 国产激情视频在线观看 | 午夜视频网站 |