Configuration
SessionFactory
Session
Transaction
Query
Criteria

Configuration

Configuration对象用于封装Hibernate的配置信息,在Hibernate框架启动后,需要装载对应的配置文件。Hibernate的配置文件有两种格式
hibernate.properties文件(早期格式)
hibernate.cfg.xml文件(常用格式)

使用hibernate.properties加载配置
  Configuration conf = new Configuration ();//此方式无法配置资源文件,必须手动添加
资源文件添加方式
  添加配置文件(非主流)
    conf. addResource(“cn/itcast/h3/user/vo/UserModel.hbm.xml”);
  添加持久化类(非主流)
    conf.addClass(UserModel.class);
    此方式Hibernate会自动读取当前类所在目录下同名的配置文件,UserModel.hbm.xml,所以在进行配置文件的命名时尽量保持两个文件名相同,不推荐使用不同名称的文件

使用hibernate.cfg.xml加载配置
Configuration conf = new Configuration.configure();
此方式可以将资源文件通过XML配置的方式加入配置文件
资源文件配置方式
添加配置文件(主流)
  <mapping resource="cn/itcast/h3/user/vo/UserModel2.hbm.xml"/>
添加持久化类(非主流)
  <mapping class="cn.itcast.h3.user.vo.UserModel"/>

SessionFactory

SessionFactory对象根据Configuration对象加载的配置信息创建得到,其中封装了配置信息中有关数据库的信息、所有的映射关系及预定义SQL语句
SessionFactory对象是线程安全的
SessionFactory对象可以通过Configuration对象获得
Configuration conf = new Configuration().configure();
SessionFactory sf = conf.buildSessionFactory();
由于SessionFactory对象的创建需要基于所有的配置信息,因此创建此对象需要消耗大量的资源,通常一个应用程序中只初始化一个SessionFactory对象

Session

Session对象是Hibernate与应用程序APP进行交互的桥梁,应用程序与Hibernate之间通过Session进行数据交互,其功能相当于JDBC中的Connection
Session对象描述的是一次Hibernate与APP的会话信息,因此Session对象是线程不安全的。在使用时要保障该对象只出现在方法内部运行,而不要共享
Session对象位于应用程序与数据库之间,应用程序需要持久化的对象交由Session传递给数据库,应用程序需要获取数据库的信息也同样是从Session对象处获取,Session对象可以看做是一个数据调度中心

应用程序添加、删除、修改数据
应用程序在进行增删改操作时,将数据传递给Session对象,Session对象持有应用程序要进行操作的数据,此时数据并未执行对应的SQL语句。当Session对象执行关闭操作前,会将所持有的数据同步到数据库中,也可通过flush方法手动刷新session对象的数据存储空间,完成数据同步。但是这一切要基于事务开启的状态,否则即便执行SQL语句,不提交事务也将无意义。
应用程序查询数据
Hibernate查询得到的数据在Session未关闭前同样受Session的管理,满足上述规则。

Session常用操作

save(Object) / persist(Object)
update(Object)
saveOrUpdate(Object)
delete(Object);
get(Class, Serializable) / load(Class, Serializable)
createQuery(String) / createSQLQuery(String)
createCriteria(Class) 条件查询

HibernateUtil工具类的制作

package cn.itcast.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class HibernateUtil {
private static Configuration conf = null;
//静态的SessionFactory
private static SessionFactory sf = null;
static{
conf = new Configuration().configure();
sf = conf.buildSessionFactory();
}
public static SessionFactory getSf(){
return sf;
}
/**
* 获取Session对象
* @return 全新的Session对象
*/
public static Session getSession(){
return sf.openSession();
}
}

Transaction

Transaction对象描述Hibernate执行过程中事务对象
数据库操作中事务是保障数据操作成功的重要因素
事务操作主要包含以下几种
开启事务
Transaction t = s.beginTransaction();
提交事务
t.commit();
回滚事务
t.rollback();

Hibernate为了避免开发者在使用事务时未进行事务处理,在核心配置中添加了自动事务的解决方案,但是这种事务处理机制是针对Session的操作的,换言之每次进行Session操作都会为其提供一个独立的事务。详细内容到核心配置部分讲解。

Query

Query对象描述了用于进行查询操作的对象,Query对象执行查询操作需要使用HQL语言。Query对象通过Session对象获得
Query q = s.createQuery("from UserModel");
其中“from UserModel”使用的就是HQL语言的语法规则
HQL语言是Hibernate框架中根据SQL语言发展得到的一种面向对象操作格式的查询语句,是Hibernate中主流的查询方式。

使用Query进行查询
步骤:
  获得Session对象
  编写HQL语句(字符串格式)
  由Session对象创建执行查询操作的Query对象,并传入HQL语句作为参数
    HQL语句编写时应满足预编译SQL的语法格式
    如果HQL语句中有参数,为Query对象指定操作的参数
    有关HQL语句中携带参数的查询后面详细讲解
    执行Query对象的数据列表方法获得查询结果
    q.list();
    q.uniqueResult();

Query进行查询的结果
Query对象获取查询结果的方式有两种
使用list()获得查询结果
使用uniqueResult()获得查询结果

使用list()获得查询结果
list方法用于获得查询数据结果为0到多条的情况
list方法执行后得到List集合,其中封装了查询的结果,结果要根据具体的查询语句结构来进行解析,数据有两种格式
对象模型(***Model)
HQL格式:“from UserModel”
HQL格式:“select um from UserModel um”
对象数组(Object[])
HQL格式:”select userName,age from UserModel“
查询的内容超过一个,返回一个对象数组,封装查询结果

投影

投影是将返回Object[]的对象封装成对象模型的格式
投影在使用时使用构造方法完成
1)首先在模型类中声明投影需要的构造方法
例如UserModel类中创建带有userName和age属性的构造方法
2)然后查询时修改HQL语句,改为投影格式
原始格式:select userName,age from UserModel
投影格式:select new UserModel(userName,age) from UserModel
3)最后从Query对象中获得的查询结果就是封装完成的对象
List<UserModel> queryList = q.list();
投影要求构造方法参数必须与HQL语句中参数顺序完全相同,并且要求大量的构造方法才能全兼容(不常用)。

使用uniqueResult()获得查询结果
uniqueResult方法用于获得查询数据结果为1条的情况
uniqueResult方法执行后得到Object对象,其中封装查询的结果
uniqueResult常用于获得聚合函数的查询结果
查询数据总量:select count(uuid) from UserModel
查询最大数据:select max(age) from UserModel

Query进行分页查询

1)Query对象可以对查询结果进行局部获取,也就是JEE中常用的“分页查询”结果
2)Query对象进行查询数据局部获取
设定查询的第一条数据编号
q.setFirstResult(10);
设置查询结果保留索引从第10条开始的数据
设定查询的数据总量
q.setMaxResults(20);
设置查询结果保留共20条数据
3)Query对象的分页查询结果可以根据数据库类型不同,自动生成对应的语句(与方言设置匹配)

Query可变参数条件查询

Criteria

Cirteria对象描述了用于进行按条件查询操作的对象,它可以按照面向对象的格式传递查询条件。
Cirteria对象通过Session对象获得,创建时需要
Criteria c = s.createCriteria(UserModel.class);
其中UserModel.class是要查询的数据模型类
使用Criteria对象可以省去书写SQL或HQL的环节

使用Criteria进行查询(简)
步骤:
1)获得Session对象
2)由Session对象创建执行查询操作的Criteria对象
Criteria c = s.createCriteria(UserModel.class);
3)如果存在有查询条件,为查询添加查询条件(后面详细讲解)
c.add(Restrictions.eq("userName", "jockme"));
4)执行Criteria对象的数据列表方法获得查询结果
c.list();
c.uniqueResult();

hibernate框架学习之核心API的更多相关文章

  1. hibernate框架学习之核心配置文件

    hibernate.cfg.xml <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration ...

  2. hibernate框架学习第二天:核心API、工具类、事务、查询、方言、主键生成策略等

    核心API Configuration 描述的是一个封装所有配置信息的对象 1.加载hibernate.properties(非主流,早期) Configuration conf = new Conf ...

  3. hibernate框架学习笔记3:API详解

    Configuration对象: package api; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configur ...

  4. Hibernate框架学习(二)——api详解

    一.Configuration对象 功能:配置加载类,用于加载主配置,orm元数据加载. //1.创建,调用空参构造(还没有读配置文件) Configuration conf=new Configur ...

  5. [ SSH框架 ] Hibernate框架学习之二

    一.Hibernate持久化类的编写规范 1.什么是持久化类 Hibernate是持久层的ORM影射框架,专注于数据的持久化工作.所谓持久化,就是将内存中的数据永久存储到关系型数据库中.那么知道了什么 ...

  6. hibernate框架学习笔记6:事务

    MySQL的事务.JDBC事务操作: 详细见这篇文章:比较详细 http://www.cnblogs.com/xuyiqing/p/8430214.html 如何在hibernate中配置隔离级别: ...

  7. [ 学习笔记 ] Hibernate框架学习之一

    一.JavaEE开发三层结构和三大框架的对应关系: Struts2框架 -> 表现层 web层(MVC是表现层的设计模型) 业务层 service层 Hibernate框架 -> 持久层 ...

  8. [ SSH框架 ] Hibernate框架学习之三

    一.表关系的分析 Hibernate框架实现了ORM的思想,将关系数据库中表的数据映射成对象,使开发人员把对数据库的操作转化为对对象的操作,Hibernate的关联关系映射主要包括多表的映射配置.数据 ...

  9. Hibernate框架学习(一)——入门

    一.框架是什么 1.框架是用来提高开发效率的 2.封装好了一些功能,我们需要使用这些功能时,调用即可,不需要手动实现 3.框架可以理解成一个半成品的项目,只要懂得如何驾驭这些功能即可 二.hibern ...

随机推荐

  1. Linux记录-文件格式

    yum -y install dos2unix dos2unix filename

  2. golang os包使用笔记

    zhangsan os.Stidn 标准输入 os.Stdout 标准输出 os.Stderr 标准错误输出

  3. js学习总结:DOM节点一(选择器,节点类型)

    DOM:document object model 文档对象模型 DOM就是整个HTML文档的关系图谱(代表整个HTML文档),可以理解为下图: 一.查看元素节点 1.document.getElem ...

  4. 【leetcode-101】 对称二叉树

    101. 对称二叉树 (1过) 给定一个二叉树,检查它是否是镜像对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个 [ ...

  5. 2016vijos 1-3 兔子的晚会(生成函数+倍增FWT)

    求出序列的生成函数后,倍增FWT #include<cstdio> using namespace std; #define N 2048 ; int inv; ]; int Pow(in ...

  6. PHP7 网络编程(一)多进程初探

    准备 我们都知道PHP是单进程执行的,PHP处理多并发主要是依赖服务器或PHP-FPM的多进程及它们进程的复用,但PHP实现多进程也意义重大,尤其是在后台Cli模式下处理大量数据或运行后台DEMON守 ...

  7. Linux 三剑客 -- awk sed grep

    本文由本人收集整理自互联网供自己与网友参考,参考文章均已列出,如有侵权,请告知! 顶配awk,中配sed,标配grep awk 参考 sed 参考 grep 参考 在线查看linux命令速记表 app ...

  8. GIT与SVN的比较

    Git: 1. 分布式版本控制2. 不需要网络,本地就可以操作版本控制3. 可以是公用的,可以分享4. 不依赖于中央服务器,即使服务器有问题也不会有影响5. 传输方式不一样,git要比svn快很多6. ...

  9. Tornado的异步非阻塞

    阻塞和非阻塞Web框架 只有Tornado和Node.js是异步非阻塞的,其他所有的web框架都是阻塞式的. Tornado阻塞和非阻塞两种模式都支持. 阻塞式: 代表:Django.Flask.To ...

  10. 3.1HashMap源码分析

    在前篇博文中(HashMap原理及实现学习总结)详细总结了HashMap的原理及实现过程,这一篇是对HashMap的源码分析. package dataStructure.hash; import j ...