【JAVA笔记——道】Hibernate 线程本地化基础篇
来源:互联网 发布:grid.base.js 编辑:程序博客网 时间:2024/04/30 15:45
在进行数据访问的时候每个用户对应一个线程,而用户的各种数据的处理都是通过线程来完成的。
根据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();
}
简单写一下就是这样,大家可以根据自己的项目进行改造,实际中使用中可以再通过模板进行封装。如果大家有什么问题也可以在留言,也可以在知乎上@寸辰
- 【JAVA笔记——道】Hibernate 线程本地化基础篇
- java线程基础——笔记
- java线程基础——笔记2
- 【Java基础】线程笔记——ThreadApi
- 【Java基础】线程笔记——synchronized
- 【java基础】线程笔记——LockSupport
- Hibernate之Session线程本地化
- 【Java基础】线程笔记——线程安全
- 笔记-java线程基础
- Java基础—线程
- Android学习笔记——java线程基础
- 【Java基础】线程笔记——显式锁Lock和ReentrantLock
- 【Java基础】线程笔记——显式锁StampedLock
- 【java基础】线程笔记——AQS(AbstractQueuedSynchronizer)
- 黑马程序员—Java基础学习笔记之多线程
- java基础——线程篇
- Java 线程 —— 基础篇
- Java 线程 —— 基础篇
- Jsp内置对象的简单说明
- 中国空气质量分析
- 详解MTK系统中字符转换问题
- air jordan pas cher Nike designed for the Italian soccer shoes
- GetWords
- 【JAVA笔记——道】Hibernate 线程本地化基础篇
- basket nike pas cher adjustable dumbbells are the answer.
- jdbcTemplate与hibernateTemplate混用
- chaussures nike ensuring superior engineering in their headphones down to the smallest detail.
- Javascript中数据类型及其判别方法(typeof instanceof Object.prototype.toSting.call(obj)的区别)
- air max pas cher Tiongkok tendance au refroidissement
- nike femme See next point
- Codeforces 104C Cthulhu dfs暴力 || 点双连通缩点
- LeetCode 60 Reverse Linked List II