在进行数据访问的时候每个用户对应一个线程,而用户的各种数据的处理都是通过线程来完成的。

根据Hibernate的功能分级,在Dao(Data Access Object)数据访问对象进行基本的对象处理

例如

public class CustomerDao {

private HibernateTemplate ht = new HibernateTemplate();
/**
* insertCustomer
*/
public void insertCustomer(final Customer c){
ht.execute(new HibernateCallback() {
public Object doInHibernate(Session s) {
s.save(c);
return null;
}
});
}

/**
* insertCustomer
*/
public void updateCustomer(final Customer c){
ht.execute(new HibernateCallback() {
public Object doInHibernate(Session s) {
s.update(c);
return null;
}
});
}

public Customer getCustomer(final Integer id){
return (Customer)ht.execute(new HibernateCallback() {
public Object doInHibernate(Session s) {
return s.get(Customer.class, id);
}
});
}

public List<Customer> findAll(){
return (List<Customer>)ht.execute(new HibernateCallback() {
public Object doInHibernate(Session s) {
return s.createQuery("from Customer").list();
}
});
}
}

在DAO上边在进行SERVICE级别的处理,一般会涉及到多个DAO之间SESSION传递,为了解决同一个SERVICE上SESSION相互传递的低效率,在此采用ThreadLocal进行线程本地化技术,实现session的高效共享

实现步骤如下

1.hibernate.cfg.xml文件进行配置

<property name="hibernate.current_session_context_class">thread</property>

使其支持线程本地化技术

2.ThreadLocal的实现

private SessionFactory sf;

public void initSf(){
sf = new Configuration()
.configure()
.buildSessionFactory();
}

public void testLocalThread(){
//获得currentsession,直接开启全局事务
sf.getCurrentSession().beginTransaction();
CusomerDao customerDao = new CustomreDao();
OrderDao orderDao = new OrderDao();
Customer c =new Customer();
Order o = new Order();
o.setPrice(155);
c.addOrder(o);
customerDao.insertOne(c);
orderDao.insertOne(o);

//获得currentsession,提交全局事务
sf.getCurrentSession().getTransaction().commit();
//获得currentsession,关闭会话
sf.getCurrentSession().close();
sf.close();
}

简单写一下就是这样,大家可以根据自己的项目进行改造,实际中使用中可以再通过模板进行封装。如果大家有什么问题也可以在留言,也可以在知乎上@寸辰

转载于:https://www.cnblogs.com/cunchen/p/9464246.html

【JAVA笔记——道】Hibernate 线程本地化基础篇相关推荐

  1. java笔记:熟练掌握线程技术---基础篇之解决资源共享的问题(中)--前篇

    上篇里我讲到了java里如何去创建一个线程的问题,上篇的代码里创建的线程都是独立的,也就是说创建的线程都不会相互的干扰,独立的进行属于自己的运算,更重要的是上篇博文里创建的线程所使用的资源都是独占式的 ...

  2. 【Java笔记+踩坑】SpringBoot基础3——开发。热部署+配置高级+整合NoSQL/缓存/任务/邮件/监控

      导航: [黑马Java笔记+踩坑汇总]JavaSE+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud/SpringCloudAlibaba+黑马旅游+谷粒商城 目录 ...

  3. 【Java笔记+踩坑】SpringBoot基础2——运维实用

      导航: [黑马Java笔记+踩坑汇总]JavaSE+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud/SpringCloudAlibaba+黑马旅游+谷粒商城 目录 ...

  4. Java面试通关要点汇总集(基础篇之基本功,非原作者)

    Java面试通关要点汇总集(部分解答) 说明 如果你有幸能看到的话, 1.本文整体框架来自@阿里.梁桂钊的博文,总结的非常不错.值得我们学习,它的博客部分做了解答. 2.由于自己能力有限,没能实现心中 ...

  5. Java内存马攻防实战——攻击基础篇

    ​ 在红蓝对抗中,攻击方广泛应用webshell等技术在防守方提供的服务中植入后门,防守方也发展出各种技术来应对攻击,传统的落地型webshell很容易被攻击方检测和绞杀.而内存马技术则是通过在运行的 ...

  6. 动力节点王鹤SpringBoot3学习笔记——第二章 掌握SpringBoot基础篇

    目录 二.掌控SpringBoot基础篇 2.1 Spring Boot ? 2.1.1 与Spring关系 2.1.2 与SpringCloud关系 2.1.3  最新的Spring Boot3 新 ...

  7. Java全链路复习面经-基础篇(2.5万字全文)

    序言 主要分为两篇,一篇基础篇,涵盖Java基础,数据库,JVM,计算机网络等知识 另一篇为框架篇,主要为流行框架,如Spring.SpringMVC.Mybatis.SpringBoot.Sprin ...

  8. 资料搜集-JAVA系统的梳理知识5-JAVA基础篇JVM

    <!-- TOC -->- [Collections 工具类和 Arrays 工具类常见方法](#collections-工具类和-arrays-工具类常见方法)- [Collection ...

  9. java的继承和访问_Java基础篇:如何解决成员的访问和继承?

    Java基础篇:如何解决成员的访问和继承? 尽管子类包括超类的所有成员,它不能访问超类中被声明成private的成员.例如,考虑下面简单的类层次结构: /* In a class hierarchy, ...

最新文章

  1. Elgg网站迁移指南
  2. 【计算理论】可判定性 ( 通用图灵机和停机问题 | 可判定性 与 可计算性 | 语言 与 算法模型 )
  3. 在灾难发生之时,你在Facebook的社交定位或许能救你一命
  4. Mysql时间格式转换
  5. 大厂提供什么样的软硬件来吸引人才?
  6. 很经典的独白,搞网络的童鞋们,你们懂得
  7. Vue 中实现双向绑定的 4 种方法
  8. 如何查看光驱硬盘托架的尺寸_「二次利用」没想到废光驱电机还可以这样利用...
  9. Delphi中怎么结束线程(这个线程是定时执行的)(方案一)
  10. 14.Linux/Unix 系统编程手册(上) -- 文件系统
  11. 数字字符减去数字字符0就是数字
  12. Tensorflow2.0之FGSM
  13. 计算机发展的新用途应用,新时期计算机技术的应用及发展趋势
  14. 区块链将成为互联网基础协议,类似于TCP/IP、HTTP
  15. 2021-01-29
  16. python结束线程_python终止线程
  17. NetLogon特权提升漏洞(CVE-2020-1472)复现及问题解决
  18. 大数据思维导图锦集(原创吐血整理,不定期更新)
  19. oracle vitu,Podnikové servery | Oracle Česká Republika
  20. 直方图的计算,绘制与分析

热门文章

  1. Python 工匠: 异常处理的三个好习惯
  2. ngx_lua 模块提供的指令和API等
  3. [Unity] Unity3D研究院编辑器之自定义默认资源的Inspector面板
  4. Samba安装详细步骤
  5. JavaScript【面向对象】-静态方法-私有方法-公有方法-特权方法
  6. 【剑指Offer,JS版本】二维数组中的查找
  7. 动态设置HTML:v-html
  8. Linux下,Pycharm到期,源不好使,无法安装pyqt5及pyqy5-tools的解决办法
  9. PyTorch学习:参数初始化
  10. Java面试题系列(X)锁的原理