【JAVA笔记——道】Hibernate 线程本地化基础篇
在进行数据访问的时候每个用户对应一个线程,而用户的各种数据的处理都是通过线程来完成的。
根据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 线程本地化基础篇相关推荐
- java笔记:熟练掌握线程技术---基础篇之解决资源共享的问题(中)--前篇
上篇里我讲到了java里如何去创建一个线程的问题,上篇的代码里创建的线程都是独立的,也就是说创建的线程都不会相互的干扰,独立的进行属于自己的运算,更重要的是上篇博文里创建的线程所使用的资源都是独占式的 ...
- 【Java笔记+踩坑】SpringBoot基础3——开发。热部署+配置高级+整合NoSQL/缓存/任务/邮件/监控
导航: [黑马Java笔记+踩坑汇总]JavaSE+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud/SpringCloudAlibaba+黑马旅游+谷粒商城 目录 ...
- 【Java笔记+踩坑】SpringBoot基础2——运维实用
导航: [黑马Java笔记+踩坑汇总]JavaSE+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud/SpringCloudAlibaba+黑马旅游+谷粒商城 目录 ...
- Java面试通关要点汇总集(基础篇之基本功,非原作者)
Java面试通关要点汇总集(部分解答) 说明 如果你有幸能看到的话, 1.本文整体框架来自@阿里.梁桂钊的博文,总结的非常不错.值得我们学习,它的博客部分做了解答. 2.由于自己能力有限,没能实现心中 ...
- Java内存马攻防实战——攻击基础篇
在红蓝对抗中,攻击方广泛应用webshell等技术在防守方提供的服务中植入后门,防守方也发展出各种技术来应对攻击,传统的落地型webshell很容易被攻击方检测和绞杀.而内存马技术则是通过在运行的 ...
- 动力节点王鹤SpringBoot3学习笔记——第二章 掌握SpringBoot基础篇
目录 二.掌控SpringBoot基础篇 2.1 Spring Boot ? 2.1.1 与Spring关系 2.1.2 与SpringCloud关系 2.1.3 最新的Spring Boot3 新 ...
- Java全链路复习面经-基础篇(2.5万字全文)
序言 主要分为两篇,一篇基础篇,涵盖Java基础,数据库,JVM,计算机网络等知识 另一篇为框架篇,主要为流行框架,如Spring.SpringMVC.Mybatis.SpringBoot.Sprin ...
- 资料搜集-JAVA系统的梳理知识5-JAVA基础篇JVM
<!-- TOC -->- [Collections 工具类和 Arrays 工具类常见方法](#collections-工具类和-arrays-工具类常见方法)- [Collection ...
- java的继承和访问_Java基础篇:如何解决成员的访问和继承?
Java基础篇:如何解决成员的访问和继承? 尽管子类包括超类的所有成员,它不能访问超类中被声明成private的成员.例如,考虑下面简单的类层次结构: /* In a class hierarchy, ...
最新文章
- Elgg网站迁移指南
- 【计算理论】可判定性 ( 通用图灵机和停机问题 | 可判定性 与 可计算性 | 语言 与 算法模型 )
- 在灾难发生之时,你在Facebook的社交定位或许能救你一命
- Mysql时间格式转换
- 大厂提供什么样的软硬件来吸引人才?
- 很经典的独白,搞网络的童鞋们,你们懂得
- Vue 中实现双向绑定的 4 种方法
- 如何查看光驱硬盘托架的尺寸_「二次利用」没想到废光驱电机还可以这样利用...
- Delphi中怎么结束线程(这个线程是定时执行的)(方案一)
- 14.Linux/Unix 系统编程手册(上) -- 文件系统
- 数字字符减去数字字符0就是数字
- Tensorflow2.0之FGSM
- 计算机发展的新用途应用,新时期计算机技术的应用及发展趋势
- 区块链将成为互联网基础协议,类似于TCP/IP、HTTP
- 2021-01-29
- python结束线程_python终止线程
- NetLogon特权提升漏洞(CVE-2020-1472)复现及问题解决
- 大数据思维导图锦集(原创吐血整理,不定期更新)
- oracle vitu,Podnikové servery | Oracle Česká Republika
- 直方图的计算,绘制与分析