Hibernate是什么?
Hibernate是一个框架(framework)
Hibernate是一个orm框架
Orm(object relation mapping)对象关系映射 框架
Hibernate处于项目的持久层,正因为如此,所以有人又把hibernate称为持久层框架
hibernate实际上是对jdbc轻量级的封装
Hibernate设计原理
Hibernate框架是一款ORM工具。基于ORM设计思想开发出来的。
ORM:Object–Relation–Mapping对象关系映射
对象指的就是Java的实体对象;
关系指的是关系型数据库。(Oracle、DB2、MySql、SqlServer)
ORM的主要思想就是将程序中的对象和数据库中的数据实现自动映射
转换。利用ORM工具,在查询时,可以自动将记录封装成Java对象返
回。在更新、插入操作时,可以将对象自动写入数据表。对于中间的
SQL+JDBC操作细节,完全封装在工具底层
基于ORM思想设计的框架有很多,例如Hibernate,iBATIS,JPA等.
Hibernate主要API
Configuration:用于加载主配置文件(hibernte.cfg.xml)和映射文件。
SessionFactory:用于创建Session对象。
Session:将原Connection对象进行了封装,代表Hibernate与数据库之
间的一次连接,负责执行增删改查操作。
save(),update(),delete(),load(),get()方法.
Transaction:用于进行事务管理。
注意:由于关闭了JDBC中的自动提交功能
(setAutoCommit(false)),所以使用时,必须显示地
执行commit 操作。
Query:负责执行各种查询。
实体间的关系
Hibernate数据映射类型:
在hbm.xml中,描述属性和字段之间映射的时候,可以使用type属性指定数据
映射类型。
type属性可以指定Java类型和Hibernate类型。主要作用是指定属性值和字段
值之间转换时(即在底层执行rs.getXXX(),stmt.setXXX()时XXX的类型),采用的
转换类型。(建议采用Hibernate映射类型)
Hibernate数据映射类型主要有以下几种:
a.整数类型
byte,short,integer,long
b.浮点数类型
float,double
c.字符串类型
string
d.日期时间类型
date,time,timestamp
其中:
date只取年月日,
time只取小时分钟秒,
timestamp取完整的时间年月日小时分钟秒
e.boolean类型
该类型可以实现boolean属性和字符之间的转换。
yes_no:将true|false转换成Y|N
true_false:将true|false转换成T|F
底层实现方法:
stmt.setChar(cost.getBoolean().toString())
cost.setBoolean(Boolean.parseBoolean(rs.getChar("***")))
f.其他big_decimal,big_integer,clob,blob
一对多关系映射
a.确定两个对象哪个是1方和n方
b.需求:由1方对象查询n方记录,可以采用一对多关系映射
c.首先在1方实体类中添加集合属性Set
d.然后再1方的hbm.xml中定义一对多关系映射的描述
多对一关系映射
a.需要由n方对象查询1方对象信息
b.在n方实体类中添加属性,属性类为1方类型
c.在n方hbm.xml文件中,添加属性的映射描述信息
d.清除n方实体类中外键字段描述信息和属性
e.使用时,通过n方对象.关联属性获取相关的1方记录信息
多对多关系映射
多对多关系在数据库中需要3张表表示。
例如AdminInfo–>Admin_Role<–Role
如果需要根据Admin查找Role,可以建立Admin到Role的多对多关系映射。具
体过程如下:
a.在Admin实体类中追加一个集合属性,用于存储相关联的Role对象信息
b.在Admin的hbm.xml中描述集合属性映射
Hibernate查询
a.HQL查询
Hibernate Query Language
HQL与SQL语句结构相似,SQL语句是面向数据表和字段进行查询,而HQL
语句是面向Hibernate映射过来的对象进行查询,因此HQL被称为是
一种面向对象查询语言
HQL和SQL共同点:
–都支持select,from,where,order by,having,group by等子句。
–都支持运算符表达式,例如+,-,,/,>,<等
–都支持in,not in,between and,like等过滤条件关键字
–都支持分组函max,min,sum,avg,count
HQL和SQL不同点:
–HQL是大小写敏感的,类名和属性名严格区分大小写
–HQL不支持select * 写法
–HQL不支持join…on…中的on子句,因为join…on发生在多表操作,而
Hibernate中对于有关系的多张表已将将关联映射写在了xxx.hbm.xml
中,在查询时会自动加上join…on
–HQL不支持表名和字段名