您的位置:首页 > 其它

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

2017-11-19 09:54 411 查看
 在数据库操作中,我们通常会用到多张项关联的表,一个用户通常有多个地址。由此我们便需要用到集合映射。

首先看一下整体结构



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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: