Hibernate基础知识总结

Hibernate基础知识总结

整体结构

在这里插入图片描述

一、Hibernate相关的API

  1. configuration ,到src下面找到名称hibernate.cfg.xml配置文件,创建对象,把配置文件放到对象里面(加载核心配置文件);
  2. sessionFactory ,使用configuration对象创建sessionFactory对象;
  • (1)创建sessionfactory过程中做事情:
    • 根据核心配置文件中,有数据库配置,有映射文件部分,到数据库里面根据映射关系把表创建;
  • (2)创建sessionFactory过程中,这个过程特别耗资源的:
    • 在hibernate操作中,建议一个项目一般创建一个sessionFactory对象;
  • (3)具体实现:
    • 写工具类,写静态代码块实现,静态代码块在类加载时候执行,执行一次;

在这里插入图片描述

  1. session ,类似于jdbc中connection;
  • (1)调用session里面不同的方法实现crud操作:
    • 添加 save方法;
    • 修改 update方法;
    • 删除 delete方法;
    • 根据id查询 get方法;
    • Load方法,根据ID查,(返回的是代理,不会立即访问数据库);
    • saveOrUpdate,merge(根据ID和version的值来确定是save或update),调用merge你的对象还是托管的;
    • lock(把对象变成持久对象,但不会同步对象的状态);
  • (2)调用session里面不同的方法实现crud操作:
    • session对象单线程对象
  1. Transaction 事务
  • (1)事务提交和回滚方法
    • 事务开启:Transaction tx = session.beginTransaction();
      事务提交:tx.commit();
      事务回滚:tx.rollback();
  • (2)事务概念
    • 事务四个特性
      • 原子性(事务不可再被分割);
      • 一致性(数据操作前后是一致的);
      • 隔离性(多个事务同时调用一条记录时互不干扰);
      • 持久性(提交到数据库才算持久对象) ;
  1. Query,Qyuery主要用于Hibernate执行hql语句。
  • hql语句:hibernate提供的面向对象的查询语句,使用对象(类)和属性进行查询,区分大小写。

  • 获得Query对象:Query query = session.createQuery(“hql”)

  1. Criteria实际上是个条件附加的容器,如果想要设定查询条件,则要使用org.hibernate.criterion.Restrictions的各种静态方法传回org.hibernate.criterion.Criteria实例,传回的每个org.hibernate.criterion.Criteria实例代表着一个条件:
Criteria criteria = session.createCriteria(User.class);
criteria.add(Restrictions.gt("age", new Integer(20)));
criteria.add(Restrictions.lt("age", new Integer(40)));
List users = criteria.list();

二、集合属性

  • Set
    • HashSet 无序,不重复
  • List
    • 有序,可重复,使用List时,配置文件中可以使用Bag标签
  • Map
    • 键值对
    • HashMap 无序,不重复(以key为准)
  • 注意:
    • 使用集合属性时,一定要使用接口,而不能声明为具体的实现类。
      因为经过Session操作后,集合就变成了Hibernate自己的集合实现类。
    • 值类型的集合,集合元素是普通类型
    • 实体类型的集合,集合元素是另一个实体

三、关联关系

  1. 单向多对一
public class Person{
   
private int pid;
private String name;
private Address address;
...//生成相应的getter、setter方法
}
public class Address{
   
private int id;
private String detail;
...//生成相应的getter、setter方法
}

这里我们需要维护的关系是多个Person可以对应同一个地址,使用单向的多对一,映射我们只需要在多的一端加入一个外键指向一的一端即可

 <class name="Person">
<id name="id">
<generator class="native"/>
</id>
...//部分字段配置省略
<many-to-one name="address" column="addressId"/>//关键配置
</class>

这样配置以后hibernate就会帮我们在多的一端(Person)添加一个外键addressId指向一的一端;
2. 单向多对一单向一对多
看代码,我们知道一个班级有多名学生,这就是一个典型的一对多关系

public class Classes {
   
private int id;
private String name;
private Set students;
...//生成相应的getter、setter方法
}
public class Student {
   
private int id;
private String name;
..//生成相应是getter、setter方法
}

映射原理:一对多关联映射,在多的一端添加一个外键指向一的一端,它维护的关系是一指向多

<class name="Classes" table="t_classes">
<id name="id">
<generator class="native"/>
</id>
<property name="name
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值