属性是集合的映射

Set

   HashSet 无序,不重复

List

   有序,可重复

Map

   键值对

   HashMap 无序,不重复(以key为准,看是否重复)

数组:有序、可重复

Bag:无序、可重复。一个大口袋,向里面扔东西。则无序,可重复。

 

通过映射信息,就可以构建出表的结构,而属性是集合的时候,集合本身就对应于一张表,这张表的关系和主表的关系有可能是一对一、一对多、多对多的情况。

所以在映射文件中要反映出集合表的创建情况,即通过映射文件创建出的数据库中的表。

135442_BIJ5_2441574.png

 

 

写下面这些配置文件时,看关联的表该怎样建,那么对应的集合的配置文件就应该怎样写,从这个角度去写配置文件。

<hibernate-mapping package="cn.itcast.e_hbm_collection">
   
   <class name="User" table="user">
      <id name="id">
          <generator></generator>
      </id>
      <property name="name"/>
      
      <!-- addressSet属性,Set集合 
         name:表示的是主表对应的对象的属性
         table属性:集合表的名称
         key子元素:集合外键的列名
         element子元素:存放集合元素的列的信息
         sort属性:"unsorted|natural|comparatorClass"
            默认为:unsorted
         order-by属性:写的是order by 子句,是SQL语句,是操作的集合表。即在查询表的时候在sql语句中加上Order by
            这是在查询数据时指定orderby子句。
      -->
      <set name="addressSet" table="user_addressSet" order-by="address ASC">
          <!--name属性名,因为set也是User的一个属性,table指定创建的表名。address ASC说明是按Address进行Asc升序-->
         <key column="userId"></key>
         <!--指定外键的列名,他会自动将父表的主键,作为自己的外键,我们只需要指定外键的类名。-->
         <element type="string" column="address"></element>
      </set>
  
 
<!-- addressList属性,List集合 
         list-index:用于存放索引的列,用于标示List集合的顺序,所以多出来这么一列来。
 
      -->
      <list name="addressList" table="user_addressList">
         <key column="userId"></key>
         <list-index column="idx"></list-index>
         <element type="string" column="address"></element>
      </list>
   ------------------------------------------------------
   
  <!-- addressArray属性,数组。与List的映射基本一致 -->
      <array name="addressArray" table="user_addressArray">
         <key column="userId"></key>
         <list-index column="idx"></list-index>       <element type="string" column="address"></element>
      </array>
      
      
      
   
      <!-- addressMap属性,Map集合 -->
      <map name="addressMap" table="user_addressMap">
         <key column="userId"></key>
         <map-key type="string" column="key_"></map-key>
            <!--是集合中的Map的key.下面的element是Map的value-->
         <element type="string" column="address"></element>
      </map>
      
      
      
      
      <!-- addressBag属性,Bag集合:无序,可重复。与Set集合的映射基本一致 -->
      <bag name="addressBag" table="user_addressBag">
         <key column="userId"></key>
         <element type="string" column="address"></element>
      </bag>

   <set name="addressSet" table="user_addressSet" order-by="address ASC">
          <key column="userId"></key>
         <element type="string" column="address"></element>
      </set>

使用集合属性时,一定要使用接口,而不能声明为具体的实现类。

因为经过Session操作后,集合就变成了Hibernate自己的集合实现类。

 

 

这是set集合再数据库中查到数据之后再内存中的排序。它比直接在数据库中通过Orderby排序效率要低了。数据库中Order-by是数据库查询之后就是排序的结果。

 

转载于:https://my.oschina.net/u/2441574/blog/513588

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值