博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate-ORM:09.Hibernate中的getCurrentSession()
阅读量:6737 次
发布时间:2019-06-25

本文共 2680 字,大约阅读时间需要 8 分钟。

 

 

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

 

 

 

 

本篇博客将讲述,以优雅的方式创建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();        /*不能直接使用,需要在核心配置文件中加入一个节点*/        /*
thread
*/ }}

 

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

 

thread

 

 

简单的使用案例:

 

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
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();*/ }}

 

转载于:https://www.cnblogs.com/DawnCHENXI/p/9121074.html

你可能感兴趣的文章
细说ES7 JavaScript Decorators
查看>>
最好的团队
查看>>
Objective-C之@类别小实例
查看>>
IOS的唯一标识符问题(转)
查看>>
【Oracle】How to Rename or Move Datafiles and Logfiles 之一
查看>>
CYQ.Data 轻量数据访问层(六) 构造数据表
查看>>
CFRunLoop
查看>>
一次XEN虚拟化安装虚机系统时的换光盘操作
查看>>
第五天 应用代理SQUID
查看>>
CDH使用之CM、CDH4、5卸载
查看>>
Windows Server 2012和Windows 8的Remote FX功能
查看>>
部署PowerBI报表服务器(本地)
查看>>
国内几个php开源代码解析
查看>>
Linux下添加php的zip模块
查看>>
hadoop 命令手册
查看>>
阿里云ECS搭建Java+mysql+tomcat环境的简要步骤
查看>>
我的友情链接
查看>>
win7分区工具——Acronis Disk Director Suite
查看>>
JDK自带VisualVM监控tomcat 内存、CPU
查看>>
final在新的Jmm被重新定义,说说你对它的实现机制的了解?
查看>>