zoukankan      html  css  js  c++  java
  • 【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();
    }

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

  • 相关阅读:
    关于JQuery的autocomplete1.11.4版本插件的使用心得
    BUG:ie678 使用jQuery设置页面标题
    BUG:ie8不支持indexOf()
    【转】使用@import和link导入样式
    【转】css3 media媒体查询器用法总结
    【转】css hack
    【转】移动平台WEB前端开发技巧汇总
    json格式与javascript对象字面量和数组对象的区别
    窗口和元素的大小:offset client scroll
    sharepoint2013 新建母板页 新建页面布局 关联母板页和页面布局
  • 原文地址:https://www.cnblogs.com/cunchen/p/9464246.html
Copyright © 2011-2022 走看看