您的位置:首页 > 其它

欢迎使用CSDN-markdown编辑器

2017-11-17 18:21 148 查看
在学框架的时候,觉的知识点比较碎也比较杂,不方便记忆。所以,原来自己记录了一下常用到的知识点。

Hibernate

一、Hibernate简介及配置

1)hibernate简介

Hibernate框架是一个开源的ORM(Object Relational Mapping,对象关系映射)框架。

1.轻量级

2.实现将java pojo类与DB中 表的进行映射

3.全自动的orm框架,不用写sql语句

2)hibernate环境搭建

1.jar包

2.Hibernate核心配置文件(hibernate.cfg.xml)

– xml格式,位置和格式都是固定的

– 位置:必须在src下

– 名称:必须是hibernate.cfg.xml

(1)第一部分、数据库配置 必须



(2)第二部分、可选



(3)加载映射文件



3)hibernate核心api

–Configuration

Configuration cfg = new Configuration();

Cfg.configure();

到src下面找到名称hibernate.cfg.xml配置文件,创建对象,把配置文件放到对象里面(加载核心配置文件)

–SessionFactory(重点)

1.使用configuration对象创建sessionFactory对象

2.创建sessionFactory过程中,这个过程特别耗资源,所以在hibernate操作中,建议一个项目一般创建一个sessionFactory对象

3.具体实现

写工具类,写静态代码块实现,类加载的时候加载

– Session(重点)

1.session类似jdbc中connection

2.调用session里面不同的方法实现crud操作

(1)添加 save方法

(2)修改 update方法

(3)删除 delete方法

(4)Id查询 get/load方法

3.sessio对象单线程对象

Session对象不能共用,只能自
4000
己使用

4.hibernate绑定session

获得当前线程的session

配置文件中配置

工具类中:



获取与本地线程绑定session时候,关闭session报错,不需要手动关闭了

–Transaction

1.事务对象

Transaction tx = session.beginTransaction();

2.事务提交和回滚

Tx.commit();

Tx.rollback();

3.事务概念

四个特性:原子性、一致性、隔离性、持久性

4.hibernate事务代码规范写法

代码结构

Try{

开启事务



提交事务

}catch(){

事务回滚

}finally{

关闭

}

二、映射文件(实体类.hbm.xml)

1)demo

– 映射配置文件名称和位置没有固定的要求

– 建议:在实体类所在包里面创建,实体类名称.hbm.xml

1.创建xml格式配置文件

2.导入头部dtd约束



3.实体类映射表



2)一对一

3)一对多

hibernate一对多操作

a.一对多映射配置

1)创建实体类

2)实体类关联 一:set 多:对象

3)hbm.xml关联 一: one-to-many 多:many-to-one

b.一对多级联保存

c.一对多级联删除 cascade=”sava-update,delete”

d.inverse属性 取消维护外键

demo

“一”的那方



“多”的那方



4)多对多

hibernate多对多操作

a.多对多映射配置

1)创建实体类

2)实体类关联 set

3)hbm.xml关联 many-to-many

b.多对多级联保存

c.多对多级联删除

d.维护第三张表


5)hibernate主键生成策略

1.hibernate要求实体类里面有一个属性作为唯一值,对应表主键,主键可以不同生成策略


2.

在class属性里面有很多值

Native:根据使用的数据库选择生成策略

Uuid:hibernate帮我们生成uuid值

三、hibernate操作

1)核心操作

1.加载hibernate核心配置文件

2.创建SessionFactory对象

3.使用SessionFactory创建session对象

4.开始事务

5.写具体的crud操作

6.提交事务

7.关闭资源

2)实体类编写规范

1.实体类里面属性私有的

2.私有属性使用公开的set和get方法操作

3.要求实体类有属性作为唯一值(一般使用id值)

4.实体类属性建议不使用基本数据类型,使用基本数据类型对应的包装类

3)curd操作

1.添加

Session.save();

2.更新


3.删除

Session.delete(user);

4)三种查询方式

1.对象导航查询(根据id得到)

Session.get(User.class,uid); //立即从数据库查询

Session.load(User.class,uid) //需要的时候才从数据库查询

//session.get(.class,id).getSet()


2.OID查询

session.get(.class,id)

3.HQL查询(重点)

4.QBC查询

QBC查询 (不需要语句) Criteria对象

Criteria criteria = session.createCriteria();

a.查询所有

criteria.list()

b.条件查询

使用restriction类的静态方法

c.排序查询

使用Order类的静态方法

d.分页查询

firstResult

maxResult

e.统计查询

f.离线查询

HQL查询
特点:与sql语句主要的不同是 sql语句查询的是数据库中表和字段
hql语句查询的是实体类名及属性
a.查询所有
from 实体类名
b.条件查询
from 实体类名 (as) 别名 where 属性名 = ?
c.排序查询
asc 正序,desc 逆序
d.分页查询
firstResult
maxResult
e.投影查询
select 属性名,... from 实体类名
默认返回数组
f.聚合函数查询
count,avg,sum,max,min
h.多表查询  (迫切:fetch)
1)内连接   inner join 没有on
*内连接        返回数组
**迫切内连接 返回对象
2)左外链接  left outer join 没有on
*左外链接   返回数组
**迫切左外链接    返回对象
3)右外链接  right outer join 没有on


Hibernate检索策略

1.立即查询:根据id查询,调用get方法,一调用立马发送语句查询数据库

2.延迟查询:根据id查询,还有load方法,只有得到对象立马的值的时候才会发送语句查询数据库

a.类级别延迟

b.关联级别延迟

修改关联级别延迟

1)在映射文件中进行配置实现

2)set便签配置 fetch、lazy属性

批量抓取

set标签中配置 batch-seiz=””

整数值,值越大,效率越高

四、高级知识

1)一级、二级缓存

什么是缓存

数据存到数据库里面,数据库本身是文件系统,使用流方式操作文件效率不是很高。

1.把数据存到内存里面,不需要使用流方式,可以直接读取内存中数据

2.把数据放到内存中,提高读取效率

Hibernate缓存

1.hibernate框架中提供很多优化方式,hibernate的缓存就是一个优化方式

2.Hibernate缓存特点:

Hibernate一级缓存

(1)hibernate的一级缓存默认是打开

(2)Hibernate的一级缓存使用范围,是session范围

(3)hibernate的一级缓存中,存储数据必须是持久态数据

Hibernate二级缓存

(1)目前已经不使用了,替代技术redis

(2)二级缓存默认不是打开的,需要配置

(3)二级缓存使用范围,是sessionFactory范围

2)实体类对象的三种状态

1.瞬时态:对象里面没有id值,对象与session没有关联

2.持久态:对象里面有id值,对象与session关联

3.托管态:对象里面有id值,对象与session没有关系
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: