Hibernate学习——API学习
一.Configuration对象
解释:Hibernate的配置文件对象,是Hibernate启动加载的第一个对象,它会定位到映射文档的位置,读取配置文件,创建一个SessionFactory对象。
作用:加载核心配置文件
用法:
1.如果是Hibernate.properties文件(里面是键值对存放的配置信息)
Configuration cfg = new Configuration() //直接new就行了
2.如果是Hibernate.cfg.xml文件
Configuration cfg = new Configuration().configure("hibernate.cfg.xml"); //后面还要在跟一个configure()方法,方法里面可以传配置文件路径,不写默认加载就在src下名字叫hibernate.cfg.xml文件
如果该配置文件在src下的config包下
Configuration cfg = new Configuration().configure("/config/hibernate.cfg.xml");
注意:如果hibernate.cfg.xml里面没有加载映射文件(<mapping resource="">),那么就需要该对象来帮你加载映射文件
Configuration cfg = new Configuration().configure("hibernate.cfg.xml");
cfg.addResource("com/xxx/pojo/Customer.hbm.xml");
二。SessionFactory-session工厂对象
概述:SessionFactory接口负责HIbernate的初始化和建立session对象。他在hibernate中起到了一个缓冲区作用,hibernate可以将自动生成的sql语句、映射数据以及某些可以重复利用的数据放在这个缓冲区中,同时他还保存了对数据库配置的所有映射关系,维护当前的二级缓存。
获取:
SessionFactory sessionFactory = cfg.buildSessionFactory();//貌似这个方法很通用
注意:不同版本
1)在hibernate 3.x中的写法
SessionFactory sf = cfg.buildSessionFactory();
2)hibernate 4.0~hibernate 4.3的写法
ServiceRegistry sr = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();
3)hibernate 4.3的写法
ServiceRegistry registry = new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();
SessionFactory sf = cfg.buildSessionFactory(registry);
4)hibernate 5.1的写法
StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();
SessionFactory sessionFactory = new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory();
特点:
- 线程安全的,同一个实例能够供多个线程共享。
- 它是重量级的,不能随意的创建和销毁它的实例
一般情况下,一个项目只需要一个SessionFactory,只有当有多个数据源的时候,才会为每个数据源建立一个SessionFactory实例
三.Session对象
概述:Session接口负责负责被持久化对象的CRUD操作。Session对象是线程不安全的,(这个session其实就相当于jdbc里面的connection)是应用程序与数据库之间的交互操作的一个单线程对象,是hibernate运转核心。
功能:为持久化对象提供创建,读取和删除的能力,所有的持久化对象必须在session的管理下才可以进行持久化操作(为后面持久化类的状态做铺垫)
获取:
1.第一种方式获取:
Session session = sessionFactory.openSession(); //SessionFactory直接创建一个新的session实例,并且使用完成后需要调用close方法将session关闭
2.第二种方式:
Session session = SessionFactory.getCurrentSession(); //将session对象绑定到当前的线程中,随着事务提交或者回滚,线程结束,session也会自动销毁
session里面的方法
- save(),update(),saveOrUpdate() 用于增加和修改对象
- delete() 用于删除对象
- get()和load() 根据主键查询
- createQuery()和createSQLQuery() 用于数据库操作对象
- createCriteria() 条件查询
四:Transaction对象
Transaction接口主要用于管理事务,它是hibernate的数据库事务接口。
hibernate开启事务:
Transaction tx = session.beginTransaction();
方法:
- commit()方法:提交相关联的session实例
- rollback()方法:撤销事务操作。
Hibernate学习——API学习的更多相关文章
- Hibernate 马士兵 学习笔记 (转)
目录(?)[+] 第2课 Hibernate UML图 第3课 风格 第4课 资源 第5课 环境准备 第6课 第一个示例Hibernate HelloWorld 第7课 建立Annotation版本的 ...
- 框架源码系列十一:事务管理(Spring事务管理的特点、事务概念学习、Spring事务使用学习、Spring事务管理API学习、Spring事务源码学习)
一.Spring事务管理的特点 Spring框架为事务管理提供一套统一的抽象,带来的好处有:1. 跨不同事务API的统一的编程模型,无论你使用的是jdbc.jta.jpa.hibernate.2. 支 ...
- ssh架构之hibernate(二)进阶学习
1.JPA入门 JPA的认识:JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中Java持久层AP ...
- Openstack api 学习文档 & restclient使用文档
Openstack api 学习文档 & restclient使用文档 转载请注明http://www.cnblogs.com/juandx/p/4943409.html 这篇文档总结一下我初 ...
- ASP.NET MVC Web API 学习笔记---第一个Web API程序
http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html GetListAll /api/Contact GetListBySex ...
- Openstack python api 学习文档 api创建虚拟机
Openstack python api 学习文档 转载请注明http://www.cnblogs.com/juandx/p/4953191.html 因为需要学习使用api接口调用openstack ...
- Windows录音API学习笔记(转)
源:Windows录音API学习笔记 Windows录音API学习笔记 结构体和函数信息 结构体 WAVEINCAPS 该结构描述了一个波形音频输入设备的能力. typedef struct { W ...
- Hibernate的系统 学习
Hibernate的系统 学习 一.Hibernate的介绍 1.什么是Hibernate? 首先,hibernate是数据持久层的一个轻量级框架.数据持久层的框架有很多比如:iBATIS,myBat ...
- NSData所有API学习
www.MyException.Cn 网友分享于:2015-04-24 浏览:0次 NSData全部API学习. 学习NSData,在网上找资料竟然都是拷贝的纯代码,没人去解释.在这种网上 ...
随机推荐
- HBuilder真机联调、手机运行
第一步:先确认手机是否连接上 未连接状态 如下图所示为已连接状态 导致手机未成功连接的原因: (1)手机与电脑未用USB数据线连接(嘿嘿,这一部大家估计都做到了,可略过) (2)电脑上需要安装电脑版的 ...
- python_函数默认参数设计
>>> def printMax(a,b): if a>b: print(a,'is the max') else: print(b,'is hte max') >> ...
- 高通调试 SPI 屏的 bug
1. spi调试问题: 问题描述: spi屏幕lk启动的时候正常出现小企鹅,到kernel启动的过程黑屏并且花屏才到开机动画: 2. 黑屏的三个阶段: 参照:黑屏分析 分析开机过程黑屏,首先需要定位黑 ...
- Docker的安装和测试
1,Docker安装 Docker是啥,以及其与虚拟机的对比,就不介绍了,网上有很多资源可以学习和了解. 本篇文章重点介绍Docker的安装和测试使用. Docker的安装,分为离线安装和在线安装两种 ...
- struct和union的区别
1)union是几个不同类型的变量共占一段内存(相互覆盖):struct是把不同类型的数据组合成一个整体 2)对齐方式略有区别:union不需要+,只需要拿出对齐后的最长 structure unio ...
- http://www.runoob.com/lua/lua-basic-syntax.html
Lua优点及特性 Lua 是一个小巧的脚本语言. 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能.Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行.Lua并没 ...
- java并发之读写锁ReentrantReadWriteLock的使用
Lock比传统线程模型中的synchronized方式更加面向对象,与生活中的锁类似,锁本身也应该是一个对象.两个线程执行的代码片段要实现同步互斥的效果,它们必须用同一个Lock对象. 读写锁:分为读 ...
- Eclipse安装Jetty插件
通过Eclipse MarketPlace安装Jetty插件. Jetty下载 1. 2.3.4.5. 注:在使用Jetty的时候,同一个Project中,不可以同时存在两个版本的库,否则会出现找不 ...
- 前端为什么非要动静分离 说一下CDN托管的意义
大型Web应用对速度的追求并没有止步于仅仅利用浏览器缓存,因为浏览器缓存始终只是为了提升二次访问的速度,对于首次访问的加速,我们需要从网络层面进行优化,最常见的手段就是CDN(Content Deli ...
- golang自定义路由控制实现(二)-流式注册接口以及支持RESTFUL
先简单回顾一下在上一篇的文章中,上一篇我主要是结合了数组和Map完成路由映射,数组的大小为8,下标为0的代表Get方法,以此类推,而数组的值则是Map,键为URL,值则是我们编写对应的接口.但 ...