Hibernate-集合映射

集合映射:

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

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);
}


运行结果如下:








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值