一、概述
1、Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
2、好处:操作数据库时,可以以面向对象的方式来完成,不需要书写SQL语句
3、hibernate属于完全面向对象的操作数据库的dao层框架
二、开发环境的搭建
1、实体类:持久化类提供无参构造
成员变量私有,提供get/set方法访问,需提供属性
持久化类中的属性,应尽量使用包装类
持久化类中应提供oid,与数据库中的主键对应
不要用final修饰class(hibernate使用cglib代理生成代理对象,代理对象是继承被代理对象,如果被final修饰,将无法实现继承,无法生成代理对象)
2、实力类与数据库的映射配置( orm元数据的配置):配置文件中的property与数据库表中的字段一一对应
根元素(标签)、class元素、id元素、proproperty元素
<hibernate-mapping>
<class name="com.baidu.pojo.Customer" table="CUSTOMER">
<id name="id" column="CID">
<generator class="increment" />
</id>
<property name="username" column="USERNAME" />
<property name="password" column="PASSWORD" />
</class>
</hibernate-mapping>
3、hibernate的主配置
必选属性配置(数据库连接配置):
可选配置:
元数据引入配置:
<mapping resource="cn/baidu/pojo/Customer.hbm.xml"/>
三、hibernateAPI详解
1、Configuration:加载核心配置文件,加载映射文件(不过,一般映射文件都配置在核心配置文件中,该方法用少)
创建:Configuration conf = new Configuration()空参构建
加载主配置:conf.configure()
加载orm元数据:conf.addResource(resourceName);
conf.addClass(persistentClass);
创建sessionFactory:SessionFactory sf = conf.buildSessionFactory()
2、SessionFactory:SessionFactory用于创建操作数据库核心对象session的工厂
SessionFactory负责保存和使用所有配置信息,是一个线程安全的对象设计,整个web应用中,只有一个SessionFactory对象
sf.openSession()/打开一个新的session对象
sf.getCurrentSession()/获得一个与线程绑定的对象
3、Session:hibaernate框架与数据库之间的连接会话,类似于JDBC年代的connection对象,通过session来完成对数据库的增删改查工作,是hibernate操作数据库的核心对象
Transaction tx2 = session.beginTransaction();获得事务
save():增
get():查
update():改
delete():删
4、Transaction:封装了事务的操作
session.beginTranaction();/打开事务
commit();/提交事务
rollback();/回滚事务
四、hibernate对象状态
1、瞬时状态:没有id,也没有存在session缓存中
2、持久化状态:有id,也在session缓存中
3、游离/脱管状态:有id,没有在session缓存中
五、hibernate的缓存
六、hibernate的事务
1、如何在hibernate中指定数据库的隔离级别
2、在项目中如何管理事务:
业务开始之前打开事务,业务执行之后提交事务. 执行过程中出现异常.回滚事务.
在dao层操作数据库需要用到session对象.在service控制事务也是使用session对象完成. 我们要确保dao层和service层使用的使用同一个session对象
在hibernate中,确保使用同一个session的问题,hibernate已经帮我们解决了. 我们开发人员只需要调用sf.getCurrentSession()方法即可获得与当前线程绑定的session对象
注意: 调用getCurrentSession方法必须配合主配置中的一段配置
:通过getCurrentSession方法获得的session对象.当事务提交时,session会自动关闭.不要手动调用close关闭.
七、hibernate对数据库的查询操作
1、HQL语法
基本查询
条件查询(占位符:命名占位符、?占位符)
分页查询
2、Criteria查询
基本查询
条件查询
分页查询
查询记录总数
3、原生SQL查询
基本查询
返回数组List
返回对象List
条件查询
分页查询
八、hibernate中多表之间的关系表达
1、一对多/多对一
关系表达:
表中的表达:多的一方的外键指向一的一方的主键
对象中的表达:使用集合/对象属性来表达一的一方支持可以拥有多个多的一方
orm元数据中的表达:<one-to-many>、<many-to-one>标签的使用
对象关联性:属性注入
级联操作、关系维护
2、多对多
关系表达:
表中的关系:使用中间表来对应两张表中的主键对应关系
对象中的关系:两方都用集合来表示可以拥有多个对方
orm元数据中的关系表达:<many-to-many>标签的使用
对象关联性:属性注入
级联操作、关系维护