Hibernate(二)之Hibernate-api详解
一、Hibernate体系结构
二、Hibernate-api详解
2.1、Configuration配置对象
Configuration是用来加载配置文件的
我们Hibernate中主要有两个配置文件,第一个是核心的配置文件,第二个是映射文件。
2.2、SessionFactory工厂
SessionFactory 相当于java web连接池,用于管理所有session
获得方式:config.buildSessionFactory();
sessionFactory hibernate缓存配置信息 (数据库配置信息、映射文件,预定义HQL语句 等)
SessionFactory线程安全,可以是成员变量,多个线程同时访问时,不会出现线程并发访问问题。
SessionFactory与连接池的区别
getCurrentSession()方法
2.3、session对象
用来操作数据库的。Sesion相当于JDBC中的Connection。我们通过session操作PO对象实现增删改查。
2.3.1、增
2.3.2、改
2.3.3、删
2.3.4、查
A.使用session中的get方法查询
结果:
B.使用session中的load方法
load方法.返回一个代理对象,获得其内容时,会查询数据库,是每次访问属性都会查询数据库吗?
答:不是每次都查.代理对象中有一个标识是否被初始化的boolean型变量. 记录是否被初始化过.
代理都是要基于接口的,用load方法返回的代理,就没有实现任何接口?
答:java中的动态代理是基于接口. 而 Hibernate 是使用javassist-3.12.0.GA.jar 产生代理对象的.
该代理与被代理对象之间的关系是继承关系.与我们学的动态代理不是一种.所以不需要接口.
出现bug:
分析:get和load的执行原理
C.使用HQL语言查询数据库中表的所有记录
D.使用Criteria查询所有数据库
E.使用原生的SQL语句查询
2.3.5、总结
在增删改查中我们学习的方法有
session.save();
session.update();
session.delete();
session.get();
session.load(); 对比get
session.createQuery();
session.createCritieria();
session.createSqlQuery();
2.4、Transaction对象
Transaction封装了事务的操作
一般事务的操作中有:
开启事务 beginTransaction()
获得事务 getTransaction()
提交事务 commit()
回滚事务 rollback()
细节处理
从这里中我们使用getCurrentSession()方法获得一个事务,当你没有关闭这个事务的时候,
当你再次获取事务,它们属于同一个事务。
2.5、Query对象
Query对象封装了HQL语句对象,且封装了查询的细节
2.6、Criteria对象(了解)
使用like查找
一些基本的查询条件查询
2.7、工具类
我们知道在使用hibernate进行增删改查的时候都要获取到session,这导致代码的重用性很强,所以我们可以
创建一个工具类去解决这个问题。
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session; //完成Hibernate工具类
//封装配置文件读取操作
//封装Sessionfactroy创建操作
//封装session获得操作
public class HibernateUtils { private static SessionFactory sf; static{
//1加载配置
Configuration conf = new Configuration().configure();
//2 根据Configuration 配置信息创建 SessionFactory
sf = conf.buildSessionFactory();
//
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { @Override
public void run() {
System.out.println("虚拟机关闭!释放资源");
sf.close();
}
})); } public static org.hibernate.Session openSession(){ //3 获得session
Session session = sf.openSession(); return session;
} public static org.hibernate.Session getCurrentSession(){
//3 获得session
Session session = sf.getCurrentSession(); return session;
} }
Hibernate(二)之Hibernate-api详解的更多相关文章
- hibernate学习(2)——api详解对象
1 Configuration 配置对象 /详解Configuration对象 public class Configuration_test { @Test //Configuration 用户 ...
- 分享知识-快乐自己:Hibernate 中Criteria Query查询详解
1):Hibernate 中Criteria Query查询详解 当查询数据时,人们往往需要设置查询条件.在SQL或HQL语句中,查询条件常常放在where子句中. 此外,Hibernate还支持Cr ...
- Hibernate配置文件和映射文件详解
Hibernate是一个彻底的ORM(Object Relational Mapping,对象关系映射)开源框架. 我们先看一下官方文档所给出的,Hibernate 体系结构的高层视图: 其中PO=P ...
- Java 8 Stream API详解--转
原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java8引入了 ...
- DOM API详解
来源于:http://zxc0328.github.io/2016/01/23/learning-dom-part1/ https://zxc0328.github.io/2016/01/26/lea ...
- Lucene系列六:Lucene搜索详解(Lucene搜索流程详解、搜索核心API详解、基本查询详解、QueryParser详解)
一.搜索流程详解 1. 先看一下Lucene的架构图 由图可知搜索的过程如下: 用户输入搜索的关键字.对关键字进行分词.根据分词结果去索引库里面找到对应的文章id.根据文章id找到对应的文章 2. L ...
- Android Developer -- Bluetooth篇 开发实例之四 API详解
http://www.open-open.com/lib/view/open1390879771695.html 这篇文章将会详细解析BluetoothAdapter的详细api, 包括隐藏方法, 每 ...
- Java8初体验(二)Stream语法详解(转)
本文转自http://ifeve.com/stream/ Java8初体验(二)Stream语法详解 感谢同事[天锦]的投稿.投稿请联系 tengfei@ifeve.com上篇文章Java8初体验(一 ...
- Java8初体验(二)Stream语法详解---符合人的思维模式,数据源--》stream-->干什么事(具体怎么做,就交给Stream)--》聚合
Function.identity()是什么? // 将Stream转换成容器或Map Stream<String> stream = Stream.of("I", & ...
- --系统编程-网络-tcp客户端服务器编程模型、socket、htons、inet_ntop等各API详解、使用telnet测试基本服务器功能
PART1 基础知识 1. 字节序 网络字节序是大端字节序(低地址存放更高位的字节), 所以,对于字节序为小端的机器需要收发网络数据的场景,要对这些数据进行字节序转换. 字节序转换函数,常用的有四个: ...
随机推荐
- OpenGl编程指南第7版(红宝书)环境配制
环境 OS:win7 旗舰版SP1 64位 编译器: VS 2013 express 的cl 软件 glut. 在这个页面https://www.opengl.org/resources/librar ...
- Alamofire源码解读系列(二)之错误处理(AFError)
本篇主要讲解Alamofire中错误的处理机制 前言 在开发中,往往最容易被忽略的内容就是对错误的处理.有经验的开发者,能够对自己写的每行代码负责,而且非常清楚自己写的代码在什么时候会出现异常,这样就 ...
- 基于MAC10.12+MYSQL5.7.17搭建XMPP服务器【黑苹果系统】
在以前的公司中了解到XMPP可以搭建即时通讯APP.出于好奇自己在空余时间也学了一下搭建XMPP服务器,其中遇到了许多问题,经过坎坷的路程终于搭建成功[这些坎坷的经历主要是由于自己的无知造成的] 下面 ...
- Redis从入门到精通
什么是Redis? Redis是非关系型数据库,是一个高性能的key-value数据库,它是开源的,更是免费的. Redis能做什么? 存储数据 Redis的优点有哪些? 1.它支持存储丰富的数据类型 ...
- Android--多线程之Handler 前言
前言 Android的消息传递机制是另外一种形式的“事件处理”,这种机制主要是为了解决Android应用中多线程的问题,在Android中不 允许Activity新启动的线程访问该Activity里的 ...
- MacOS无法登录App Store修复
MacOS无法登录App Store修复 2017-03-10 21:13:39 by:SemiconductorKING 先上图: 惨红色的提示信息,把你拒之App Store门外,但是对之放弃. ...
- 8个超炫酷的jQuery相册插件欣赏
在网页中,相册应用十分常见,如果你经常逛一些社交网站,那么你应该会注意到很多各式各样的网页相册应用.今天我们要来分享一些最新收集的jQuery相册插件,这些精美的jQuery相册插件可以帮助你快速搭建 ...
- 深究WeixinJSBridge未定义之因
对于一个没有使用微信JS-SDK的网站来说,我们竟然收到了WeixinJSBridge is not defined 的报错: 去网上一搜,发现很多开发者都遇到类似的问题: 我的微信项目,没有用到微信 ...
- 3410: [Usaco2009 Dec]Selfish Grazing 自私的食草者
3410: [Usaco2009 Dec]Selfish Grazing 自私的食草者 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 71 Solve ...
- 算法模板——sap网络最大流 2(非递归+邻接表)
实现功能:同最大流 1 这里面主要是把前面的邻接矩阵改成了邻接表,相比之下速度大大提高——本人实测,当M=1000000 N=10000 时,暂且不考虑邻接矩阵会不会MLE,新的程序速度快了很多倍(我 ...