Hibernate
Hibernate概述
Hibernate介绍
ORM概述
Hibernate和JDBC的区别
Hibernate体系结构
Hibernate框架搭建
配置XML提示信息
Hibernate配置文件
Hibernate有两个类型的配置文件
1. *.hbm.xml 对象关系映射配置文件
2. hibernate.cfg.xml hibernate默认的配置文件
hibernate.cfg.xml配置文件中的信息
1.hibernate运行的底层信息:数据连接信息,JDBC驱动,数据库Dialect方言等
2.hibernate映射文件
注:Hibernate之所以能够和不同的关系型数据库打交道原因是因为他可以配置不同
的方言,这就是Hibernate跨数据库的原因
*.hbm.xml配置文件中的信息
1.类和表的对应关系
2.类里面的属性和表里面字段的对应信息
3.映射关系(o-t-o) (o-t-m) (m-t-o) (m-t-m) o:one m:many t:to
4.主键生成策略
5.主键与表的主键映射关系
注:
1.如果属性对应的是表里面的主键,则使用id标签
2.如果属性名和列名一致,则可以省略列名的配置
如何使用Hibernate操作数据库
Hibernate.cfg.xml可以改名
读取配置文件
Configuration configure = new Configuration().configure();
默认名称版 hibernate.cfg.xml
Configuration configure = new Configuration().configure("xxx.xml");
改名版 xxx.xml
Hibernate核心文件-五大核心(4个核心接口 1个核心类)
Hibernate运行原理
1.首先通过configuration去加载hibernate.cfg.xml这个配置文件
2.根据配置文件信息去创建sessionFactory,它是线程安全的,是一个session工厂
3.再用sessionFactory创建session,它是线程不安全的,相当于JDBC的Connection
最后通过session进行数据库各种操作
4.在进行增删改操作的时候通过session打开transaction进行事务的控制
Configuration的描述
Configuration类从hibernate.cfg.xml加载Hibernate的配置信息。
Configuration类从hibernate.cfg.xml加载Hibernate的配置信息。
从而得到以下信息:
1.Hibernate运行的底层信息:数据库URL,用户名,密码
JDBC驱动类,数据库方言Dialect(方言),数据库连接池等。
2.Hibernate映射文件(*.hbm.xml)
Configuration:负责管理数据库的配置信息
从而得到以下相关信息:
1.Hibernate运行的底层信息:数据库的URL、用户名、密码、
JDBC驱动类、数据库Dialect(方言)、数据库连接池等。
2.Hibernate映射文件(*.hbm.xml)
Configuration:负责管理数据库的配置信息
可用以下两种方式读入xml文件,配置hibernate
1. 默认加载src下的hibernate.cfg.xml文件
Configuration cfg=new Configuration().configure();
2. 从classpath中读取hibernate配置文件
Configuration config=new Configuration().configure("hibernate.cfg.xml”);
SessionFactory的描述
Session的描述
Query的描述
Transaction的描述
Session的常用方法
save() 添加
update() 修改
saveOrUpdate() 添加或修改
createQuery() --重点 Query
delete() 删除
get() 根据id查询
load() 根据id查询
Query
Query是Hibernate的查询接口,用于从数据库存储源查询对象以及控制执行查询过程。Query包装了一个HQL查询语句。
Query接口常用方法
1.setxxx():用于设置HQL语句中问号或者变量的值
2.list() 返回查询接口,并把查询接口转换成list对象,
也可以用query.uniqueResult(),得到单个对象
3.executeUpdate(); 执行更新和删除语句。
4.分页查询。
5.uniqueResult() 返回一个查询结果。 只能没有或者一个
Hibernate HQL
Hibernate Query Language查询语句,和SQL语句几乎一样
注意:
HQL面向对象,SQL面向结构
HQL中用类型名和属性名,替代了原有的表名和字段名
HQL语句中类型名和属性名大小写敏感
HQL查询所有字段值select * 则HQL语句中可以省略
如果需要join..on表连接,需要建立关联映射关系使用,不支持on子句。
不要使用数据库提供的字符串函数,日期函数,数值函数,特有函数
分组函数:max min avg count sum可用
若只查询实体类中某几个字段,返回的结果是泛型为数组的集合
HQL查询 关键字使用
distinct
构造查询
聚合函数
between and 一般和 ? 使用,是个占位符,下标设值 | 命名参数设值
group by 分组
order by 可以根据多个字段进行排序
Hibernate 三个状态
1.瞬时 -> 持久
使用session对象的save() 或saveOrUpdate()方法保存对象后,
该对象的状态就从游离转为持久
使用session对象的get() 或 load()方法获取对象后,该对象的状态是持久状态
2.持久 -> 瞬时
执行session对象的delete()方法后,对象由原来的持久状态转为瞬时状态,
此时该对象没有和任何数据库关联。
3.持久 -> 游离
执行了session对象的evict(),close(),clear()方法,对象由原来的持久状态变成游离状态。
4.游离 -> 持久
重新获取session对象,执行session对象的update() 或 saveOrUpdate()方法
由游离状态转换为持久状态,该对象再次与session关联。
5.游离 -> 瞬时
执行session的delete()方法,对象由游离状态变为瞬时状态。
对于不再被其他对象引用的游离状态,瞬时状态对象会被java虚拟机按照垃圾回收处理。
Hibernate 可以自动构建根据实体数据表
在Hibernate.cfg.xml 中添加
update
Hibernate主键生成策略
generator:主键生成策略
native:(数据库本地生成策略,适用于多个数据库) 天然的
sequence:序列(用于Oracle)
increment:(适用于所有数据库) 先查出最大的id,再在此基础上加1,有可能出现并发的问题
uuid:生成 一个32位,不会重复的主键,可以实现真正的跨数据库,(通常来说应该是String数据类型),适用于所有数据库
foreign:通常在一对一关联的时候使用,基于外键的主键生成策略
自动增长: identity 适用于mysql db2 sql server 一般采用long short int类型
Hibernate注解映射
@Entity
@Table
@Id
@GeneratedValue
@Column
Hibernate关联映射
多对一关系映射
设计表
一对多关系映射
设计表
商品: g_goods
gid
gname
price
gdate
tid
类型: g_type
tid
tname
注解形式:
@OneToMany
@JoinColumn(name="tid")
@Fetch(FetchMode.JOIN)
映射配置文件方式:
多对多关系映射
设计表:
课程:course
cid
cname
学生:student
sid
sname
中间表:cou_stu
cid
sid
注解配置:
/*
* @ManyToMany 注解标识Student是多对多的一端
* @JoinTable 描述多对多关系的数据表关系
* name属性:指定中间表名称
* joinColumns 属性:定义中间表和Student表的外键关系
* inverseJoinColumns属性:他是另一张表的外键。
*/
@ManyToMany
@JoinTable(name="cou_stu",
joinColumns=@JoinColumn(name="sid"),
inverseJoinColumns=@JoinColumn(name="cid"))
XML配置: