【学习笔记】Hibernate映射List、Map、数组、Set、Bag的具体操作

来源:互联网 发布:金蝶软件在线服务中心 编辑:程序博客网 时间:2024/05/16 04:51

已经给出了所有需要的代码,数据库的配置这些就不给啦

注意:使用集合映射类声明时要注意使用接口而不是具体实现类。因为经过Session操作后,集合就变成了hibernate自己的集合实现类。


实体类:User.java

import java.util.ArrayList;import java.util.HashMap;import java.util.HashSet;import java.util.List;import java.util.Map;import java.util.Set;public class User {private Integer id;private String name;private Set<String> addressSet = new HashSet<String>(); // Set集合private List<String> addressList = new ArrayList<String>(); // List集合private String[] addressArray; // 数组private Map<String, String> addressMap = new HashMap<String, String>();private List<String> addressBag = new ArrayList<String>();public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Set<String> getAddressSet() {return addressSet;}public void setAddressSet(Set<String> addressSet) {this.addressSet = addressSet;}public List<String> getAddressList() {return addressList;}public void setAddressList(List<String> addressList) {this.addressList = addressList;}public String[] getAddressArray() {return addressArray;}public void setAddressArray(String[] addressArray) {this.addressArray = addressArray;}public Map<String, String> getAddressMap() {return addressMap;}public void setAddressMap(Map<String, String> addressMap) {this.addressMap = addressMap;}public List<String> getAddressBag() {return addressBag;}public void setAddressBag(List<String> addressBag) {this.addressBag = addressBag;}}





映射文件:User.hbm.xml

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="cn.itcast.e_hbm_collection"><class name="User" table="user"><id name="id">        <generator class="native"></generator></id><property name="name"/><!-- addressSet属性,Set集合 table属性:集合表的名称key子元素:集合外键的列名element子元素:存放集合元素的列的信息sort属性:"unsorted|natural|comparatorClass"默认为:unsortedorder-by属性:写的是order by 子句,是SQL语句,是操作的集合表。这是在查询数据时指定orderby子句。--><set name="addressSet" table="user_addressSet" order-by="address ASC"><key column="userId"></key><element type="string" column="address"></element></set><!-- addressList属性,List集合 list-index:用于存放索引的列--><list name="addressList" table="user_addressList"><key column="userId"></key><list-index column="idx"></list-index><element type="string" column="address"></element></list><!-- addressArray属性,数组。与List的映射基本一致 --><array name="addressArray" table="user_addressArray"><key column="userId"></key><list-index column="idx"></list-index><element type="string" column="address"></element></array><!-- addressMap属性,Map集合 --><map name="addressMap" table="user_addressMap"><key column="userId"></key><map-key type="string" column="key_"></map-key><element type="string" column="address"></element></map><!-- addressBag属性,Bag集合:无序,可重复。与Set集合的映射基本一致 --><bag name="addressBag" table="user_addressBag"><key column="userId"></key><element type="string" column="address"></element></bag></class></hibernate-mapping>


测试类:App.java

import java.util.Arrays;import java.util.HashSet;import java.util.Set;import java.util.TreeSet;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;import org.junit.Test;public class App {private static SessionFactory sessionFactory = new Configuration()//.configure()//.addClass(User.class)// 添加Hibernate实体类(加载对应的映射文件).buildSessionFactory();@Testpublic void testSave() throws Exception {Session session = sessionFactory.openSession();session.beginTransaction();// --------------------------------------------// 构建对象User user = new User();user.setName("张天");// >> Set集合user.setAddressSet(new TreeSet<String>()); // 当设置了sort属性时,就要使用SortedSet类型user.getAddressSet().add("2岭南");user.getAddressSet().add("1小新塘");// >> List集合user.getAddressList().add("岭南");user.getAddressList().add("小新塘");user.getAddressList().add("小新塘");// >> 数组user.setAddressArray(new String[] { "岭南", "小新塘" });// >> Map集合user.getAddressMap().put("公司", "岭南");user.getAddressMap().put("家庭", "小新塘");// >> Bag集合user.getAddressBag().add("岭南");user.getAddressBag().add("小新塘");user.getAddressBag().add("小新塘");// 保存session.save(user);// --------------------------------------------session.getTransaction().commit();session.close();}@Testpublic void testGet() throws Exception {Session session = sessionFactory.openSession();session.beginTransaction();// --------------------------------------------// 获取数据User user = (User) session.get(User.class, 9);// 显示信息System.out.println(user.getName());System.out.println(user.getAddressSet());System.out.println(user.getAddressList());System.out.println(Arrays.toString(user.getAddressArray()));System.out.println(user.getAddressMap());System.out.println(user.getAddressBag());// --------------------------------------------session.getTransaction().commit();session.close();}}



1 0
原创粉丝点击