Hibernate基础(CRUD)

来源:互联网 发布:淘宝网网银怎么支付 编辑:程序博客网 时间:2024/05/29 08:34

 

1.     使用Hibernate完成对象持久化

1.1     目标

理解Hibernate的基本原理

使用Hibernate完成对一张表的CRUD

1.2     单词

 

1.3     基本概念

对象/关系映射:O/R Mapping

POJO:Plain Old Java Object,普通古老的Java对象。

1.4     Hibernate的基本原理

对象/关系映射:O/R Mapping

1.5     使用Hibernate

 

一、         概念

1、              背景

Gavin King

2、              Hibernate是什么(What)?

是一个轻量级的持久层O/R Mapping框架。

轻量级:占用资源少、开发较简单。

O/R MappingObject/Relationship Mapping,对象/关系映射,指的是Java类和关系数据库的表之间的映射(框架会把程序对实体对象的操作,指的创建、修改、删除、查询等操作,转换为对应的表的操作)。

POJOPlain Old Java Object,普通古老的Java对象,就是JavaBean或者实体类。

重量级框架:EJB中的EntityBean(实体Bean

3、              为什么要学习HibernateWhy,作用)?

JDBC

优点:执行速度快。

缺点:对开发人员要求比较高;开发时效率低;不便于维护;

 

优点:O/R Mapping符合面向对象的思想;方便迁移;提高开发效率;。

缺点:速度比JDBC慢。

4、              备选的持久层框架

HibernateO/R Mapping

iBatis:直接执行SQL语句。

EJB3:分布式组件。

JPA:下一代Java持久层框架。

5、              Hibernate由什么组成(What)?

Jar文件:hibernate.jar

配置文件:hibernate.cfg.xml

6、              Hibernate的程序由什么组成(What)?

主配置文件:hibernate.cfg.xml

映射配置文件:*.hbm.xml

实体类:

二、         如何使用Hibernate来开发项目(How)?

1、          创建数据和表

要求表必须有主键。

2、          配置数据库连接

3、          添加Hibernate框架到工程(生成hibernate.cfg.xml

把所有Hibernatejar文件复制到/WEB-INF/LIB/目录下;

把所有Hibernatexml文件复制到/WEB-INF目录下;

直接:jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=bookdb;

4、          根据自动生成实体类、映射文件、和DAOData Access Object)类;

主键生成策略:

Assigned:由程序给数据库的主键赋值。

Identity:由SQL Server的自增长列。

Sequenceoracle数据库中标识列

Increment:由hibernate生成新的自动增长的主键。

Native:根据数据库的不同,选择identitysequence等中的一个。

5、          Hibernate中重要的类

Org.hibernate.cfg.Configuation:配置类,加载hibernate配置文件。

SessionFactorysession工厂类,专门负责创建session对象。重量级类,线程安全。

Org.hibernate.Session:轻量级类,非线程安全的,负责完成O/R mapping的工作(自动生成SQL语句并执行)。

Get(Class cls,Serializable key):根据主键取得指定的对象。

Saveobject):保存(新增)。

Update(object):更新。

Delete(object):删除。

三、         Hibernate中常用的类

Session

Org.hibernate.Query:查询接口,执行HQL语句

SQLQuery子类,执行SQL查询语句。

l       Criteria:标准,执行标准查询。

l       Restrictions,条件(相当于sql语句中where条件),用来组装各种条件。

l       Expression:表达式,同Restrictions用来组装条件,用在Hibernate3.0以前的版本,在3.1后过时了。

l       Projections:投影(相当于sql语句中group byavgmax等条件),用来组装分组、统计等条件。

l       ProjectionList:投影集合,ProjectionList pList= Projections. projectionList();

pList.add(Projections.avg(…));

Crit.setProjection(pList);

l       Order:排序(相当于sql语句中的order by)。

四、         HQL

1、          基本语法:

[Select/update/delete ……] [from……] [where……][group by ……[having……]][order by……]

HQL的关键字不区分大小写,但是类和属性区分大小写。

类名可以采用全路径类名。

From TUser:返回所有TUser对象及TUser的子对象。

From java.lang.Object:返回数据库中所有表的所有数据。

Where条件:=,<>,<,>,>=,<=,between,not between,in,not in,like,is等和and ,or,not

Where子句中:可以使用表达式。

 

2、          属性查询

WhatSelect:后可以指定属性名称,例如:select a.Name from Users a

When:当我们不需要整个对象,而只需要这个对象中一个或者多个属性时,我们采用属性查询。

3、          实体更新与删除

4、          分组与排序

5、          参数绑定

l       顺序占位符:

l       引用占位符:

6、           

 

五、         对象/关系映射(O/R Mapping)基础

1、          主键生成策略

Assigned:赋值,由程序给主键赋值。

Increment:自动增长,由hibernate自动增长。Maxid+1

Identity:标示列,由数据库自己实现主键自动增长。支持的数据库有DB2MySQLMS SQL serverSybase等。

Sequence:序列,由数据库的序列列实现主键自动增长。支持的数据库有DB2OracleSAP DB等。

Native:本地的,根据数据库的类型,选择identitysequencehilo之中的一种。

六、         对象/关系映射(O/R Mapping)高级关系映射

1.       为什么要学习关系映射?

优点:它是Hibernate O/R Mapping的一部分;它是面向对象编程,带来一些方便。

缺点:性能下降;复杂的映射比较麻烦。

2.       类与类之间的关系类型:

a)       关联:A类作为B类的一个属性。例如:人与汽车。

一对一、一对多、多对一、多对多。

b)      泛化:A类继承B类。

c)       依赖:A类作为B类方法的参数。

d)      聚合:A类作为B类的一个属性,但是,从含义上,A类是B类一个组成部分。例如:电脑与鼠标

e)       组合:是一种强聚合关系.A类作为B类的一个属性,在B类的构造方法中,会创建A类的对象。但是,从含义上,A类是B类一个组成部分。部分离开整体后,就没有存在的含义。例如:人和头。

f)        实现:接口和实现类。

类与类之间除了关系的类型外,还有数量关系:

一对一、一对多、多对一、多对多。

3.       常用的关系类型:

关联关系

4.       关联关系映射

1)      一对一:

a)       主键关联:

b)      唯一外键关联:

2)      一对多/多对一

3)      多对多:

 

七、         序列化java.io.Serializable

序列化:将Java对象的状态(属性的值),写入特定的存储介质,而进行的编码成二进制流的过程。

反序列化:将存储在特定存储介质上的Java对象的状态,读取出来,并解码成Java对象(unicode编码)的过程。

 

什么时候实体需要实现序列化接口:这个实体类的对象需要写入硬盘或者在网络传输的时候。

 

八、         Hibernate中实体对象的状态

临时状态(Transient):刚用new语句创建,没有持久化,并且不在Session的缓存中。(内存中有,数据库中没有)

持久化状态(persistent):这个对象已经被持久化,且被加入到Session的缓存当中。(内存中有,数据库也有,关联起来被管理)

游离/脱管状态(detached):该对象已经被持久化,但是不处于Session的缓存中。()

九、          

 

 

原创粉丝点击