标签: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)删除联系人和客户
标签:src 分享 设置 enc 添加 images 环境 代码实现 custom
原文地址:http://www.cnblogs.com/xiaoxiaoyisheng/p/7587226.html