面试题:hibernate 第二天

## Hibernate第二天 ##

### 回顾与反馈 ###

Hibernate第一天
1)一种思想 : ORM OM(数据库表与实体类之间的映射) RM
2)一个项目 : CRM 客户关系管理系统 客户公司表
3)一个框架 : Hibernate 简化JDBC 面向对象的数据库操作
注意问题 : Hibernate简化了操作 但是牺牲了SQL的执行性能

线程问题 数据库连接放到线程
程序世界 程序运行期间 进程(一个软件运行期间驻留在内存中的一个程序) 与
进程接收到执行任务的时候 它就会创建一个线程去帮助我完成
这个任务
程序运行期间 内存里有一个进程 进程要做某些事情交给具体的线程
多线程

### 课程安排 ###

1. Hibernate的持久化类和对象标示符
2. Hibernate的一级缓存和对象状态
3. Hibernate的事务控制
4. Hiberante查询对象的API

### 重点内容 ###

1. Hibernate的持久化类和对象标示符
a. 描述Hibernate持久化类及编写规则
- 持久化类 : 持久化 某个java的普通类与表建立映射关系之后
- 规范
- 1) 持久化类需要无参的构造
- 2) 属性都是私有的 提供get set方法
- 3) 持久化类的属性都是包装类型 null int(0) Integer(null)
- 4) 持久化类中必须有一个属性与主键字段对应
- 5) implements Serializable
- JavaBean : Bean(豆角)-->封装思想 Java 玩积木
- Serializable 序列化 java对象-->保存到硬盘里的技术
- OID 表的主键ID --> 程序里被标记成<id>标签里面的属性
- 1) Hibernate用于区分两个对象的唯一途径
- 2) 对象标示符可以帮助session完成查询性能的优化
b. Hibernate中常用的主键生成策略
- 数据库主键
- Grade g_id g_name g_desc
- 一个汉字 2 字节 一个数字 1字节
- 主键要求 唯一
- 自然主键 : g_name(业务中的某个字段拿来当主键) 省了一个字段
- 代理主键(推荐) : 不参与真实业务的字段 只为数据库方便管理的主键
- Hibernate主键自增策略:
- native : 让数据库自己决定主键如何生存适合于能主键自增的数据(mysql sqlserver)
- sequence : 使用序列来生成主键,有的数据库不支持主键自增(Oracle)
- identity : 采用数据库的主键自增来生成主键(mysql,sqlserver,DB2)
- uuid : 根据128位数据算法生成32为的一个字母+数字的字符串用来标识主键
- uuid : 当你一个程序使用两个数据库的时候必须使用UUID作为同名表的主键ID; 数据1 数据2 userinfo (1 2 3 4) (1 2 3 4)
- 整理Hibernate的时候需要注意 : jar包 配置文件

2. Hibernate的一级缓存和对象状态
a. 能够描述Hibernate的一级缓存
- 缓存 : 临时存储硬盘数据到内存中的一项技术;
- 程序运行在内存里 所以当读取数据的时候 内存读内存 内存读硬盘快
- redis(2000)
- Hibernate为了提升查询性能也进行了缓存操作-->Session
- Session的一级缓存 是Hibernate用于进行数据库与程序之间沟通的一个桥;
- 当程序完成持久化操作的时候Hibernate会通过Session把该对象与相对应的数据库中的数据关联到一起;
- 快照机制 : 说明了session不光可以缓存数据库中的数据,还可以管理数据库中的数据,但是要注意快照机制只能简化更新操作;
- 缓存与快照机制保证了数据库的简化及性能提升操作;

b. Hibernate持久化对象的三种状态及特征

- Hibernate管理数据库表数据库的时候有个问题
- Java 类的对象
- Hibernate Session 管理的对象
- Hibernate管理Java对象的时候因为根据数据库数据对应于session管理不同分为三种状态
- 持久化 : 数据库有数据对应 被session管理
- 瞬时对象 : 数据库没有数据对应 session不管理
- 游离状态 : 数据库有数据对应 但是session不管理
- 操作 :
- 1) 添加的一定是瞬时的!
- 2) 更新和修改的一定是持久的!

3. Hibernate的事务控制
a. Hibernate进行事务控制
- 事务四大特性 多线程环境下事务并发问题 脏读 .....
- 事务隔离级别的设置

- 读未提交 最危险 事务操作最快 1
- 读已提交 比较适合 2
- 可重复读 比较笨拙 4
- 串行读 最安全 事务操作最慢 8
如果一旦出现事务隔离级别的设置 肯定涉及到多线程并发操作
JavaSE开发 单线程
b. 线程与session绑定的时候
1) 自定线程类与session绑定
private static ThreadLocal<Session> sessionTL = new ThreadLocal<Session>();
public static Session getSession(){
// 创建方法返回值
Session session = null;
// 1. 放到线程里 2.C3P0
// 当前线程先获取一下
session = sessionTL.get();
if(null == session){
session = factory.openSession();
// 把session放入当前线程
sessionTL.set(session);
}
// 返回
return session;
}
特点 : 查询方法不用加事务 但是编写其来麻烦
2) Hibernate默认绑定
<property name="hibernate.current_session_context_class">thread</property>
public static Session getCurrentSession(){
// 使用hibernat默认的session与线程绑定
return factory.getCurrentSession();
}
特点: 编写简单,但是所有的方法都必须加上事务才可以运行
4. Hiberante查询对象的API
X. 问题:不能查询所有
a. Query对象的作用及常用的方法
- HQL查询 : Hibernate query la...
- HQL查询 : Hibernate还是属于一种SQL查询;保留SQL结构,查询表被替换成类,查询字段被替换成属性;
- query查询 query对象 -->离开session
b. Criteria对象的作用及常用的方法

Criteria 可以离开session独立生存

### 课后总结 ###

作业: Hibernate+servlet完成一张表的CURD 分页
封装: 三层开发

原文地址:https://www.cnblogs.com/shan1393/p/9058320.html

时间: 2024-08-06 08:39:24

面试题:hibernate 第二天的相关文章

Hibernate第二章关联映射的总结

1.type值的解释:如下图: 1)type的值,不是java语言的一个类型的全称,而是一个hibernate自定义 的类型的名称. 2)Type的值,其实是对应hibernate中的一个类型的简称,而由 org.hibernate.type包下面的类型来真正完成java类型与数据库类型的传 换. 2.单类对单表的映射配置 1)类型的处理: I.各种:type II.精度:precision,scale III.逻辑值的处理:boolean,yes_no 2)主键的处理 Native,assig

hibernate第二天

1.修改 update() merge(): save() update() 有没有OID saveOrUpdate() 修改 saveOrUpdate()和merge()区别 解析:区别 1:saveOrUpdate() 会改变入参进来对象的状态 merge不会 区别 2: saveOrUpdate() 没有返回值 merge返回一个对象 2.OID OID 是持久化类(Student)与数据表主键对应属性, 用来唯一区分持久化对象. 3.删除 4.PO VO DTO POJO JavaBea

hibernate 第二天

Hibernate主键生成规则 Hibernate缓存 持久态会自动修改数据库 Hibernate事物的操作 Session Hibernate 的api使用  查询 Criteria对象 Sqlquery对象 但是这种方法不方便  可以使用下面的解决方法  返回的就是list对象的数据 开始第三天复习hibernate

笔试题整理 第二题

班上同学聚餐吃火锅,一锅煮了m(1<=m<=50)个鱼丸和n(1<=n<=50)个肉丸,现欲将m个鱼丸和n个肉丸分到k(1<=k<=50)个碗中,允许有空碗,鱼丸和肉丸不允许混在同一个碗里,问共有多少种装法? 假设碗足够大,能够装50个鱼丸和50个肉丸,并且碗没有任何区别.因此当m等于n等于1,k等于3时,有一种装法,因为110,101,011被看做同一种方法. #include <iostream> #include <vector> #inc

Hibernate最全面试题

Hibernate常见面试题 Hibernate工作原理及为什么要用? Hibernate工作原理及为什么要用? 读取并解析配置文件 读取并解析映射信息,创建SessionFactory 打开Sesssion 创建事务Transation 持久化操作 提交事务 关闭Session 关闭SesstionFactory 使用Hibernate框架就不用我们写很多繁琐的SQL语句.Hibernate实现了ORM,能够将对象映射成数据库表,从而简化我们的开发! Hibernate是如何延迟加载(懒加载)

Hibernate框架--对象的状态,缓存, 映射

回顾Hibernate第二天: 1.  一对多与多对一 2. 多对多 3. inverse/cascade 4. 关联关系的维护 一对多: <set name="映射的集合属性" table="(可选)集合属性对应的外键表"> <key column="外键表的,外键字段" /> <one-to-many class="集合元素的类型" /> </set> 多对一: <ma

Spring面试题集

k*  Spring的优点有什么? Spring是分层的架构,你可以选择使用你需要的层而不用管不需要的部分 Spring是POJO编程,POJO编程使得可持续构建和可测试能力提高 依赖注入和IoC使得JDBC操作简单化 Spring是开源的免费的 Spring使得对象管理集中化合简单化 *  描述一下spring中实现DI(dependency injection)的几种方式 方式一:接口注入,在实际中得到了普遍应用,即使在IOC的概念尚未确立时,这样的方法也已经频繁出现在我们的代码中. 方式二

Java开发者必读的5本最佳Hibernate书籍

Java开发者必读的5本最佳Hibernate书籍 分享到:17 本文由 ImportNew - will 翻译自 javarevisited.欢迎加入Java小组.转载请参见文章末尾的要求. Hibernate是最受欢迎的开源ORM(Object Relational Mapping 对象关系映射)框架之一,并且随着JPA的出现,它已成为开发Java企业级应用持久层的一个标准.我经常会收到这样一些反馈,如”哪本是学习hibernate最好的书籍”或”请推荐一些学习Spring和Hibernat

经典Java面试题收集(二)

经典的Java面试题(第二部分),这部分主要是与Java Web和Web Service相关的面试题. 96.阐述Servlet和CGI的区别? 答:Servlet与CGI的区别在于Servlet处于服务器进程中,它通过多线程方式运行其service()方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于Servlet. 补充:Sun Microsystems公司在1996年发布Servlet技术就是为了和CGI (Comm