Hibernate框架第三天

一对多|多对一

关系表达

实体关系表达

User实体中的关系表达

User实体中的关系表达
LinkMan实体中关系表达
LinkMan实体中关系表达

orm元数据关系表达

<!-- 一的一方 -->
<set name="linkMens">
       <key column="lkm_cust_id" />
       <one-to-many class="LinkMan" />
</set>
<!-- 多的一方 -->
<!-- 
   name属性:引用属性名
   column属性: 外键列名
   class属性: 与我关联的对象完整类名
 -->
<many-to-one name="user" column="lkm_cust_id" class="User"  >

操作

 public static void fun1() {
	  // 1、获得session
	  Session session = HibernateUtils.openSession();
	  // 2、开启事务
	  Transaction transaction = session.beginTransaction();
	  // 3、执行操作
	  // 3.1创建用户
	  User user = new User();
	  user.setPassword("123");
	  // 3.1创建联系人
	  LinkMan man1 = new LinkMan();
	  man1.setLkm_name("张三");
	  LinkMan man2 = new LinkMan();
	  man2.setLkm_name("李四");
	  // 表达一对多,客户下有多个联系人
	  user.getLinkMens().add(man1);
	  user.getLinkMens().add(man2);
	  // 表达多对一,联系人属于哪个客户
	  man1.setUser(user);
	  man2.setUser(user);
	  //执行保存
	  session.save(man1);//通过级联操作可以省本行代码
	  session.save(man2);//通过级联操作可以省本行代码
	  session.save(user);
	  // 4、提交事务
	  transaction.commit();
	  // 5、关闭资源
	  session.close();
 }

操作进阶

级联操作(配置文件)

<!-- 多的一方 -->
<!-- cascade: 级联操作 
	   减少我们书写的操作代码.
	   none(默认值) 不级联
	   save-update: 级联保存
	   delete:   级联删除
	   all:   级联保存+级联删除
结论: 可以使用save-update.不推荐使用delete. 也可以不用cascade.
 -->
<set name="linkMens" cascade="save-update" inverse="true">
   <key column="lkm_cust_id"></key>
   <one-to-many class="LinkMan" />
</set>

多对多

关系表达

实体关系表达

User实体中的关系表达
User实体中的关系表达
Role实体中的关系表达
Role实体中的关系表达

orm元数据关系表达

<!-- 双方配置相同 -->
<!-- table:中间表名 -->
<set name="roles" table="sys_user_role" >
   <!-- column:自己的主键 -->
   <key column="user_id" ></key>
    <!-- column:另一方的主键 -->
   <many-to-many class="Role" column="role_id" ></many-to-many>
</set>

操作

public static void fun1() {
	  // 1 获得session
	  Session session = HibernateUtils.openSession();
	  // 2 开启事务
	  Transaction tx = session.beginTransaction();
	  // -------------------------------------------------
	  // 3操作
	  // 1> 创建两个 User
	  User u1 = new User();
	  u1.setUser_name("张三");
	  User u2 = new User();
	  u2.setUser_name("李四");
	  // 2> 创建两个 Role
	  Role r1 = new Role();
	  r1.setRole_name("保洁");
	  Role r2 = new Role();
	  r2.setRole_name("保安");
	  // 3> 用户表达关系
	  u1.getRoles().add(r1);
	  u1.getRoles().add(r2);
	  u2.getRoles().add(r1);
	  u2.getRoles().add(r2);
	  // 4> 角色表达关系
	  r1.getUsers().add(u1);
	  r1.getUsers().add(u2);
	  r2.getUsers().add(u1);
	  r2.getUsers().add(u2);
	  // 5> 调用Save方法一次保存
	  session.save(u1);
	  session.save(u2);
	  session.save(r1);
	  session.save(r2);
	  // -------------------------------------------------
	  // 4提交事务
	  tx.commit();
	  // 5关闭资源
	  session.close();
 }

操作进阶

级联操作和(配置文件)

<!-- 使用inverse属性
  	 true: 放弃维护外键关系
   	false(默认值):维护关系   
  	结论: 将来在开发中,如果遇到多对多关系.一定要选择一方放弃维护关系.
   	一般谁来放弃要看业务方向. 例如录入员工时,需要为员工指定所属角色.
    	那么业务方向就是由员工维护角色. 角色不需要维护与员工关系.角色放弃维护
-->
<set name="users" table="sys_user_role" inverse="true" >
  	<key column="role_id" ></key>
   	<many-to-many class="User" column="user_id" ></many-to-many>
</set>
<!-- cascade级联操作:
      save-update: 级联保存更新
      delete:级联删除
      all:级联保存更新+级联删除
      结论: cascade简化代码书写.该属性使不使用无所谓. 建议要用只用save-update.
      如果使用delete操作太过危险.尤其在多对多中.不建议使用
 -->
  <set name="roles" table="sys_user_role" cascade="save-update" >
   	<key column="user_id" ></key>
   	<many-to-many class="Role" column="role_id" ></many-to-many>
  </set>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值