Hibernate-ORM:09.Hibernate中的getCurrentSession()

简介:   ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------         本篇博客将讲述,以优雅的方式创建session对象,我将会说明优点,并提炼成工具类   优点:   1.

 

 

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

 

 

 

 

本篇博客将讲述,以优雅的方式创建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();*/
    }
}

 

目录
相关文章
|
XML SQL Java
Hibernate-ORM:14.Hibernate中的命名查询
      ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------         本篇博客讲述命名查询,所谓命名查询是什么呢? Hibernate中允许我们在xml,实体类,甚至注解的方式来编写查询语句,本篇博客将讲述xml中的方式 一,准备好准备工作,我由于上篇博客把大量的准备都做好,所以,本篇从简 二,预览hbm.
1029 0
|
SQL Java 数据库连接
Hibernate-ORM:15.Hibernate中的Criteria查询
    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------         本篇博客讲师Hibernate中的Criteria查询! 一,Criteria简介:   刚接触Hibernate的时候,就有一个概念,全自动的ORM框架,不用写...
980 0
|
SQL 缓存 Java
Hibernate-ORM:16.Hibernate中的二级缓存Ehcache的配置
    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------         本篇博客讲述Hibernate中的二级缓存的配置,作者将使用的是ehcache缓存 一,目录   1.
1223 0
|
Java 关系型数据库 程序员
Hibernate-ORM:13.Hibernate中的连接查询
    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------     本篇博客将会解释Hibernate中的连接查询(各种join) 一,目录   1.
903 0
|
Java 关系型数据库 数据库连接
Hibernate-ORM:12.Hibernate中的多对多关联关系
    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------       本篇博客将讲述Hibernate中的多对多关联关系的操作,准备的篇幅较少,望海涵   一,讲述多对多   多对多的关联关系,比如学生和教师来说,一个学生由多个教师授课...
1244 0
|
Java 关系型数据库 MySQL
Hibernate-ORM:10.Hibernate中的分页
  ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------       本篇博客讲述Hibernate中的分页 hibernate中的分页其实很好写,它通过操作对象的方式,来进行分页查询操作 分页无非就是查俩个:1.
938 0
|
Java 关系型数据库 数据库连接
Hibernate-ORM:11.Hibernate中的关联查询
      ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------         本篇博客将讲述Hibernate中的关联查询,及其级联(cascade)操作,以及指定哪一方维护关联关系的(inverse)   一,讲述目录如下:   1.
1196 0
|
缓存 Java 数据库连接
Hibernate-ORM:06.Hibernate中三种状态
  ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------       本篇博客主要叙述Hibernate中的三种状态:临时状态(瞬时状态),持久状态,游离状态 commit和flush三种状态间的使用,commit和flush的区别: save...
1096 0
|
SQL Java 数据库连接
Hibernate-ORM:07.Hibernate中的参数绑定
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------     本篇博客会讲解Hibernate中的参数绑定,就是相当于sql语句中的where后面的条件   一,讲解概述:   1.
1039 0
|
SQL Java 数据库连接
Hibernate-ORM:08.Hibernate中的投影查询
    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥-------------       本篇博客将叙述hibernate中的投影查询 一,目录:   1.解释什么是投影查询   2.
1020 0