hibernate 学习 五 hibernate核心接口
一 Configuration接口
Configuration对象只存在于系统的初始化阶段。配置相关。
配置文件可以使用默认的路径,也可以指定路径。
Configuration config = new Configuration().configure()
SessionFactory sessionfactory = Config.buildSessionFactory()
也可以使用new Configuration().setProperty()的方式动态配置属性
二 SessionFactory接口
通常一个应用程序只有一个SessionFactory实例,主要用来生成session对象。
但是,当项目中要操作多个数据库时,则必须为每一个DB指定一个SessionFactory。
Hibernate中sessionFactory相当于一个缓冲区,hibernate自动生成的SQL,映射数据,数据库配置,以及某些可重复利用的数据可以存放在换出去中,这是hibernate的二级缓存。
SessionFactory是线程安全的,他的一个实例可以多个线程共享。
OpenSession(): 调用时创建一个新的,用完后,要手动关闭,使用Close
GetCurrentSession(): 创建一个实例,并绑定到当前线程,在提交或失败回滚后自动关闭。
OpenSession用的比较少,一般都使用GetCurrentSession();
必须在hibernate.cfg.xml中配置事务。
<session-factory>
<!-- Put other elements here -->
<property name="hibernate.current_session_context_class">thread/JTA</property>
</session-factory>
JDBC事务和JATA事务的区别:
JDBC的一切行为包括事务是基于一个Connection的,在JDBC中是通过Connection对象进行事务管理。在JDBC中,常用的和事务相关的方法是:
setAutoCommit、commit、rollback等。JDBC为使用Java进行数据库的事务操作提供了最基本的支持。通过JDBC事务,我们可以将多个SQL语句放到同一个事务中,
保证其ACID特性。JDBC事务的主要优点就是API比较简单,可以实现最基本的事务操作,性能也相对较好。但是,JDBC事务有一个局限:
一个 JDBC 事务不能跨越多个数据库!!!所以,如果涉及到多数据库的操作或者分布式场景,JDBC事务就无能为力了。
JTA:分布式事务
三 Session接口
session对象的生命周期以Transaction对象的事务开始和结束为边界。
对象的三个状态:(1)瞬时态; (2)持久态; (3)游离态;
save() : 将对象加入缓存; 生成唯一标识; 生成insert语句
update(): 将对象加入缓存; 生成update语句;
saveOrUpdate():
delete():
get(): 先从一级缓存查,如果没有则越过二级缓存,查DB; 无论Class元素的lazy属性是什么,都直接返回实体类; 不存在时返回NULL; 不延迟加载
load(): 先一级缓存,再二级缓存;当Class元素的lazy属性是false时,会返回持久化对象的代理类实例; 不存在返回异常; 延迟加载
contains():
evict() : 清空缓存;
clear() :清空缓存
createQuery(): HQL
createCriteria():
createSQLQuery( ):SQL
createFilter()
四 Transaction接口
管理事务的接口;
事务:为了避免数据不完整,不一致;
事务的ACID:原子性, 一致性,持久性,隔离性(可串行性)。
不完全的事务隔离会导致如下问题:
更新丢失:
脏数据:
不可重复读:
幻读:
隔离级别:
读操作未提交:可以读取事务的中间状态(读取未提交的数据), 脏读,不可重复读,幻读
读操作已提交:不能读取未提交的事务; 不会脏读, 但是可以不可重复读,幻读;
可重读:保证能读取相同的数据不会丢失,不会脏读,不会不可重复读;但是会幻读;
可串行化:最严格;
hibernate可以对事务进行配置:本地事务 或者 全局事务; 还可以对隔离级别进行设置(8-串行化; 4-可重复读;2-读已提交; 1:读未提交);
常用方法:
commit():
rollback():
五 Query接口
HQL , QBC, SQL 三种查询的方式;
HQL: 不是引用表名和字段名,而是引用类名和属性名。
setter():设置HQL中的参数;参数有两种表示: 一是用名称: 是 “:参数名”(这种方式更容易阅读); 二是用:?
list(): 将所有结果集中的数据转换为java对象,占很大空间,浪费;
iterator(): 把使用到的数据才转成java对象;但是必须顺序读取。
uniqueResult() : 返回唯一的结果;
executeUpdate() :
setFirstResult()
setMaxResult() :
实体查询: String hql = "from Users as U";
属性查询: “select name,age from User”
"slect new User(name, age) from User"
HQL 聚集函数:
HQL分组和排序:
HQL子查询:
六 Criteria接口
更加面向对象的查询方式
hibernate 学习 五 hibernate核心接口的更多相关文章
- Hibernate学习(五)Hibernate 多对多映射
说到多对多关系,印象最深刻的就是大学的选修课.一个学生可以选修多门课程,一门课程可以有多个学生选修,学生所选的每一门课程还有成绩.这个场景的E-R图如下: 对于多对多的关系,我们通常会抽出一张中间表( ...
- hibernate学习五 Hibernate补充
1 MiddleGenIDE可以生成映射类和映射文件. 2
- Hibernate学习之——Hibernate环境搭建
之前在写关于安卓闹钟的教程,写了一半就没后一半了,其实自己也没做好,在校外实习,校内毕业实习又有任务,只能先放放了,等毕业实习结束之后,在继续安卓闹钟开发之旅,相信这个时间不会很久的.现在毕业实习用到 ...
- Hibernate学习0.Hibernate入门
Hibernate是什么 面向java环境的对象/关系数据库映射工具. 1.开源的持久层框架. 2.ORM(Object/Relational Mapping)映射工具,建立面向对象的域模型和关系数据 ...
- hibernate学习之Hibernate API
1. Hibernate Api分类 1)提供访问数据库的操作(如保存,更新,删除,查询)的接口.这些接口包括:Session, Transaction,,Query接口. 2)由于配置Hiberna ...
- Hibernate学习笔记-Hibernate HQL查询
Session是持久层操作的基础,相当于JDBC中的Connection,通过Session会话来保存.更新.查找数据.session是Hibernate运作的中心,对象的生命周期.事务的管理.数据库 ...
- Hibernate学习之Hibernate流程
Hibernate的核心组件 在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层.它通过配置文件(hibernate.properties或hibernate. ...
- hibernate(五)核心开发接口与对象的三种状态
本文链接:http://www.orlion.ml/37/ 一.Configuration 1.AnnotationConfiguration 2.进行配置信息的管理 3.configure()方法通 ...
- Hibernate的五个主要接口
Hibernate作为持久成中间件,它的具体实现对与上层调用是透明的,即上层通过接口来调用Hibernate的具体实现,所以对于入门级别的讨论来说,自然应该先从接口开始了.
随机推荐
- 需要配置执行path?no
下面的代码以管理员权限运行即可,保存为bat 2018/2/6(basic) - 初始化版本 @echo off :continue echo 输入exit退出 set /p My_PATH=请输入要 ...
- Odoo HRMS应用简介
Odoo HRMS包含行政管理的大部分功能,包含 部门组织架构 员工清册 岗位规划以及招聘管理 用工合同 考勤管理 休假和加班 费用报销 员工考核 绩效.激励.培训成绩 薪资清册 个角色 角色 ...
- js replace 全局替换 以表单的方式提交参数 判断是否为ie浏览器 将jquery.qqFace.js表情转换成微信的字符码 手机端省市区联动 新字体引用本地运行可以获得,放到服务器上报404 C#提取html中的汉字 MVC几种找不到资源的解决方式 使用Windows服务定时去执行一个方法的三种方式
js replace 全局替换 js 的replace 默认替换只替换第一个匹配的字符,如果字符串有超过两个以上的对应字符就无法进行替换,这时候就要进行一点操作,进行全部替换. <scrip ...
- Python--数据类型整理
数据类型整理-------------------------------------------------------------------------------------------- ...
- kubernetes高级之pod安全策略
系列目录 什么是pod安全策略 pod安全策略是集群级别的用于控制pod安全相关选项的一种资源.PodSecurityPolicy定义了一系列pod相要进行在系统中必须满足的约束条件,以衣一些默认的约 ...
- Active Directory组织单位(Organizational Unit)操作汇总
前言 本章聊Active Directory的组织单位(OU)的新增.修改.移动等操作,使用.NET Framework 为我们提供的System.DirectoryServices程序集. 不积跬步 ...
- C语言malloc
在子函数里面动态申请的内存不会自动被系统收回的,因为这些空间在堆里面,而不是栈,平常所说的不能返回指向栈的指针,比如在子函数里面定义一个字符指针,指向常量"hello"因为函数调用 ...
- PHP debug_backtrace() 函数
PHP Error 和 Logging 函数 实例 生成 PHP backtrace: <?php function a($txt) { b("Glenn"); } func ...
- WPF3.5 使用BINDINGGROUP进行实体类和集合验证
前文介绍了自定义或系统自带的ValidationRule进行验证,这种方法对于单个元素的验证不错.很多时候,我们需要对表单(Form)进行验证,也就是对一个实体类进行验证,或者对一个集合的每项进行验证 ...
- Spring中的JDBC操作
一.Spring模板JdbcTemplate 为了使 JDBC 更加易于使用, Spring 在 JDBC API 上定义了一个抽象层, 以此建立一个 JDBC 存取框架JdbcTemplate. 作 ...