Java的Hibernate框架中集合类数据结构的映射编写教程

论坛 期权论坛 脚本     
niminba   2021-5-23 02:56   1514   0

一、集合映射

1.集合小介
集合映射也是基本的映射,但在开发过程中不会经常用到,所以不需要深刻了解,只需要理解基本的使用方法即可,等在开发过程中遇到了这种问题时能够查询到解决方法就可以了。对应集合映射它其实是指将java中的集合映射到对应的表中,是一种集合对象的映射,在java中有四种类型的集合,分别是Set、Map、List还有普通的数组,它们之间有很大的区别:
(1)Set,不可以有重复的对象,对象是无序的;
(2)List,可以与重复的对象,对象之间有顺序;
(3)Map,它是键值成对出现的;
(4)数组,可以重复,对象之间有顺序。
它们之间的区别决定了在开发时使用哪种集合,通常在开发时会使用Set,它内部的对象是无需的,并可以使用迭代器获取内部对象。这几种集合想要映射到相应的关系模型的话就必须使用Hibernate提供的映射标签,<set>、<list>、<map>、<array>。

2.映射小介
继续讨论集合映射的关系模型,集合映射是指一个对象对应着另一个对象集合,在保存时Hibernate会把数据集合保存到相应的表中,并按照自己分配的id把数据保存到数据表中,如果单独为集合分配了新表,那么会将id分配给集合表的id,那么对应的关系表如下图:

201671294237228.png (640×454)

3.类文件
集合映射是如何通过代码实现的,接下来具体分析。这里把所有的集合封存到一个类中,这个类我们称之为CollectionMapping.java,那么它对应的内部代码如下:

package com.hibernate; 
 
import java.util.List; 
import java.util.Map; 
import java.util.Set; 
 
@SuppressWarnings("rawtypes") 
public class CollectionMapping { 
   
  //id 
  private int id; 
  public int getId() { 
    return id; 
  } 
  public void setId(int id) { 
    this.id = id; 
  } 
   
  //名字 
  private String name; 
  public String getName() { 
    return name; 
  } 
  public void setName(String name) { 
    this.name = name; 
  } 
   
  //Set集合 
  private Set setValues; 
  public Set getSetValues() { 
    return setValues; 
  } 
  public void setSetValues(Set setValues) { 
    this.setValues = setValues; 
  } 
   
  //List集合 
  private List listValues; 
  public List getListValues() { 
    return listValues; 
  } 
  public void setListValues(List listValues) { 
    this.listValues = listValues; 
  } 
   
  //数组集合 
  private String[] arrayValues; 
  public String[] getArrayValues() { 
    return arrayValues; 
  } 
  public void setArrayValues(String[] arrayValues) { 
    this.arrayValues = arrayValues; 
  } 
   
  //Map集合 
  private Map mapValues; 
  public Map getMapValues() { 
    return mapValues; 
  } 
  public void setMapValues(Map mapValues) { 
    this.mapValues = mapValues; 
  } 
} 

该类中封装了几种常用的集合,想要转化为关系模型,就必须来看下文的映射。

4.集合映射
集合的映射其实相当的简单,只需要添加对应的集合标签,Hibernate分别提供了集合标签<set>、<map>、<list>、<array>,通过使用集中标签来将集合映射为对应的关系表,另外通过添加<key>标签来实现表外键的关联,其它的属性通过使用<element>来添加。
CollectionMapping.hbm.xml

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC  
  "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
  <class name="com.hibernate.CollectionMapping" table="t_collection_mapping"> 
    <id name="id"> 
      <generator class="native"/> 
    </id> 
    <property name="name"/> 
     
    <set name="setValues" table="t_set_values"> 
      <key column="set_id"></key> 
      <element type="string" column="set_value"></element> 
    </set> 
    <list name="listValues" table="t_list_values"> 
      <key column="list_id"/> 
      <list-index column="list_index"/> 
      <element type="string" column="list_value"/> 
    </list> 
    <map name="mapValues" table="t_map_values"> 
      <key column="map_id"/> 
      <map-key type="string" column="map_key"/> 
      <element type="string" column="map_value"/> 
    </map> 
    <array name="arrayValues" table="t_array_value"> 
      <key column="array_id"/>      
      <index column="array_index" type="integer"></index> 
      <element type="string" column="array_value"/> 
    </array> 
  </class> 
</hibernate-mapping> 

需要注意的是list标签和array标签,这两种集合内的对象是有顺序的,所以在添加B[K [\^OHK\^U[Y\JNB[K [HK[Y\JNBB[[[ K[Z] NBX^[J^BK[XX NB[[[ KX NBY[[^BX\]U][T[[NBHBHBB OB ]B$9; B]\HHBH\H\BX\]NXX[Y\Y X[[YH\[YLX[\[X[\HX[YIBX\]NX\^][YL\^W\\^LW\^][YL\^W[YH\\^L\^][YL\^W^\\^L^W[YH\^][YL\H\^][YL\^WIB[YOH[[BX\]NX\[Y\\\\W\[Y\\[YH\\\[Y\\^\\\[Y\\[Y\\H\[Y\\IB\H\K\HBX\]NXX\[Y\X\\X\ WX\[Y\X\[YH\X\ X\[Y\X\^H\X\ \[Y\X\[Y\\HX\[Y\X\IBX\HO]K]HB\^OH]K[[  BX\]NX[Y\\ W[Y\[YH\ ][Y\[Y\\H[Y\IBHWHB OB ]B B."x.B X\]yc y.ayc%."]zf"9k/9c!y]K][ X\ ]K][ ]K][ YX\ ]K][ Y ]K][ \9d9.ey y.ayk/d/9l9/o]:f"9g 9ioy`"y"xg]K][ X[% !Z]K][ \lg)oY+byiy y.ax. y.ayc%f";fi9.f"9yc%.#z fy.eyk/9`:fa9b9+bJ9/[\9n)iy/nn`9"y y.ayc%f";kfay."`!:!"y\X\ \ YSX\ YT9d\^S\9+byymg8iyg,:+#9k. 9.*c!yd*"9lg)#9on]ygby..yc.g+\ 9% !S\ #9.#z +\X\ YT9% !H\^S\kf9g*:/*fd9b-c+*9/h9.#y`d&{X\]y/h9X\ 9d\9k/h$9.k9al\ 9% !H\9k`9.*9/h9n,*9c/oyg9:+#9...)byzghcg*X\]y.+yk.ac`9"y]zf"9yc"9...k:/oy. 9.)y`9"y"yn"9X\\\^\`"y. 9.*^Id ^ $9.. :/y.""99+.:jb9%8%9..b9o%{fi9odX\]z+﹦9%b(:fi9. :(c9#9c',:+c9l9kf" ..,I^Id9am.`e9$89k"y.(9g#:/9/cb;b*"9a`% !yi)+8i)-ke&l9kn"yb9k#y`..c9o%x9c 9zghk. 9k&i&k&al#9b*"9$9!)iz+#:f"9.gb,9d#9-b9) :fa9&i9/h9n#9&[XQ^9../h9] b&.#9/h9on`9"yke#..[[HYH8Y(9l!9k.by..!e+fi9k+:jb9(8." Y"y 9ioy)j9Y 9m8f.Y:a#ya`/;.g"yo%yke#9fi9.#yc.by.. X\]y)9ya#y(c8od":(.y#X\]yl!/&ab9k9m9g,9fi;`&/ 9.*[HHSUH {m9.*f";d#aza9b&m9.*f"89fiYgn.9/cb9

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1060120
帖子:212021
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP