• JAVA框架:hibernate(四)


    一、绑定本地session

    原理:之前connection实现事务一个道理,2种方法:1、变量下传。2、因为servlet是单线程,和本地当前线程绑定。

    配置:

    1)配置核心配置文件hibernate.cfg

    1  <!--绑定本地session-->
    2         <property name="hibernate.current_session_context_class">thread</property>

     2)hibernate本身底层已经帮忙绑定当前线程(threadLocal)通过getCurrentSession 获取session。

    工具类:

     1 package jd.com.test;
     2 
     3 import org.hibernate.Session;
     4 import org.hibernate.SessionFactory;
     5 import org.hibernate.cfg.Configuration;
     6 
     7 public class hibernateUtils {
     8    private final  static Configuration CONFIURATION;
     9    private  final  static SessionFactory SESSIONFACTORY;
    10    static {
    11         CONFIURATION=new Configuration().configure();
    12         SESSIONFACTORY=CONFIURATION.buildSessionFactory();
    13     }
    14     public  static Session getSession(){
    15         return  SESSIONFACTORY.openSession();
    16     }
    17     public  static  Session   getCurrenSession(){
    18        return  SESSIONFACTORY.getCurrentSession();
    19     }
    20 }

    3)业务层进行事务定义:

     1 package jd.com.service.Custorm;
     2 
     3 
     4 import jd.com.dao.Dao;
     5 import jd.com.hibernatepro.Customer;
     6 import org.hibernate.Session;
     7 import jd.com.dao.hibernateUtils;
     8 import org.hibernate.Transaction;
     9 import org.junit.Test;
    10 
    11 public class service {
    12     @Test
    13     public void  savobj(){
    14         Customer customer =new Customer();
    15         customer.setName("iio");
    16         Customer customer1 =new Customer();
    17         customer1.setName("ooc");
    18         Session session=hibernateUtils.getCurrenSession();
    19         Transaction tr=session.beginTransaction();
    20         try {
    21             Dao dao=new Dao();
    22             dao.saveCustorm(customer);
    23             Integer a=2/0;
    24             dao.saveCustorm(customer1);
    25             tr.commit();
    26         }catch (Exception ex){
    27             ex.printStackTrace();
    28             tr.rollback();
    29         }
    30 //        不要关闭session 线程结束就自动关闭session。
    31 
    32 
    33     }
    34 }

    dao层执行:

     1 package jd.com.dao;
     2 
     3 import jd.com.hibernatepro.Customer;
     4 import org.hibernate.Session;
     5 
     6 public class Dao {
     7     public  void  saveCustorm(Customer custome){
     8         Session session=hibernateUtils.getCurrenSession();
     9         session.save(custome);
    10     }
    11 }

    需要注意的是session不需要释放。当前线程结束就释放session。

     简单的条件查询:

     1 **Query查询接口**
     2     
     3     1. 具体的查询代码如下
     4         // 1.查询所有记录
     5         /*Query query = session.createQuery("from Customer");
     6         List<Customer> list = query.list();
     7         System.out.println(list);*/
     8         
     9         // 2.条件查询:
    10         /*Query query = session.createQuery("from Customer where name = ?");
    11         query.setString(0, "tom");
    12         List<Customer> list = query.list();
    13         System.out.println(list);*/
    14         
    15         // 3.条件查询:
    16         /*Query query = session.createQuery("from Customer where name = :aaa and age = :bbb");
    17         query.setString("aaa", "tom");
    18         query.setInteger("bbb", 38);
    19         List<Customer> list = query.list();
    20         System.out.println(list);*/
    21     
    22 ----------
  • 相关阅读:
    Please check logcat output for more details
    如何移植freertos
    依赖: nginx-common (= 1.14.0-0ubuntu1) 但是它将不会被安装
    错误:22 http://ppa.launchpad.net/fkrull/deadsnakes/ubuntu bionic Release 404 Not Found [IP: 91.189.95.83 80]
    由于没有公钥,无法验证下列签名:
    jQuery的TAB切换+定时器
    CSS问题1:div中 li宽度不固定 ie6和ie7不兼容不自动换行
    (转)Sqlite中INTEGER PRIMARY KEY AUTOINCREMENT和rowid的使用
    (转)JS加载顺序
    (转)在网页中JS函数自动执行常用三种方法
  • 原文地址:https://www.cnblogs.com/evilliu/p/8759686.html
Copyright © 2020-2023  润新知