简单的一表对多表的双向关联
Posted Tidhy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单的一表对多表的双向关联相关的知识,希望对你有一定的参考价值。
多表的xml:
1 <?xml version="1.0" encoding="UTF-8"?> 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 <!-- ■■■■■■■■文件的名字是:Customer.hbn.xml --> 6 <hibernate-mapping> 7 <!-- 配置类和表结构对的映射 --> 8 <!-- 用 一个类,和另一个表关联,Hibernate框架的本意就是这样 --> 9 <class name="com.itheima.domain.Linkman" table="cst_linkman"> 10 <!-- 配置id 见到name属性,JavaBean的属性 见到column属性,是表结构的字段 --> 11 <id name="lkm_id" column="lkm_id"> 12 <!-- 主键的生成策略 ,这个除了natine 就是uuid --> 13 <generator class="natine"></generator> 14 </id> 15 <!-- 配置其他属性 --> 16 <property name="lkm_name" column="lkm_name"></property> 17 <property name="lkm_gender" column="lkm_gender"></property> 18 <property name="lkm_phone" column="lkm_phone"></property> 19 <property name="lkm_mobile" column="lkm_mobile"></property> 20 <property name="lkm_email" column="lkm_email"></property> 21 <property name="lkm_qq" column="lkm_qq"></property> 22 <property name="lkm_position" column="lkm_position"></property> 23 <property name="lkm_memo" column="lkm_memo"></property> 24 25 <!-- 配置多方的xml 多对一的 hello hello 26 name表示的是当前JavaBean中的属性 27 class 当前属性的全路径 28 column外键的字段 29 --> 30 <many-to-one name="customer" class="com.itheima.domain.Customer" column="lkm_cust_id"></many-to-one> 31 </class> 32 33 </hibernate-mapping>
单表的xml:
1 <?xml version="1.0" encoding="UTF-8"?> 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 <!-- ■■■■■■■■文件的名字是:Customer.hbn.xml --> 6 <hibernate-mapping> 7 <!-- 配置类和表结构对的映射 --> 8 <!-- 用 一个类,和另一个表关联,Hibernate框架的本意就是这样 --> 9 <class name="com.itheima.domain.Customer" table="cst_customer"> 10 <!-- 配置id 见到name属性,JavaBean的属性 见到column属性,是表结构的字段 --> 11 <id name="cust_id" column="cust_id"> 12 <!-- 主键的生成策略 --> 13 <generator class="natine"></generator> 14 </id> 15 <!-- 配置其他属性 --> 16 <property name="cust_name" column="cust_name"></property> 17 <property name="cust_user_id" column="cust_user_id"></property> 18 <property name="cust_create_id" column="cust_create_id"></property> 19 <property name="cust_source" column="cust_source"></property> 20 <property name="cust_industry" column="cust_industry"></property> 21 <property name="cust_level" column="cust_level"></property> 22 <property name="cust_linkman" column="cust_linkman"></property> 23 <property name="cust_phone" column="cust_phone"></property> 24 <property name="cust_mobile" column="cust_mobile"></property> 25 26 <!-- 配置一对多 hello hello 27 set标签 name属性:表示集合的名称 28 29 --> 30 <set name="linkmans"> 31 <!-- 需要出现子标签 --> 32 <!-- 外键的字段 --> 33 <key column="cust_user_id"></key> 34 <one-to-many class="com.itheima.domain.Linkman"/> 35 </set> 36 </class> 37 38 </hibernate-mapping>
小小的demo:
1 package com.itheima.test; 2 3 import org.hibernate.Session; 4 import org.hibernate.Transaction; 5 import org.junit.Test; 6 7 import com.itheima.Utils.HibernateUtils; 8 import com.itheima.domain.Customer; 9 import com.itheima.domain.Linkman; 10 11 /** 12 * 测试一对多 13 * @author Administrator 14 * 15 */ 16 @Test 17 public class demo1 { 18 /** 19 * 最麻烦的 双向关联的方式去保存数据 20 */ 21 public void run1(){ 22 Session session = HibernateUtils.getCurrentSession(); 23 Transaction tr = session.beginTransaction(); 24 //保存客户和联系人的数据 25 Customer c1 = new Customer(); 26 c1.setCust_name("美美"); 27 28 //创建两个联系人 29 Linkman l1 = new Linkman(); 30 l1.setLkm_name("熊大"); 31 Linkman l2 = new Linkman(); 32 l2.setLkm_name("熊二"); 33 34 //演示双向关联 35 //单表的设置 36 c1.getLinkmans().add(l1); 37 c1.getLinkmans().add(l2); 38 //多表的设置 39 l1.setCustomer(c1); 40 l2.setCustomer(c1); 41 //保存数据 42 session.save(c1); 43 session.save(l1); 44 session.save(l2); 45 tr.commit(); 46 } 47 }
Hibernate的xml:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibernate-configuration PUBLIC 3 "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 4 "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 5 <!-- ■■■■■■■■文件名字是:hibernate.cfg.xml --> 6 <hibernate-configuration> 7 <!-- 记住,先配置SessionFactory标签,一个数据库对应一个SessionFactory标签 --> 8 <session-factory> 9 <!-- 必须也要配置的参数有5个,4大参数,数据库的方言 --> 10 <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 11 <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_day03</property> 12 <property name="hibernate.connection.username">root</property> 13 <property name="hibernate.connection.password">123</property> 14 <!-- 数据库的方言 --> 15 <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 16 17 <!-- 可选配置 --> 18 19 <!-- 映射配置文件 --> 20 <mapping resource="com/itheima/domain/Customer.hbn.xml"/> 21 <mapping resource="com/itheima/domain/hibernate.cfg.xml"/> 22 </session-factory> 23 24 </hibernate-configuration>
以上是关于简单的一表对多表的双向关联的主要内容,如果未能解决你的问题,请参考以下文章