【Hibernate】简单集合映射

来源:互联网 发布:pace.js 在线演示 编辑:程序博客网 时间:2024/06/01 09:24
// javabean设计public class User {private int userId;private String userName;// 一个用户,对应的多个地址private Set<String> address;private List<String> addressList = new ArrayList<String>(); //private String[] addressArray; // 映射方式和list一样     <array name=""></array>private Map<String,String> addressMap = new HashMap<String, String>();}


<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="cn.lfsenior.a_collection"><class name="User" table="t_user"><id name="userId" column="id"><generator class="native"></generator></id><property name="userName"></property><!-- set集合属性的映射name 指定要映射的set集合的属性table 集合属性要映射到的表key  指定集合表(t_address)的外键字段element 指定集合表的其他字段type 元素类型,一定要指定 --> <set name="address" table="t_address"> <key column="uid"></key> <element column="address" type="string"></element> </set>  <!--  list集合映射 list-index  指定的是排序列的名称 (因为要保证list集合的有序)  -->  <list name="addressList" table="t_addressList">    <key column="uid"></key>    <list-index column="idx"></list-index>    <element column="address" type="string"></element>  </list>    <!--   map集合的映射  key  指定外键字段  map-key 指定map的key   element  指定map的value   -->  <map name="addressMap" table="t_addressMap">  <key column="uid"></key>  <map-key column="shortName" type="string" ></map-key>  <element column="address" type="string" ></element>  </map>   </class></hibernate-mapping>



// 保存set@Testpublic void testSaveSet() throws Exception {Session session = sf.openSession();session.beginTransaction();//-- 保存Set<String> addressSet = new HashSet<String>();addressSet.add("广州");addressSet.add("深圳");// 用户对象User user = new User();user.setUserName("Jack");user.setAddress(addressSet);// 保存session.save(user);session.getTransaction().commit();session.close();}// 保存list/map@Testpublic void testSaveList() throws Exception {Session session = sf.openSession();session.beginTransaction();User user = new User();user.setUserName("Tom");//// 用户对象  --  list//user.getAddressList().add("广州");//user.getAddressList().add("深圳");//// 保存//session.save(user);// 用户对象  --  Mapuser.getAddressMap().put("A0001", "广州");user.getAddressMap().put("A0002", "深圳");// 保存session.save(user);session.getTransaction().commit();session.close();}// 获取@Testpublic void testGet() throws Exception {Session session = sf.openSession();session.beginTransaction();// 获取User user = (User) session.get(User.class, 3); // 及时加载System.out.println(user.getUserId());System.out.println(user.getUserName());// 当查询用户,同时可以获取用户关联的list集合的数据 (因为有正确映射)// 当使用到集合数据的使用,才向数据库发送执行的sql语句  (懒加载)System.out.println(user.getAddressList());session.getTransaction().commit();session.close();}