hibernate中的集合映射详细解析

来源:互联网 发布:新开淘宝店物流 编辑:程序博客网 时间:2024/06/04 01:00

1.hibernate.cfg.xml配置

[html] view plain copy
  1. <!DOCTYPE hibernate-configuration PUBLIC  
  2.     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
  3.     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">  
  4.   
  5. <hibernate-configuration>  
  6.     <!-- 通常,一个session-factory节点代表一个数据库 -->  
  7.     <session-factory>  
  8.         <!-- 1.数据库连接配置 -->  
  9.         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>  
  10.         <property name="hibernate.connection.url">jdbc:mysql:///hib-demo</property>  
  11.         <property name="hibernate.connection.username">root</property>  
  12.         <property name="hibernate.connection.password">123456</property>  
  13.         <!--数据库方法配置,hibernate在运行的时候,会根据不同的方言生成符合当前数据库语法的sql  -->  
  14.         <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>  
  15.           
  16.         <!-- 2.其他相关配置 -->  
  17.            <!--2.1显示hibernate在运行的时候执行的sql语句  -->  
  18.         <property name="hibernate.show_sql">true</property>  
  19.            <!-- 2.2格式化sql   
  20.         <property name="hibernate.format_sql">true</property>-->  
  21.         <!--    2.3自动建表  -->  
  22.         <property name="hibernate.hbm2ddl.auto">update</property>  
  23.         <!-- 3.加载所有映射   
  24.         <mapping resource="cn/itcast/a_hello/Employee.hbm.xml"/>-->  
  25.     </session-factory>  
  26. </hibernate-configuration>  

2.User对象


[java] view plain copy
  1. package cn.itcast.a_collection;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import java.util.List;  
  6. import java.util.Map;  
  7. import java.util.Set;  
  8.   
  9. public class User {  
  10.     private int userId;  
  11.     private String userName;  
  12.     private Set<String> address;  
  13.     private List<String> addressList=new ArrayList<String>();  
  14.     private Map<String,String> addressMap=new HashMap<String,String>();  
  15.       
  16.       
  17.     public Map<String, String> getAddressMap() {  
  18.         return addressMap;  
  19.     }  
  20.     public void setAddressMap(Map<String, String> addressMap) {  
  21.         this.addressMap = addressMap;  
  22.     }  
  23.     public List<String> getAddressList() {  
  24.         return addressList;  
  25.     }  
  26.     public void setAddressList(List<String> addressList) {  
  27.         this.addressList = addressList;  
  28.     }  
  29.     public int getUserId() {  
  30.         return userId;  
  31.     }  
  32.     public void setUserId(int userId) {  
  33.         this.userId = userId;  
  34.     }  
  35.     public String getUserName() {  
  36.         return userName;  
  37.     }  
  38.     public void setUserName(String userName) {  
  39.         this.userName = userName;  
  40.     }  
  41.     public Set<String> getAddress() {  
  42.         return address;  
  43.     }  
  44.     public void setAddress(Set<String> address) {  
  45.         this.address = address;  
  46.     }  
  47.       
  48.       
  49.   
  50. }  

3.User.hbm.xml


[html] view plain copy
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC   
  3.     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  4.     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">  
  5.   
  6. <!--   
  7.   
  8.   This mapping demonstrates content-based discrimination for the  
  9.   table-per-hierarchy mapping strategy, using a formula  
  10.   discriminator.  
  11.   
  12. -->  
  13. <!--映射文件:映射一个实体类对象,描述一个对象最终可以直接保存对象数据到数据库中  -->  
  14. <!-- package:要映射的对象所在的包(可选,如果不指定,此文件下所有的类都要指定全路径)   
  15.     auto-import 默认为true,在写HQL的时候自动导入包名  
  16.             如果指定为false,在写HQL的时候必须要写上类的全名-->  
  17. <hibernate-mapping package="cn.itcast.a_collection">  
  18.     <class name="User" table="t_user">  
  19.          <id name="userId" column="id">  
  20.             <generator class="native"></generator>  
  21.          </id>  
  22.          <property name="userName"></property>  
  23.            
  24.          <!-- set集合属性的映射  
  25.               name 指定要映射的set集合的属性  
  26.               table 集合属性要映射到的表  
  27.               key 指定集合表t_address的外键字段  
  28.               element指定集合表的其他字段  
  29.               type元素类型一定要指定-->  
  30.          <set name="address" table="t_address">  
  31.              <key column="uid"></key>  
  32.              <element column="address" type="string"></element>  
  33.          </set>  
  34.          <!--list集合属性的映射  
  35.               list-index 指定的是排序列的名称,因为要保证list集合的有序 -->  
  36.          <list name="addressList" table="t_addressList">  
  37.              <key column="uid"></key>  
  38.              <list-index column="idx"></list-index>  
  39.               <element column="address" type="string"></element>  
  40.          </list>  
  41.          <!-- Map集合属性的映射  
  42.                key指定外键字段  
  43.                map-key 指定 map的key  
  44.                element 指定map的value-->  
  45.          <map name="addressMap" table="t_addressMap">  
  46.              <key column="uid"></key>  
  47.              <map-key  column="shortName" type="string"></map-key>  
  48.              <element column="address" type="string"></element>  
  49.            
  50.          </map>  
  51.            
  52.     </class>  
  53.       
  54.   
  55. </hibernate-mapping>  

4.Junit测试


[java] view plain copy
  1. package cn.itcast.a_collection;  
  2.   
  3. import java.util.HashSet;  
  4. import java.util.Set;  
  5.   
  6. import org.hibernate.SessionFactory;  
  7. import org.hibernate.Transaction;  
  8. import org.hibernate.cfg.Configuration;  
  9. import org.hibernate.classic.Session;  
  10. import org.junit.Test;  
  11.   
  12. public class App {  
  13.     private static SessionFactory sf;  
  14.     static{  
  15.         sf=new Configuration()  
  16.         .configure()  
  17.         .addClass(User.class)  
  18.         .buildSessionFactory();  
  19.     }  
  20.       
  21.     //保存set  
  22.     @Test  
  23.     public void testSaveSet() throws Exception{  
  24.         Session session=sf.openSession();  
  25.         Transaction tx=session.beginTransaction();  
  26.           
  27.         Set<String> addressSet=new HashSet<String>();  
  28.         addressSet.add("广州");  
  29.         addressSet.add("深圳");  
  30.           
  31.         User user=new User();  
  32.         user.setUserName("Jack");  
  33.         user.setAddress(addressSet);  
  34.           
  35.         session.save(user);  
  36.           
  37.         tx.commit();  
  38.         session.close();  
  39.     }  
  40.     //保存list  
  41.     @Test  
  42.     public void testSaveList() throws Exception{  
  43.         Session session=sf.openSession();  
  44.         Transaction tx=session.beginTransaction();  
  45.           
  46.         User user=new User();  
  47.         user.setUserName("Tom");  
  48.         /*user.getAddressList().add("广州"); 
  49.         user.getAddressList().add("深圳");     
  50.         session.save(user);*/  
  51.           
  52.         user.getAddressMap().put("A0001""广州");  
  53.         user.getAddressMap().put("A0002""深圳");  
  54.         session.save(user);  
  55.         tx.commit();  
  56.         session.close();  
  57.     }  
  58.   

  1. }  
-------------------------------------转自http://blog.csdn.net/miachen520/article/details/52165968------------------------

0 0
原创粉丝点击