当前位置: 首页 > news >正文

Hibernate Session在项目中的创建方式

创建一个单例模式工具类,再通过在Hibernate配置文件中开启Session的线程管理模式的方法

  1. 单例模式工具类
    package test.hibernate.spring.dao;import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.boot.MetadataSources;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.service.ServiceRegistry;public class HibernateUtil {public static HibernateUtil hibernateUtil = null;public HibernateUtil() {};//将该类作成单例模 式public static HibernateUtil getinstance() {if(hibernateUtil==null) {hibernateUtil=new HibernateUtil();}return hibernateUtil;}public SessionFactory getSessionFactory() {/* hibernate规定,所有的配置或服务,必须配置或注册到一个服务注册类中 */Configuration configuration = new Configuration().configure();ServiceRegistry sr = configuration.getStandardServiceRegistryBuilder().build();/* 从注册类中获得工厂类 */return new MetadataSources(sr).buildMetadata().buildSessionFactory();}/* 获取session的对像方法 */public Session getSession() {/* 从单前线程中获取Session,session在完成操作后将会自动关闭 */return getSessionFactory().getCurrentSession();}
    }

     
  2. Hibernate配置文件中开启Session的线程管理模式的方法
    <!-- 开启Session的线程管理模式 --><property name="current_session_context_class">thread</property>

  3. 测试应用
    public void testGet() {Session session=HibernateUtil.getinstance().getSession();Transaction transaction=session.beginTransaction();Student s = session.get(Student.class, 1);System.out.println(s.getTeachers().size());transaction.commit();}

    手动创建方式,以一个测试类为例
     

    public class TestSession {SessionFactory sessionFactory = null;Session session = null;Transaction ts = null;@Beforepublic void beforP() {System.out.println("begin....");/* hibernate规定,所有的配置或服务,必须配置或注册到一个服务注册类中 */Configuration configuration = new Configuration().configure();ServiceRegistry sr = configuration.getStandardServiceRegistryBuilder().build();/* 从注册类中获得工厂类 */sessionFactory = new MetadataSources(sr).buildMetadata().buildSessionFactory();/* 通过工厂类开启Session */session = sessionFactory.openSession();/* 开启事务 */ts = session.beginTransaction();}@Afterpublic void endP() {System.out.println("end....");/* 提交事务 */ts.commit();/* 关闭Session */session.close();/* 关闭工厂 */sessionFactory.close();}@Testpublic void testGet() {// 使用get时, class标签中lazy值不管是true还是false都会直接加载,当set标签// 中fetch="join"时,会在get时使用左join将其集体一起检索出来,访问数据库只需一次// fetch值是其它时则需要访两次Student s = session.get(Student.class, 1);System.out.println(s.getTeachers().size());}}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Nginx+Tomcat 群集
  • python发送外部请求
  • element 动态设置el-table 高度
  • Unity脚本一键修改所有预制体
  • Spring之@ComponentScan注解
  • HTTP/1.1
  • 【ACM独立出版丨接受全文摘要投稿】2024年生物医药和智能技术国际学术会议(ICBIT 2024,8月23-25)
  • Python知识点:如何使用Cocos2d进行游戏编程
  • 计算机网络 DNS HTTP HTTPS,缓存
  • HarmonyOS鸿蒙开发岗位面试中关于组件的问题总结
  • 【React】自定义右键菜单
  • 网站如何被Google收录?
  • Python | Leetcode Python题解之第328题奇偶链表
  • unity游戏开发003:深入理解Unity中的坐标系
  • windows与linux服务器之间通过scp快速并行的文件传输
  • 2017届校招提前批面试回顾
  • Centos6.8 使用rpm安装mysql5.7
  • Computed property XXX was assigned to but it has no setter
  • C语言笔记(第一章:C语言编程)
  • HTTP 简介
  • JAVA 学习IO流
  • MD5加密原理解析及OC版原理实现
  • nodejs调试方法
  • Spring核心 Bean的高级装配
  • Vue 2.3、2.4 知识点小结
  • Vue.js 移动端适配之 vw 解决方案
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 官方解决所有 npm 全局安装权限问题
  • 每天10道Java面试题,跟我走,offer有!
  • 入手阿里云新服务器的部署NODE
  • 算法-图和图算法
  • 我有几个粽子,和一个故事
  • 移动端唤起键盘时取消position:fixed定位
  • postgresql行列转换函数
  • ​zookeeper集群配置与启动
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #DBA杂记1
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (06)Hive——正则表达式
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (二十九)STL map容器(映射)与STL pair容器(值对)
  • (六)激光线扫描-三维重建
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (学习日记)2024.01.19
  • (转)Unity3DUnity3D在android下调试
  • (转)创业家杂志:UCWEB天使第一步
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET 服务 ServiceController
  • .net/c# memcached 获取所有缓存键(keys)
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接