------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------

本篇博客将讲述,以优雅的方式创建session对象,我将会说明优点,并提炼成工具类

优点:

  1.无需手动关闭session

  2.提高了性能,不需要频繁的创建session对象

说明:

  虽然getCurrentSession()底层调用了openSession(),但是做了单例操作,所以性能更高,更安全

工具类:

package cn.dawn.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; /**
* Created by Dawn on 2018/5/30.
*/
public class SessionFactoryUtil {
private static Configuration configuration;//加载核心配置文件
private static SessionFactory factory;//单例对象 //在类加载的时候,加载静态代码块
static {
configuration=new Configuration().configure();//默认加载根目录下的hibernate.cfg.xml
factory=configuration.buildSessionFactory();
} //通过sessionfactory创建session
/*设置同步,保证线程安全*/
public static synchronized Session getCurrentSession(){
return factory.getCurrentSession();
/*不能直接使用,需要在核心配置文件中加入一个节点*/
/*<property name="current_session_context_class">thread</property>*/
}
}

另外需要在hibernate.hbm.xml中配置一个节点:

<property name="current_session_context_class">thread</property>

简单的使用案例:

package cn.dawn.day03;

import cn.dawn.day03.entity.Teacher;
import cn.dawn.util.SessionFactoryUtil;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.Query;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; import java.util.List; /**
* Created by Dawn on 2018/5/25.
*/
/*分页*/
public class Test0120180530Page {
/*事物*/
Transaction tr=null;
/*session*/
Session session=null; @Test
/**
* 分页
*
* 01.查询总记录数
* 02.每页显示的数据
* 03.总页数
*/
public void t1Page(){
String hql="select count(*) from Teacher";//会返回Long类型
int counts=((Long)session.createQuery(hql).uniqueResult()).intValue();
/*页大小*/
int pageSize=2;
/*总页数*/
int totalPages=(counts%pageSize==0)?(counts/pageSize):(counts/pageSize+1);
/*显示第二页内容*/
int pageIndex=2;
hql="from Teacher";
Query query = session.createQuery(hql);;
/*从哪一条开始查*/
query.setFirstResult((pageIndex-1)*pageSize);
/*设置页大小*/
query.setMaxResults(pageSize);
List<Teacher> teachers = query.list();
for (Teacher t:teachers) {
System.out.println(t);
} } /*在执行之前加载配置,运行事物*/
@Before
public void beforeTest(){ /*使用工具类*/
/*创建session*/
session = SessionFactoryUtil.getCurrentSession();
/*创建事物*/
tr = session.beginTransaction();
} /*在执行之后,提交事物,关闭session*/
@After
public void afterTest(){
/*提交事物*/
/*tr.commit();*/
/*关闭session*/
/*session.close();*/
}
}

Hibernate-ORM:09.Hibernate中的getCurrentSession()的更多相关文章

  1. spring中使用Hibernate中的getCurrentSession报出:createQuery is not valid without active transaction

    1.错误信息 HTTP Status 500 - createQuery is not valid without active transaction type Exception report m ...

  2. Hibernate (ORM)

    1 框架体系结构 2 hibernate入门 2.1 ORM框架 Hibernate是一个数据持久化层的ORM框架. Object:对象,java对象,此处特指JavaBean Relational: ...

  3. ORM和Hibernate的配置方式

    分层体系结构: 逻辑上一般分为三层:表述层(提供与用户交互的界面).业务逻辑层(实现各种业务的逻辑).数据库层(负责存放和管理应用的持久性业务数据). 物理上一般分为两层:物理层(每一层都运行在网络上 ...

  4. 学习ORM框架—hibernate(三):跟踪持久化对象状态,掌握对象持久化

    准备工作 在上篇博客中学习ORM框架—hibernate(一):初识hibernate,通过简单的实例说明O和R的映射过程.本篇博客将要介绍hibernate中持久化对象的状态,并使用hibernat ...

  5. hibernate学习(三) hibernate中的对象状态

    hibernate对象的状态分为三种:  游离状态,持久化状态,瞬时状态 下面一行代码区分: Configuration   cfg=new Configuration().configure(); ...

  6. Hibernate之ORM与Hibernate

    ORM: ORM是 Object /Relation Mapping,对象/关系数据库映射. 目前比较流行的编程语言,如java ,c#等,它们都是面向对象的编程语言,而目前比较主流的数据库产品,如O ...

  7. ORM框架Hibernate (一) 对DAO封装和抽象

    说明 前面已经给大家介绍了Struts这个框架,Struts是对Web项目的表示层进行了封装,而Hibernate是对Web项目中DAO层进行封装,也即是.NET中我们常用到的D层封装,即对访问数据库 ...

  8. hibernate里的generator中class =value介绍

    在*.hbm.xml必须声明的<generator>子元素是一个Java类的名字,用来为该持久化类的实例生成唯一的标识.<generator class="sequence ...

  9. wildfly 10上使用最新的 Hibernate ORM OGM

    ORM是关系型数据库连接:ogm是No sql数据库连接,Mongo, redis等. 1,下载ogm zip包,解压到wildfly_home\modules\system\layers\base, ...

  10. ORM与hibernate概述

    JDBC是什么? JDBC代表java数据库连接,并提供一组java API,用于java成许访问关系数据库.这些Java的API允许Java程序执行SQL语句,并与任何SQL兼容的数据库进行交互. ...

随机推荐

  1. bootstrap-multiselect.js多选下拉框初始化时默认选中初始值

    bootstrap-multiselect.js多选下拉框默认值设置 一.案例数据格式  二.HTML代码 <select id="msgRoles" multiple=&q ...

  2. PHP语言开发微信公众平台(订阅号)之注册(1)

    1.百度搜索"微信公众平台" 2.选择微信公众平台官网并单击打开 3.进入官网页面,单击 "立即注册" 进入注册页面 4.进入注册页面,单击订阅号 5.进入订阅 ...

  3. 2018.10.14 MyBatis配置实现对用户的增删改查

    记得导入对应的Jar包 ant-1.9.6.jar ant-launcher-1.9.6.jar asm-5.2.jar cglib-3.2.5.jar commons-logging-1.2.jar ...

  4. logback.xml常用配置

    一.logback的介绍 Logback是由log4j创始人设计的又一个开源日志组件.logback当前分成三个模块:logback-core,logback- classic和logback-acc ...

  5. mui(手机)

    官网:http://dev.dcloud.net.cn/mui/

  6. 【luogu P3901 数列找不同】 题解

    对于区间查询的问题,提供一种思路: 莫队. 莫队是处理区间问题的乱搞神器,尤其是对于离线查询问题,当然也可以做在线查询,比如带修莫队. 对于有的题,莫队是乱搞骗分,而在某些地方,莫队是正解. 这道题来 ...

  7. sql*plus

    [sql*plus创建txt文档编辑sql语句] (1)创建一个txt,命名doc SQL> ed  doc;          /*ed   文件名*/ (2)在doc.txt文件编辑sql语 ...

  8. 转载:/etc/security/limits.conf 控制文件描述符,进程数,栈大小

    原文地址:http://ilikedo.iteye.com/blog/1554822 linux下安装Oracle 一般都会修改/etc/security/limits.conf这个文件,但是这里面的 ...

  9. 全盘解决eclipse之maven项目报错

    每次新建maven的web(war包方式)项目时都会报错而且都要手动改,很麻烦 解决:(注意里面的jdk版本换成自己的) 改变maven配置文件   settings.xml 在文件的<prof ...

  10. This system is registered to Red Hat Subscription Management, but is not receiving updates. You can use subscription-manager to assign subscriptions.

    Wrong date and time, reset the date and time in the system properly. It may also happen that system ...