核心开发接口(一)

摘要:
目的是定义事务边界。提交事务时,它将自动关闭()。什么是上下文?上下文是在休眠配置session_Context_class中指定的当前上下文因此,当使用此方法时,线程中。

1.Configuration

  进行配置信息的管理

  用来产生SessionFactory

  可以在configure方法中指定hibernate配置文件

  只需要关注一个方法即:buildSessionFactory()

2.SessionFactory

  管理连接池

  用来产生Session,没产生一个session,就给它一个数据库连接

  Session session = sessionFactory.openSession();与Session session = sessionFactory.getCurrentSession();的区别

openSession永远是创建新的Session,使用它的时候要用session.close();

getCurrentSession()如果当前环境中有了session,就会拿当前环境的session,在这个session没有提交之前,无论拿多少个,都是同一个,一旦提交,再拿,就是新的了。用途是界定事务边界,事务提交时会自动colse()。什么叫上下文,上下文是在hibernate配置里面指定的current_session_context_class。所以使用这个方法的时候配置文件里要写<!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>看API文档,thread可以换成别的三个值,但thread比较长用。

package hjj.lch.hibernate.model;


import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

public class HibernateCoreAPITest {

private static SessionFactory sf = null;
    
    @BeforeClass
    public static void beforeClass(){
        sf = new AnnotationConfiguration().configure().buildSessionFactory();
    }
    
    @Test
    public void testTeacherSave() {
        Teacher t = new Teacher(); 
        t.setId(6);
        t.setName("fkdshf");
        t.setTitle("中级");
        
        Session session1 = sf.getCurrentSession();
        Session session3 = sf.getCurrentSession();
        System.out.println(session1 == session3);
        session1.beginTransaction();
        session1.save(t);
        session1.getTransaction().commit();
        
        Session session2 = sf.getCurrentSession();
        
        System.out.println(session1 == session2);
        session1.close();
    }

    @AfterClass
    public static void afterClass(){
        sf.close();
    }

}

结果为true  false,这种方法拿到的session在commit的时候会自动colse,所以session2又是一个新的了。session 是一个接口,可以实现它的类很多,所以Session session = sessionFactory.openSession();与Session session = sessionFactory.getCurrentSession();很有可能不是同一个实现,不能混用。

免责声明:文章转载自《核心开发接口(一)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Informatica_(3)组件什么是D-RAN, C-RAN, Cloud-RAN下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Cookie和Session详解

Session和Cookie详解 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。 Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。 1.1  Cookie机制   在程序中,会话跟踪是很重要的事情。理论上,一个用户的所有请求操作都...

21.Shiro在springboot与vue前后端分离项目里的session管理

1.前言 当决定前端与后端代码分开部署时,发现shiro自带的session不起作用了。 然后通过对请求head的分析,然后在网上查找一部分解决方案。 最终就是,登录成功之后,前端接收到后端传回来的sessionId,存入cookie当中。 之后,前端向后端发送请求时,请求Head中都会带上这个sessionid。 后端代码通过对这个sessionid的解...

hibernate必须知道的知识

Hibernate经典知识:   1、Hibernate工作原理及为什么要用?     1.       答:hibernate,通过对jdbc进行封装,对 java类和关系数据库进行mapping,实现了对关系数据库的面向对象方式的操作. 1.对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 hibernate的性能非常好...

sqlplus 汉字乱码问题的解决

从数据库中导一个数据的时候出现了一个很奇怪的问题,中文乱码。首先可以确认的一点,数据在数据库中是以中文存在的,还有就是用Toad进行连接查询的时候也是中文。但是在服务器端直接用sqlplus 连接查询之后,所有中文都显示为乱码。第一反应是字符集的问题,也尝试用修改字符集来解决问题,最终问题还是出在系统的环境变量上。 关于数据库字符集的问题,参考我的bl...

消息队列(三)Apache ActiveMQ

在Ubuntu上安装ActiveMQ 系统初始化 $ sudo apt update $ sudo apt dist-upgrade $ sudo apt autoremove $ sudo apt clean 搭建activemq服务 $ mkdir /home/active-mq $ cd /home/active-mq $ wget http://...

[转]SecureCRT的详细使用教程

原文链接: http://www.heibai.net/book/html/wangluogongju/yuanchengkongzhi/2009/0911/1081.html# VanDyke CRT 和 VanDyke SecureCRT是最常用的终端仿真程序,简单的说就是Windows下登录UNIX或Liunx服务器主机的软件。二者不同的是Sec...