集合映射:
常用的集合映射的元素可以分为以下几种:
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);
}