Hibernate的Set,List,Map集合映射,数组映射

 在数据库操作中,我们通常会用到多张项关联的表,一个用户通常有多个地址。由此我们便需要用到集合映射。


首先看一下整体结构


Set集合映射

步骤一:创建实体对象类,需要单独建表的属性address用Set<String>集合类型封装。

(此处省略了get() set()方法)


步骤二:配置User.hbm.xml映射表

<hibernate-mapping package="cn.itcast.collection" auto-import="true">
   <class name="User" table="table_user">
      <id name="id" column="user_id"> <!--配置主键-->
        <generator class="native"></generator>   <!-- 主键自增长方式(根据数据库自动匹配)-->
      </id>
   <property name="userName"></property>
   <!-- Set集合 元素无放入顺序,元素不可重复 (注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的)  -->
   <set name="address" table="table_address">   <!--单独映射的table_address表-->
      <key column="uid"></key>    <!-- 外键-->
      <element column="address" type="string"></element>  <!-- 映射表中所存放的address数据-->  
   </set>
</class>
</hibernate-mapping>

步骤三:配置hibernate.cfg.xml

<hibernate-configuration>
	<session-factory>
		<!-- 数据库连接配置 -->
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.url">jdbc:mysql:///user</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">root</property>
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="hibernate.show_sql">true</property> <!-- 控制台打印输出数据库sql语句 -->
        <property name="hibernate.format_sql">true</property>
        
       <property name="hibernate.hbm2ddl.auto">update</property>
        <!--   	<mapping resource="cn/itcast/collection/User.hbm.xml"/>  -->  <!--加载映射文件(这里我们尝试通过类加载,所有这里暂时先注释) -->
	</session-factory>
</hibernate-configuration>


步骤四:测试类 App1 

public class App1 {
    private static SessionFactory sf=null;
      static {
  		sf = new Configuration()
  			.configure()
  			.addClass(User.class)     // 测试时候使用(自动加载映射文件User.hbm.xml)
  			.buildSessionFactory();
  	}
     @Test//test set集合映射
     public void test1(){
         Session session=sf.openSession();
         session.beginTransaction();
         //---保存
         Set<String> addressSet=new HashSet<String>();
         addressSet.add("广州");
         addressSet.add("深圳");
        //用户对象
        User user=new User();
        user.setUserName("张三");
        
        user.setAddress(addressSet);
        //保存
        session.save(user);
        session.getTransaction().commit();
        session.close();
     }
}


List集合映射 

步骤一:同上,实体类对象中address用List集合存储



步骤二:配置User.hbm.xml映射表 list集合有序,所以这里比set集合多了个<list-index>

 <!-- list集合 元素有放入顺序,元素可重复 -->
   <list name="addressList" table="table_addressList">
     <key column="uid"></key>
      <list-index column="idx"></list-index>    
      <element column="address" type="string"></element>
   </list>

步骤三:配置hibernate.cfg.xml,同上。(此处省略)


步骤四:测试




map集合映射

步骤一:同上,实体类对象中address用Map集合存储




步骤二:配置User.hbm.xml映射表 


步骤三:配置hibernate.cfg.xml,同上。(此处省略)


步骤四:测试



数组映射

步骤一:


步骤二:配置User.hbm.xml映射表 



步骤三:配置hibernate.cfg.xml,同上。(此处省略)


步骤四:测试


最后我们查看一下数据库中的表结构~




hibernate自动建表  table_user

       



set集合映射的 table_address

      


List集合映射的 table_addresslist



Map集合映射的table_addressmap



数组映射的table_array




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值