码迷,mamicode.com
首页 > Web开发 > 详细

Hibernate5.x表与表之间的关系操作代码实现

时间:2017-09-24 16:24:00      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:src   分享   设置   enc   添加   images   环境   代码实现   custom   

一、一对多操作(客户和联系人)

1、一对多基本实现步骤

第一步 创建两个实体类,客户和联系人

技术分享

技术分享

第二步 让两个实体类之间互相表示

(1)在客户实体类里面表示多个联系人

- 一个客户里面有多个联系人

技术分享

(2)在联系人实体类里面表示所属客户

- 一个联系人只能属于一个客户

技术分享

第三步 配置映射关系

(1)一般一个实体类对应一个映射文件

(2)把映射最基本配置完成

(3)在映射文件中,配置一对多关系

- 在客户映射文件中,表示所有联系人

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 
 3 <!-- hibernate入门 搭建hibernate环境 第一步 导入hibernate的jar包 -->
 4 <!-- 映射配置文件dtd约束 -->
 5 <!DOCTYPE hibernate-mapping PUBLIC 
 6     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 7     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 8     <hibernate-mapping>
 9     <class name="com.cn.entity.Custom" table="t_custom">
10     <id name="cid" column="cid">
11     <generator class="native"></generator>
12     </id>
13     <property name="custName" column="custName"></property>
14     <property name="custLevel" column="custLevel"></property>
15     <property name="custSource" column="custSource"></property>
16     <property name="custPhone" column="custPhone"></property>
17     <property name="Mobile" column="Mobile"></property>
18     <!-- 在客户映射文件中,表示所有联系人,使用set标签表示所有联系人
19     set标签里面有name属性:属性值写在客户实体类里面表示联系人的set集合名称 -->
20     <!-- cascade属性:级联添加 级联删除 -->
21     <!-- batch-size:值越大发送语句越少 -->
22     <set name="setLinkMan" cascade="save-update,delete" batch-size="10">
23     <!-- 一对多建表,有外键
24     hibernate机制:双向维护外键,在一和多那一方都配置外键 column属性值:外键名称 -->
25     <key column="clid"></key>
26     <!-- 客户所有联系人,class里面写联系人实体类全路径 -->
27     <one-to-many class="com.cn.entity.LinkMan"/>
28     </set>
29     </class>
30     </hibernate-mapping>

- 在联系人映射文件中,表示所属客户

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 
 3 <!-- hibernate入门 搭建hibernate环境 第一步 导入hibernate的jar包 -->
 4 <!-- 映射配置文件dtd约束 -->
 5 <!-- 最好每一个实体类对应一个映射文件 -->
 6 <!DOCTYPE hibernate-mapping PUBLIC 
 7     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 8     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 9     <hibernate-mapping>
10     <class name="com.cn.entity.LinkMan" table="t_linkMan">
11     <id name="lkm_id" column="lkm_id">
12     <generator class="native"></generator>
13     </id>
14     <property name="lkm_name" column="lkm_name"></property>
15     <property name="lkm_gender" column="lkm_gender"></property>
16     <property name="lkm_phone" column="lkm_phone"></property>
17 
18     <!-- 表示联系人所属客户 name属性:因为在联系人实体类使用custom对象表示,写custom名称
19     class属性:custom全路径 column属性:外键名称 -->
20     <many-to-one name="custom" class="com.cn.entity.Custom" column="clid"></many-to-one>
21     </class>
22     </hibernate-mapping>

第四步 创建核心配置文件,把映射文件引入到核心配置文件中

技术分享

2、一对多级联操作

1 级联保存添加一个客户,为这个客户添加多个联系人

2 级联删除:删除某一个客户,这个客户里面的所有的联系人也删除

(1)添加客户,为这个客户添加一个联系人

 ① 复杂写法:

//级联添加
	@Test
	public void testAdd1() {
		SessionFactory sessionFactory = null;
		Session session = null;
		Transaction tx = null;
		try {
			sessionFactory = DUtils.getSessionFactory();
			session = DUtils.getSessionObject();
			//开启事务
			tx = session.beginTransaction();
			
			//创建客户和联系人对象
			Custom custom = new Custom();
			custom.setCustName("网易");
			custom.setCustLevel("vip");
			custom.setCustSource("网络传播");
			custom.setCustPhone("220");
			custom.setMobile("333");
			
			LinkMan linkman = new LinkMan();
			linkman.setLkm_name("mary");
			linkman.setLkm_gender("女");
			linkman.setLkm_phone("8888");
			
			//2在客户表示所有联系人 在联系人表示客户
			//建立客户对象和联系人对象关系
			//2.1 把联系人对象放到客户对象的set集合里面
			custom.getSetLinkMan().add(linkman);
			//2.2 把客户对象放到联系人里面
			linkman.setCustom(custom);
			//3 保存到数据库
			session.save(custom);
			session.save(linkman);
			//提交事务
			tx.commit();
		}catch(Exception e) {
			e.printStackTrace();
			//回滚事务
			tx.rollback();
		}
	}

 ②  简化写法

- 一般根据客户添加联系人

第一步 在客户映射文件中进行配置

- 在客户映射文件里面set标签进行配置

技术分享

第二步 创建客户和联系人对象,只需要把联系人放到客户里面就可以了,最终只需要保存客户就可以了

技术分享

2、删除某个客户,把客户里面所有的联系人删除

第一步 在客户映射文件set标签,进行配置

(1)使用属性cascade属性值 delete

技术分享

第二步 在代码中直接删除客户

(1)根据id查询对象,调用session里面delete方法删除

技术分享

第三步 执行过程

(1)根据id查询客户

技术分享

(2)根据外键id值查询联系人

技术分享

(3)把联系人外键设置为null

技术分享

(4)删除联系人和客户

技术分享

 

二、多对多操作(用户和角色)

Hibernate5.x表与表之间的关系操作代码实现

标签:src   分享   设置   enc   添加   images   环境   代码实现   custom   

原文地址:http://www.cnblogs.com/xiaoxiaoyisheng/p/7587226.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!