什么是Hibernate?
Hibernate是基于ORM(O:对象,R:关系,M:映射)映射的持久层框架,是一个封装JDBC的轻量级框架,主要实现了对数据库的CUPD操作。
注:CRUD是指在做计算处理时的增加(Create)、查询(Retrieve)(重新得到数据)、更新(Update)和删除(Delete)几个单词的首字母简写。主要被用在描述软件系统中数据库或者持久层的基本操作功能。
Hibernate中的核心接口和类
Hibernate的核心类和接口一共有6个,分别为:Session、SessionFactory、Transaction、Query、Criteria和Configuration。这6个核心类和接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。
Session接口:负责对象的持久化操作,但需要注意的是它非线程安全的。
SessionFactory接口:负责Hibernate的初始化操作,数据存储的代理对象,并且负责创建Session对象,
Transaction接口:负责数据的事务操作。
Query接口:负责数据库及持久化对象的查询操作,它可以有两种表达方式:HQL语言或本地数据库的SQL语句。Query经常被用来绑定查询参数、限制查询记录数量,并最终执行查询操作。
Criteria接口:Criteria接口与Query接口非常类似,允许创建并执行面向对象的标准化查询。值得注意的是Criteria接口也是轻量级的,它不能在Session之外使用。
Configuration类:Configuration 类的作用是对Hibernate 进行配置,以及对它进行启动。在Hibernate 的启动过程中,Configuration 类的实例首先定位映射文档的位置,读取这些配置,然后创建一个SessionFactory对象。虽然Configuration 类在整个Hibernate 项目中只扮演着一个很小的角色,但它是启动hibernate 时所遇到的第一个对象。
Hibernate的工作流程:
工作流程图:
Hibernate持久化操作的七个步骤:
1.创建Configuration对象,并加载cfg.xml配置文件;(配置文件可以通过Eclipse自动生成)
2.通过Configuration对象构建SessionFactory工厂;
3.通过SessionFactory工厂打开一个Session会话;
4.开启事务;(查询方法可省略)
5.用Session会话进行数据库及持久化对象的CRUD操作;
6.提交事务;(查询方法可省略)
7.关闭会话;
代码如下:
import java.util.List; import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.Restrictions; public class HibernateTest { public void Test(){
//创建Configurtion对象并加载cfg.xml配置文件
Configuration conf = new Configuration().configure("hibernate.cfg.xml");
//构建SessionFactory工厂
SessionFactory sessionFactory = conf.buildSessionFactory();
//打开Session会话
Session session = sessionFactory.openSession();
//开启事务(增删改)需要开启事务 查询可以不用开启事务
Transaction transaction = session.beginTransaction(); //创建Users类对象
Users users = new Users(); /**
* Session中封装的几个常用的方法
*/
//调用Session中添加的方法
session.save(users);
//调用Session中删除的方法
session.delete(users);
//调用Session中修改的方法
session.update(users);
//调用Session中根据主键查询某个类的方法
session.get(Users.class,users.getId()); //根据HQL语句查询
String hql = "from Users";
Query query = session.createQuery(hql);
List<Users> userList = query.list(); //根据SQL语句查询
String sql = "select * from Users";
SQLQuery sqlQuery = session.createSQLQuery(sql);
List<Users> sqlUsersList = sqlQuery.list(); //根据你给的Bean.class类来指定查询哪个类
Criteria criteria = session.createCriteria(Users.class);
//用Criteria对象来添加条件(括号中用Restrictions对象来选择你要添加哪一种条件)
criteria.add(Restrictions.ilike("name", "华盛顿%")); /**
* 提交事务后将对数据库进行增删改查操作
* 可以通过条件判断来确定是否提交事务
* 例如:
* 如果程序运行正常提交事务
* 否则让事务回滚
* 回滚后将不对数据库进行操作
* 事务的回滚: transaction.rollback();
*/
//提交事务
transaction.commit(); //关闭Session会话释放资源
session.close(); } }
Java三大框架之——Hibernate的更多相关文章
-
java三大框架之一hibernate使用入门
综述:Hibernate的作用就是让实体类与数据库映射,使数据持久化,用于替代JDBC,使我们不致于写那么多sql语句代码. 1. 首先在官网www.hibernate.org下载hibernate包 ...
-
Java三大框架之——Hibernate关联映射与级联操作
什么是Hibernate中的关联映射? 简单来说Hibernate是ORM映射的持久层框架,全称是(Object Relational Mapping),即对象关系映射. 它将数据库中的表映射成对应的 ...
-
java三大框架——Struts + Hibernate + Spring
Struts主要负责表示层的显示 Spring利用它的IOC和AOP来处理控制业务(负责对数据库的操作) Hibernate主要是数据持久化到数据库 再用jsp的servlet做网页开发的时候有个 w ...
-
Java三大框架之——Hibernate中的三种数据持久状态和缓存机制
Hibernate中的三种状态 瞬时状态:刚创建的对象还没有被Session持久化.缓存中不存在这个对象的数据并且数据库中没有这个对象对应的数据为瞬时状态这个时候是没有OID. 持久状态:对象经过 ...
-
Java三大框架 介绍
三大框架:Struts+hibernate+spring Java三大框架主要用来做WEN应用. Struts主要负责表示层的显示 Spring利用它的IOC和AOP来处理控制业务(负责对数据库的操作 ...
-
java 三大框架 介绍
三大框架:Struts+Hibernate+Spring Java三大框架主要用来做WEN应用. Struts主要负责表示层的显示 Spring利用它的IOC和AOP来处理控制业务(负责对数据库的操作 ...
-
[转]JAVA三大框架SSH和MVC
Java—SSH(MVC) JAVA三大框架的各自作用 hibernate是底层基于jdbc的orm(对象关系映射)持久化框架,即:表与类的映射,字段与属性的映射,记录与对象的映射 数据库模型 也就 ...
-
JAVA三大框架的各自作用
http://christhb.blog.163.com/blog/static/98982492011727114936239/ 一.Spring Spring是一个解决了许多在J2EE开发中常见的 ...
-
JAVA三大框架SSH的各自作用
一.Spring Spring是一个解决了许多在J2EE开发中常见的问题的强大框架. Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯. Spring的 ...
随机推荐
-
perl 从文件里读出变量无法使用解决办法
最近在写一个perl函数,把test case 放到配置文件里,读出来然后使用system运行. 我的本意是: 配置文件conf ping -c $count $ip #在主程序中定义$ip和$cou ...
-
meta 页面元信息定义
禁止页面缓存 1.name属性 name属性主要用于描述网页,与之对应的属性值为content,content中的内容主要是便于搜索引擎机器人查找信息和分类信息用的. meta标签的name属性语法格 ...
-
Java编程-第一个Java程序
Java编程用到的IDE是Eclipse. 关于第一个Java程序实现的简单流程: (1) 下载eclipse (2) File-New-Java Project 命名工程名字:Hello ...
-
iOS获取健康步数从加速计到healthkit
计步模块接触了一年多,最近又改需求了,所以又换了全新的统计步数的方法,整理一下吧. 在iPhone5s以前机型因为没有陀螺仪的存在,所以需要用加速度传感器来采集加速度值信息,然后根据震动幅度让其加入踩 ...
-
javascript中,你真的会用console吗?
使用console进行性能测试和计算代码运行时间 对于前端开发人员,在开发过程中经常需要监控某些表达式或变量的值,如果使用用debugger会显得过于笨重,最常用的方法是会将值输出到控制台上方便调试. ...
-
2014.9.15HTML
<html> <title> </title> ——页面标题 <head> </head> ——网页上的控制信息 <body> ...
-
C++/C# 开发高级案例资料一次送!关注加群领取哦!
目前C/C++.C#.JAVA等语言开发的在线教育比较火爆,但小编所见的讲解高级案例的非常少,切合市场需求的较少.而且针对铁路.公路.建筑.市政.制造业等所有工业计算机辅助设计的开发技术和案例几乎没有 ...
-
1.Docker简介【Docker每天5分钟】
Docker给PaaS世界带来的“降维打击”,其实是提供了一种非常便利的打包机制.该机制打包了应用运行所需要的整个操作系统,从而保证了本地环境和云端环境的高度一致,避免了用户通过“试错”来匹配不同运行 ...
-
Android UI(三)SlidingMenu实现滑动菜单(详细 官方)
Jeff Lee blog: http://www.cnblogs.com/Alandre/ (泥沙砖瓦浆木匠),retain the url when reproduced ! Thanks ...
-
转载 - CNN感受野(receptive-fields)RF
本文翻译自A guide to receptive field arithmetic for Convolutional Neural Networks(可能需要FQ才能访问),方便自己学习和参考.若 ...