Hibernate 进阶(1)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34833599/article/details/78493871
  • Hibernate 关联关系
      单向关联:例如物品和用户构建单向关系,则可以通过用户查看物品,去不能通过物品查看用户。
      双向关联:两者之间可以互相访问。
      关系可以分为:单向1-N,单向N-1,单向N-N,单向1-1;双向1-1,双向1-N,双向N-N。

  • 单向N-1关联

    1的一方需要有一个Set集合类型是的N的一方,而且还需要在N的一方的关系映射文件中添加:

<!-- name(该映射文件类中的属性名) class(该映射文件中属性名对应的类的完整地址) column(在数据库中的列名) cascade(级联操作) -->
<many-to-one name="wm_f_wt_id" class="WorkType" column="wt_f_id" cascade="save-update"></many-to-one>
  • 单向1-N关联
    1的一方还是需要一个Set集合类型是N的一方,1的一方的映射文件中需要添加
		<!-- name(该映射文件的类中的属性名) -->
		<set name="">
		<!-- column(该类中的列名,外键名) -->
			<key column=""/>
			<!-- class(N方完整的类名) -->
			<one-to-many class=""/>
		</set>
  • 双向1-N关联
    1的一方需要有Set集合类型是N的一方,映射文件中需要添加单向1-N中1的要添加的内容;N的一方需要有1的对象 并且需要在N的映射文件中添加1-N中N的映射文件中需要添加的内容。


  • 基于外键的1-1关联
    基于外键的单向1-1在POJO类中的代码的编写方式可以参考单向的N-1,因为N的一端或1的一段都是直接访问关联的实体。对于映射配置,两者也是类似的,只不过是基于外键的单向1-1需要在原有的<many-to-one>元素中设置unique属性为true,用以表示N的一端必须唯一,通过在N的一段添加约束的方法,将单向N-1变成等同于外键的单向1-1关联关系。


  • 基于主键的单向1-1关联
    需要在映射文件中添加<one-to-one name="" class="" constrained="true"/>(name 该类中属性的名称,class该属性对应的类的完整的类名 constrained需要置成true)


  • 基于外键的双向1-1关联
    像上面的基于外键的单向1-1关联相似,需要在一个类的映射文件中添加<many-to-one>并且还是需要添加一个unique=“true”属性在另一个类的映射文件中添加<one-to-one > 这样的话添加<many-to-one>的类所创建的表就变成了从表。


  • 基于主键的双向1-1关联
    和基于主键的单向1-1相似,只不过是在另一个需要关联的映射文件中也添加了<one-to-one>从而建立了一对一关联关系。


  • 单向N-N
    在主关联类中有Set集合类型是对方的类型,然后都需要在其映射文件中添加:
		<!-- name(该类中的属性) table(中间表名) cascade(级联类型)-->
		<set name="roles" table="sys_user_role" cascade="save-update" >
		<!-- 创建表的外键名 -->
			<key column="user_id" ></key>
			<!-- class(对方的完整类名) column(对方的外键列名) -->
			<many-to-many class="Role" column="role_id" ></many-to-many>
		</set>
  • 双向N-N关联
    和单向N-N关联相似,只不过是在每个类中都进行了单向N-N关联中的操作。也可以分成两单向1-N关联,中间表为1,两表为N.

属性名|描述

  • | :
    cascade|级联操作:save-update 级联保存更新;deleted 级联删除;all 级联保存更新删除。只推荐使用sace-update
    fetch|抓取策略可以是join(外连接)和select(选择)两值之一
    lazy|指定关联实体的延迟加载特性
  • HQL检索
    是一种面向对象的查询语言。它所操作的对象都是类、对象、属性等。select wm_name from WorkMessage where wm_id='10'group by wm_type order by wm_id desc把WorkMessage信息以wm_type分组之后按wm_id增加的方式排序,获得wm_id=10的wm_name;
    Query接口的方法及描述
方法名 描述
int executeUpdate() 执行更新删除等操作之后,返回受影响的记录数
Iterator iterate() 返回一个Iterator对象,用户迭代查询的结果集。使用该方法时,首先要检索ID字段,然后根据ID字段到Hibernate的一级和二级缓存中查询匹配的对象,如果存在就直接放到结果集中,如果不存在则执行select 查询数据库放到结果集中,该方法比list()的性能要高。
List list() 返回的结果以list的形式
Query setFirstResult(int first) 设定开始检索的起始位置,参数first表示对象的查询结果中的索引位置,索引位置的起始值为0,默认情况下Query接口从索引位置为0的对象开始检索
Query setMaxResult(int max) 设置一次最多的检出数目,默认情况下是所有的对象,和setFirstResult一起使用可以实现分页效果
Object uniqueResult() 返回单个对象,如果没有查询到则返回null
Query setParameter(String name,Object val) 用于绑定任意类型的参数。

如果对您有用希望点个赞,若是哪里有写的不好的请及时留言,在您的帮助下会多写出更好的总结,谢谢。

猜你喜欢

转载自blog.csdn.net/qq_34833599/article/details/78493871