Hibernate-ORM:09.Hibernate中的getCurrentSession()
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------
本篇博客将讲述,以优雅的方式创建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()的更多相关文章
- 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 ...
- Hibernate (ORM)
1 框架体系结构 2 hibernate入门 2.1 ORM框架 Hibernate是一个数据持久化层的ORM框架. Object:对象,java对象,此处特指JavaBean Relational: ...
- ORM和Hibernate的配置方式
分层体系结构: 逻辑上一般分为三层:表述层(提供与用户交互的界面).业务逻辑层(实现各种业务的逻辑).数据库层(负责存放和管理应用的持久性业务数据). 物理上一般分为两层:物理层(每一层都运行在网络上 ...
- 学习ORM框架—hibernate(三):跟踪持久化对象状态,掌握对象持久化
准备工作 在上篇博客中学习ORM框架—hibernate(一):初识hibernate,通过简单的实例说明O和R的映射过程.本篇博客将要介绍hibernate中持久化对象的状态,并使用hibernat ...
- hibernate学习(三) hibernate中的对象状态
hibernate对象的状态分为三种: 游离状态,持久化状态,瞬时状态 下面一行代码区分: Configuration cfg=new Configuration().configure(); ...
- Hibernate之ORM与Hibernate
ORM: ORM是 Object /Relation Mapping,对象/关系数据库映射. 目前比较流行的编程语言,如java ,c#等,它们都是面向对象的编程语言,而目前比较主流的数据库产品,如O ...
- ORM框架Hibernate (一) 对DAO封装和抽象
说明 前面已经给大家介绍了Struts这个框架,Struts是对Web项目的表示层进行了封装,而Hibernate是对Web项目中DAO层进行封装,也即是.NET中我们常用到的D层封装,即对访问数据库 ...
- hibernate里的generator中class =value介绍
在*.hbm.xml必须声明的<generator>子元素是一个Java类的名字,用来为该持久化类的实例生成唯一的标识.<generator class="sequence ...
- wildfly 10上使用最新的 Hibernate ORM OGM
ORM是关系型数据库连接:ogm是No sql数据库连接,Mongo, redis等. 1,下载ogm zip包,解压到wildfly_home\modules\system\layers\base, ...
- ORM与hibernate概述
JDBC是什么? JDBC代表java数据库连接,并提供一组java API,用于java成许访问关系数据库.这些Java的API允许Java程序执行SQL语句,并与任何SQL兼容的数据库进行交互. ...
随机推荐
- oozie说明(本文参考多处,自己留看)
Oozie概述: Oozie是一个基于Hadoop工作流引擎,也可以称为调度器,它以xml的形式写调度流程,可以调度mr,pig,hive,shell,jar,spark等等.在实际工作中,遇到对数据 ...
- [18/11/30] toString()方法 和 equals() 方法
一. toString() 方法 Object类中定义有public String toString()方法,其返回值是 String 类型 默认: return getClass().getNam ...
- js通过codeURL画二维码
一.函数封装 //生成微信二维码 function xyqrcode(options) { var settings = { dom:'', render: 'canvas', //生成二维码的格式还 ...
- Java中Thread类的join方法到底是如何实现等待
现在的场景是A线程执行:public void run(){ bThread.join(0);//把b线程加入到当前线程(a线程),等待b结束,当前a线程才会结束.}B线程执行public void ...
- 【洛谷P1108】低价购买
低价购买 题目链接 n<=5000 n^2的算法是可以接受的 第一个数字显然是求最长下降子序列,可以n^2或nlognDP 要求方案数,可以在n^2算法中做一些修改,DP求方案数 dp[i]表示 ...
- ActionBar 的应用
转载:http://blog.csdn.net/yuxlong2010 作为Android 3.0之后引入的新的对象,ActionBar可以说是一个方便快捷的导航神器.它可以作为活动的标题,突出活动的 ...
- video object detection
先说一下,我觉得近两年最好的工作吧.其他的,我就不介绍了,因为我懂得少. 微软的jifeng dai的工作. Deep Feature Flow github: https://github.co ...
- Struts2 第二讲 -- Struts2的入门
搭建struts2环境时,我们一般需要做以下几个步骤的工作: 第一步:创建javaweb工程(这个很废话有木有) 第二步:找到开发Struts2应用需要使用到的jar文件.(这个很白痴有没有) 到ht ...
- spring入门(三) 使用spring mvc
1.建立project / module 新建空的project:springMvcStudy 新建module:type maven-webapp,名字mvcStudy 2.为module设置Sou ...
- WKWebView进度及title
WKWebView进度及title WKWebView进度及title WKWebView 的estimatedProgress和title 都是KVO模式,所以可以添加监控: [webView ad ...