Hibernate-集合映射

来源:互联网 发布:thomson数据库 编辑:程序博客网 时间:2024/06/05 14:17

集合映射:

常用的集合映射的元素可以分为以下几种:

list: 用于映射list集合属性

set:用于映射set集合属性

map:用于映射map集合属性

在User.java中设置如下属性,并建立getter和setter方法

private int id;private String userName;private Set<String> address;private List<String> addressList;private Map<String,String> addressMap;

然后在user.hbm,xml设置对应的映射属性

<?xml version="1.0" encoding="UTF-8"?><!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.qblank.hibernate.entity">      <class name="User" table="t_user">          <id name="id" column="id">        <generator class="sequence">        <param name="sequence">t_user_seq</param>        </generator>        </id>                <property name="userName" column="usename" type="string"></property>                <!-- Set集合映射 -->        <set name="address" table="t_address">        <!-- 指定集合表中的外键字段 --><key column="`uid`"></key><!-- element指定集合表的其他字段 --><element column="address" type="string"></element>        </set>                <!-- List集合映射 -->        <list name="addressList" table="t_addressList">        <!-- 集合外键的列名  当占用数据库中的关键字时用``声明 -->        <key column="`userid`"></key>        <!-- List集合   list-index 用于存放索引的列 -->        <list-index column="lis"></list-index>        <!-- element指定集合表的其他字段 -->        <element column="address" type="string"></element>        </list>                <!-- Map集合映射 -->        <map name="addressMap" table="t_addressMap">        <!-- 指定外键的字段 -->        <key column="`uid`"></key>        <!-- map-key 指定map中的key -->        <map-key type="string" column="addressKey"></map-key>        <!-- element指定集合表的其他字段 -->        <element column="address" type="string"></element>        </map>            </class>  </hibernate-mapping>

table属性:  集合表的名字

key属性: 集合外键的列名

element属性:集合元素列的信息


接下来我们写个测试类分别对这些集合映射进行测试

先写个HibernateUtil.java工具类获取session对象

public class HibernateUtil {private static Configuration config;private static SessionFactory factory;//ThreadLocal维护了一个缓存,放置当前配对的session对象//private static ThreadLocal<Session> local = new ThreadLocal<Session>();static{config = new Configuration();//加载文件config.configure("hibernate.cfg.xml");//创建session工厂对象factory = config.buildSessionFactory();}public static Session getSession(){Session session = factory.getCurrentSession();return session;}}


/** * 添加信息 * @param user */public static void save(User user){Session session = HibernateUtil.getSession();try {trans = session.beginTransaction();session.save(user);trans.commit();} catch (HibernateException e) {e.printStackTrace();trans.rollback();}finally{}}


Set集合

private static void mappingSet() {User user = new User();user.setUserName("evan");Set<String> set = new HashSet<>();set.add("湖南");set.add("上海");user.setAddress(set);//添加用户save(user);}
运行结果如下:



List集合

/** * List集合的映射 */public static void mappingList(){User user = new User();user.setUserName("evan");List<String> list = new ArrayList<>();list.add("湖南");list.add("北京");user.setAddressList(list);save(user);}

运行结果如下:



Map集合

/** * Map集合映射 */public static void mappingMap(){User user = new User();user.setUserName("evan_qb");Map<String,String> map = new HashMap<>();map.put("1", "湖南");map.put("2", "湖北");user.setAddressMap(map);save(user);}


运行结果如下:








原创粉丝点击