Java的Hibernate框架中集合类数据结构的映射编写课案_第1页
Java的Hibernate框架中集合类数据结构的映射编写课案_第2页
Java的Hibernate框架中集合类数据结构的映射编写课案_第3页
Java的Hibernate框架中集合类数据结构的映射编写课案_第4页
Java的Hibernate框架中集合类数据结构的映射编写课案_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java 的 Hibernate 框架中集合类数据结构的映射编写教程Hibernate 可以将 Java 中几个内置的集合结构映射为数据库使用的关系模型 , 下 面我们就来看一下 Java 的 Hibernate 框架中集合类数据结构的映射编写教程 :一、集合映射1. 集合小介集合映射也是基本的映射,但在开发过程中不会经常用到,所以不需要深刻了解,只需要理解基本的 使用方法即可, 等在开发过程中遇到了这种问题时能够查询到解决方法就可以了。 对应集合映射它其 实是指将 java 中的集合映射到对应的表中,是一种集合对象的映射,在 java 中有四种类型的集合, 分别是 Set、 Map、List

2、 还有普通的数组,它们之间有很大的区别:(1) Set,不可以有重复的对象,对象是无序的;( 2 ) List ,可以与重复的对象,对象之间有顺序;(3) Map它是键值成对岀现的;( 4)数组,可以重复,对象之间有顺序。它们之间的区别决定了在开发时使用哪种集合,通常在开发时会使用Set,它内部的对象是无需的,并可以使用迭代器获取内部对象。这几种集合想要映射到相应的关系模型的话就必须使用Hibernate提供的映射标签, 、 、 。2. 映射小介 继续讨论集合映射的关系模型,集合映射是指一个对象对应着另一个对象集合,在保存时Hibernate会把数据集合保存到相应的表中,并按照自己分配的 id

3、 把数据保存到数据表中,如果单独为集合分 配了新表,那么会将 id 分配给集合表的 id ,那么对应的关系表如下图:t collection mapping+jId*5Name*32Zhangsan3tsptvalues+JSetvalueSetlPi / /SeListd*Li&tvalueListindex1/LfstlPOp/Li曲2MapidMapkey*3Mapvaluel*3 /KIPgJKRV2pTarrayvalue*1Array id*JArrayalueArray index+;7Arrayli3Dp2Array?*323.类文件集合映射是如何通过代码实现的,接下来具体分析

4、。这里把所有的集合封存到一个类中,这个类我们称之为CollectionMapping.java,那么它对应的内部代码如下:package com.hiber nate;import java.util.List;import java.util.Map;import java.util.Set;SuppressWar nin gs(rawtypes)public class Collecti onM app ing /idprivate int id;45678910111213141516171819202122232425public int getld() return idpublic

5、 void setId(i nt id) this.id = id;/名字private Stri ng n ame;public Stri ng getName() return n ame;public void setName(Stri ng n ame) this .n ame = n ame;/Set集合private Set setValues;public Set getSetValues() retur n setValues;public void setSetValues(Set setValues) this.setValues = setValues;/List 集合r

6、ivate List listValues;26public List getListValues() return listValues;public void setListValues(List listValues) this .l istValues = listValues;/数组集合private Strin g arrayValues;public Stri ng getArrayValues() retur n arrayValues;public void setArrayValues(Stri ng arrayValues) this.arrayValues = arra

7、yValues;/Map集合private Map mapValues;public Map getMapValues() retur n mapValues;public void setMapValues(Map mapValues) this.mapValues = mapValues;272829303132333435363738394041424344454647484950515253545556575859606162631234567891011121314该类中封装了几种常用的集合,想要转化为关系模型,就必须来看下文的映射。4.集合映射集合的映射其实相当的简单,只需要添加对

8、应的集合标签,Hibernate分别提供了集合标签set、map list、varray,通过使用集中标签来将集合映射为对应的关系表,另外通过添加key标签来实现表外键的关联,其它的属性通过使用 velement来添加。Collectio nMappi ng.hbm.xmlvhibernate-mappi ngvclass n ame=com.hiber nate.Collectio nM appi ng table=t_collectio n_ mappi ngvproperty n ame=n ame/veleme nt type=stri ng colum n=set_valuevlis

9、t n ame=listValues table=t_list_valuesvlist-index column=list index/velement type=string column=list_value/v/listvmap-key type=stri ng colum n= map_key/veleme nt type=stri ng colu mn=map_value/varray n ame=arrayValues table=t_array_valueveleme nt type=stri ng colu mn=array_value/v/hiber nate-mappi n

10、g151617181920212223242526272829303132需要注意的是list标签和array标签,这两种集合内的对象是有顺序的,所以在添加映射标签时需要使用list-index 或者index标签来标明对象的顺序,而且在添加子标签时一定要按照顺序添加,也就是说先添加key标签,后添加vlist-index标签,最后添加velement标签,否则的话会岀现如下错误:The content of eleme nt type list must match (meta*,subselect?,cache?,s yn chr oni ze*,co mme nt?,key,(i nde

11、x|list-i ndex),(eleme nt|o ne-to-ma ny|ma ny-to-ma ny|composite-eleme nt|ma ny- to-a ny),loader?,sql-i nsert?,sql-update?,sql-delete?,sql-delete-all?,filter*).5.关系模型将配置好的对象模型转化为相应的关系模型,生成的SQL语句如下:alter table t_array_value drop foreig nkey FK2E0DD0C067676B68alter table t_list_values drop foreig n key

12、 FKE01EC98BF4FCB03alter table t_map_values drop foreig n key FKD169BA107402B585alter table t_set_values drop foreig n key FK7BB8D04A7E79F8BFdrop table if exists t_array_valuedrop table if exists t_collecti on _mapp ingdrop table if exists t_list_valuesdrop table if exists t_map_valuesdrop table if e

13、xists t_set_valuescreate table t_array_value (array_id in teger not n ull, array_value varchar(255).array_ in dex in teger not n ull, primary key (array_id, arra y_in dex)10create table t_collectio n_ mappi ng (id in ull auto_ in creme nt, n amevarchar(255), primary key (id) |create table t_list_val

14、ues (list_id in teger not n ull, list_value varchar(255),list_ in dex in teger not n ull, primary key (list_id,list_i ndex)13create table t_map_values (map_id in teger not n ull, map_value varchar(255), map_key11121515161718+ -1 1-FieldV H_ r_a._Tpe1VNull11Kev !Default !T11=T1TFNO-|pm :NULL:11VV1HYE

15、S11!NULL!11arra5F_in dex1 IintCll1 tNO11PHI !NULL!3 rows in set Extra !111111111 Field ! TypeL Jl. 一 一 fr一一一 -1:Null ! Kev ! Default !一 - jL. 一 - - Jk _ 一 一 JI命Extra11_._._._._. J:1 n1 id11 name 1|T1 int1 vai*c har255FI NO!:VES 1厂1 PBI 11|11厂*! NULL!1 NULL:Alito _incre men t !112 rows in set varchar

16、(255) not n ull, primary key (map_id, map_key)create table t_set_values (set_id in teger not n ull, set_value varchar(255)alter table t_array_value add in dex FK2E0DD0C067676B68 (array_id), add con strai ntFK2E0DD0C067676B68 foreig n key (array_id) refere nces t_collection_mappi ng (id)alter table t

17、_list_values add in dex FKE01EC98BF4FCB03 (list_id), add con strai ntFKE01EC98BF4FCB03 foreig n key (list_id) refere nces t_collection_mappi ng (id) alter table t_map_values add in dex FKD169BA107402B585 (map_id), add con strai ntFKD169BA107402B585 foreig n key (map_id) refere nces t_collection_mapp

18、i ng (id)alter table t_set_values add in dex FK7BB8D04A7E79F8BF (set_id), add con strai ntFK7BB8D04A7E79F8BF foreig n key (set_id) refere nces t_collection_mappi ng (id)生成的对应的数据库视图如下:mysql desc;rk9sql desc t_co 1 lection_mapping1 list_id:int115:NO! PHII1NULLHtNt! list._value 1! varchar:VESI INULL1 1

19、! list_index 1:HO PBI11NULL1 1V 11! FieldH- r*descvalues;4 罟_:Type! Null ! Key ! DefauIt ! Extpa ! ;+411 士 -Field11_ JL _Type! Null11Ke#11_ JL _DefaultT r1訴id1 IIint! NOVPfil11NULL1 lPtap_ualue11uapchar! VES1111NULLi i+ -nap_Jey二 1. 1 11uai*cliar desc t_nap_ualues;1 +- +3 rows in set I Ex七!*+q-t+I N

20、ull i Key ! Default ! Extra Idesc t_set_ualues;+H|I ii吝e七_id! NO! NUL ! NULLi i11i i_value! uarchar:FieldI TypeB Mi_ “ JL-Irn t_):, /oTog usim. ne t znung xinx二、数据操作1.数据写入写入数据操作,将数据写入时需要注意创建数据对象,其中的List、Set、Map需要创建数据对象,将数据对象写入到数据库中,因为它们三者都是对象接口,所以需要创建一个对象,将对象写入到数 据库中,具体代码如下:SuppressWar nin gs( un ch

21、ecked, rawtypes ) public void testsave() Sessi on sessi on=n ull;trysessio n=HibernateUtils.getSessio n();sessi on .beg in Tra nsacti on();Collectio nMappi ng cm=new Collectio nMappi ng();cm.setName(zha ngsa n);Set set=new HashSet();set.add(a);679101112131415161718192021222324252627set.add(b);cm.set

22、SetValues(set);List list=new ArrayList();list.add(list1);list.add(list2);cm.setListValues(list);Strin g str= new Strin garray1,array2;cm.setArrayValues(str);Map map=new HashMap();map.put(k1,v1);map.put(k2, v2);cm.setMapValues(map);sessi on. save(cm); sessio n.getTra nsactio n( ).commit();catch(Excep

23、ti on e)e.pr in tStackTrace();sessi on. getTra nsacti on(). rollback();fin allyHiber nateUtils.closeSessio n(sessio n);2929303132333435363738生成的SQL语句如下:Hiber nate: in sert into t_collectio n_ mappi ng (n ame) values (?)Hiber nate: in sert into t_set_values (set_id, set_value) values (?, ?)Hiber nate

24、: in sert into t_set_values (set_id, set_value) values (?, ?)Hibernate:insertintot_list_values(list_id,list_index,list_value)values (?,?, ?)Hibernate:insertintot_list_values(list_id,list_index,list_value)values (?,?, ?)Hiber nate: in sert into t_map_values (map_id, map_key, map_value) values (?, ?,

25、?)Hibernate:Hiber nate: insert into t_map_values (map_id, map_key, map_value) values (?, ?, ?)in sert into t_array_value (array_id, array_i ndex, array_value) values57(?, ?, ?)Hiber nate: in sert into t_array_value (array_id, arrayndex, array_value) values(?, ?, ?)892.加载数据加载数据的方法很简单,它会将表中的数据按照集合加载到对

26、象中,然后只需要获取相应的对象集合即可。public void testload()Sessi on sessi on=n ull;sessio n=Hiber nateUtils.getSessio n();sessi on .beg in Tra nsacti on();Collecti onM app ing cm=(Collecti on Mapp in g)sessi on.lo ad(Collecti on Mapp in g.class, 1);System.out.pri ntl n( cm. name= +cm.getName();System.out.pr in tl n(

27、 cm.list= +cm.getListValues();System.out.pri ntl n( cm.map= +cm.getMapValues();System.out.pri ntl n(cm.array= +cm.getArrayValues();System.out.pri ntl n( cm.set= +cm.getSetValues();sessio n.getTra nsactio n( ).commit();10catch(Excepti on e)11e.pri ntStackTrace();12sessio n.getTra nsactio n( ).rollbac

28、k();fin allyHibernateUtils.closeSessio n(sessio n);13151716171819202122生成的结果:1Hiber nate: select collecti onO _.id as id0_0_, collectio nO name as n ame0_0_ fromt_collectio n_ mappi ng collecti on0_ where collectio n0 _.id=?2 - - - -Hiber nate: select arrayvalue0_.array_id as array1_0_, arrayvalue0_

29、.array_value as3array2_0_, arrayvalue0_.array_indexas array3_0_ from t_array_value arrayvalue0_ wherearrayvalue0_.array_id=?5cm.n ame= zha ngsa nHibernate: select listvalues0 .list id as list1 0 , listvalues0 .list value as6i i_list2_0_, listvalues0_.list_i ndex as list3_0_ from t_list_values listva

30、lues0_ where7listvalues0.list id=?8cm.list= list1, lis t29 Hiber nate: select mapvalues0_.mapd as map1_0_, mapvalues0_.map_value as map2_0_,10mapvalues0_.map_key as map3_0_ from t_map_values mapvalues0_ wheremapvaluesO.map id=?cm.map= k1=v1, k2=v2cm.array= Ljava .lan g.Stri ng;758d8478Hibernate: select setvalues0_.set_id as set1_0_, setvalues0_.set_value as set2_0_ fromt_set_values setvaluesO_ where setvaluesO_.set_id=?cm.set= b, a三、总结Hibernate 可以持久化以下 java 集合的实例,包括 java.util.Map, java.util.Set, java.u

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论