hibernate---简介

Hibernate简介

Hibernate在开发中所处的位置

 

ORM映射

Object :面向对象领域的

Relational:关系数据库领域的

Mapping:映射

Object Relational

Hibernate:就是让程序员通过操作对象的方式来操作数据库中的表。

Hibernate的执行过程

Hibernate中的常用接口和类

Configuration

作用:加载Hibernate的配置文件

配置方式

classpath中建立一个hibernate.properties的配置文件。

 

自由指定映射文件:

 

自由指定加载的实体类:

 

·Configuration接口:Configuration接口负责配置并启动Hibernate,创建SessionFactory对象。在Hibernate的启动的过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory对象。

SessionFactory(重点)

Configuration通过加载配置文件创建该对象。

SessionFactory 对象中保存了当前的数据库配置信息和所有映射关系以及预定义的SQL语句。同时,SessionFactory还负责维护Hibernate的二级缓存

预定义SQL语句:(注意如果有多个映射文件,每个映射文件都会有这4条预定义SQL语句)

select * from students where id=? //根据主键查询

insert into students (name,age,birthday) values(?,?,?); //全字段插入

update students set name=?,age=?,birthday=? where id=? //根据主键全字段更新

delete from students where id=? //根据主键删除

一个SessionFactory实例对应一个数据库,应用从该对象中获得Session实例。

SessionFactory线程安全的,意味着它的一个实例可以被应用的多个线程共享。

SessionFactory重量级的,意味着不能随意创建或销毁它的实例。如果只访问一个数据库,只需要创建一个SessionFactory实例,且在应用初始化的时候完成。

SessionFactory需要一个较大的缓存,用来存放预定义的SQL语句及实体的映射信息。

另外可以配置一个缓存插件,这个插件被称之为Hibernate二级缓存(后续会详解二级缓存),被多线程所共享

·SessionFactory接口:SessionFactroy接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。

结论:一般应用使用一个SessionFactory,最好是应用启动时就完成初始化。

Session 非常重要。使用率非常高

不是线程安全的。应避免多个线程使用同一个Session实例。

Session是轻量级的,它的创建和销毁不会消耗太多的资源。应为每次客户请求分配独立的Session实例

Session有一个缓存,被称之为Hibernate的一级缓存。每个Session实例都有自己的缓存。

Session接口:Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句。)。但需要注意的是Session对象是非线程安全的。同时,Hibernate的session不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSesion对象称为用户session。

Transaction:事务管理

Hibernate应用通过它声明事务边界,有助于在不同的环境或容器中进行移植。

 

开启事务:Transaction tx = session.beginTransaction();//开启事务

tx.commit()事务提交 tx.rollback()事务回滚

·Transaction接口:Transaction接口负责事务相关的操作。它是可选的,开发人员也可以设计编写自己的底层事务处理代码。

 

·Query和Criteria接口:Query和Criteria接口负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表达方式。


 
  
 

JavaBean编写规范:

a、类一般是public

b、有默认的构造方法

c、字段都是私有的

d、提供公有的gettersetter方法

e、一般都实现java.io.Serializable接口

注意:hibernate采用的暴力反射

派生属性

概念:

实体类中的某些属性在数据库表中没有对应的字段,该属性的值是由数据库表中其他字段计算出来的。这样的属性叫做派生属性。

原文地址:https://www.cnblogs.com/fengru/p/5572370.html