Hibernate知识梳理
程序员文章站
2022-03-02 10:21:06
...
《概念介绍回顾》
JavaEE三层结构
1.web层:(视图) --struts2
2.service层:(业务逻辑) --spring
3.dao层:(数据访问) --hibernate
MVC思想
model:模型
view:视图
control:控制器
ORM思想
Object Relational Mapping 对象关系映射
1.hibernate使用orm思想,对数据库进行crud操作
2.让实体类和数据库进行一一对应
实体类名和表名对应
属性名和表字段名对应
3.不需要操作数据库表,而是操作表对应的实体类对象
《hibernate框架基本操作》
1.导入相应jar包
2.实体类--也叫持久化类
3.映射配置文件 实现类库映射关系
4.核心配置文件
《实现添加操作》
(1)是否生成表
(2)表中是否有数据
Configuration:
加载核心配置文件
SessionFactory*
(1)使用configuration对象创建sessionFactory对象,
在这过程中,它会根据核心配置文件中的配置,将表创建出来
(2)但创建sessionFactory对象,这个过程特别消耗资源,
(3)解决方案--写工具类
--使用静态代码块实现,它在类加载的时候执行,且只执行一次
这就保证了一个项目只创建一个sessionFactory对象
Session*
1.调用session中的各个方法,实现crud操作
-添加和修改
save();
update();
saveOrUpdate();
-删除
delete();
-根据id主键查询--返回一条数据 即 一个对象
get()和load();
-条件查询
createCriteria();
-操作数据库对象
createQuery();createSQLQuery();
2.最大特点--单线程对象
-session对象不能和别人共用,只能自己用
(通俗的说,一个软件就是一个进程,它里边的各个功能,就称为线程,
每个功能在同一时间只能操作一次,叫单线程)
-如何保证session是绝对的单线程对象呢?
hibernate实现与本地线程绑定session
(1)在核心配置文件中配置
(2)调用SessionFactory中的方法
(3)若是使用此种方法,则最后 session资源不需要我们手动关闭
Transaction:
提交:commit();
回滚:rollback();
《实体类(持久化类)编写规范》
1.私有属性
2.公有get/set方法、无参构造器、toString方法
3.要求有一个属性 作为唯一值--泛指id值
4.数据类型使用相应的包装类
《主键生成策略》
1.native--整数类型,根据使用的数据库,自动适应
(但是eclipse工具有问题,这个没效果 我目前只能用identity)
2.uuid--使用此种主键生成策略,实体类id属性必须是字符串类型
《实体类对象状态-概念》
-瞬时态:对象里边没有id值,对象与session没有关联--添加操作
-持久态:对象里边有id值,对象与session有关联--id查询
-托管态:对象里边有id值,对象与session没有关联
《hibernate的缓存》
1.一级缓存
>> 默认就是打开的
>> 使用范围 是session范围(从session创建 到session关闭)
>> 存储的数据 必须是持久态数据
验证方式:
第一步 根据id查询(此时是进入数据库查)
输出对象,观察控制台会出现select语句
说明是进入数据库查的
第二步 再次根据id查询(此时就是进入一级缓存里查)
输出对象,但控制台没有出现数据库查询语句,
这就说明第二次查询是从一级缓存中查的
特性:在根据id进行修改的时候,
因为有一级缓存的存在, 底层会自动去更新库表
所以我们不写session.update方法,也可以实现修改功能
2.二级缓存
>> 可以用Redis技术替代
>> 默认不打开
>> 使用范围 是sessionFactory范围(整个web项目)
《Hibernate事物规范写法》
1.代码结构
try{
加载文件、sessionFactory、session
开启事物
curd操作
提交事物
}catch(Exception){
e.printStackTrace();--输出异常
回滚事物
}finally{
关闭资源
}
《Hiernate的api使用》
Query对象查询所有记录*
1.hql语句: hibernate query language(hibernate查询语言)
2.hql与sql语句的区别:
使用sql操作表和字段
使用hql操作实体类和属性
3.查询所有 hql语句写法:
from 实体类名称
4.Query对象使用
-调用session中的方法 创建Query对象
-调用Query对象中的方法得到结果(返回的是list集合)
Criteria对象查询
该对象不用写hql语句,创建对象,直接调用方法(返回的是list集合)
SQLQuery对象查询
该对象需要写sql语句,
创建对象,
调用方法(返回的是list数组)
升级优化:把返回的数组转换为对象的形式
上一篇: 叉乘: 点和直线关系
下一篇: Activity之间交换数据