JAVA框架:hibernate(四)

一、绑定本地session

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

配置:

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

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

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

工具类:

 package jd.com.test;

 import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class hibernateUtils {
private final static Configuration CONFIURATION;
private final static SessionFactory SESSIONFACTORY;
static {
CONFIURATION=new Configuration().configure();
SESSIONFACTORY=CONFIURATION.buildSessionFactory();
}
public static Session getSession(){
return SESSIONFACTORY.openSession();
}
public static Session getCurrenSession(){
return SESSIONFACTORY.getCurrentSession();
}
}

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

 package jd.com.service.Custorm;

 import jd.com.dao.Dao;
import jd.com.hibernatepro.Customer;
import org.hibernate.Session;
import jd.com.dao.hibernateUtils;
import org.hibernate.Transaction;
import org.junit.Test; public class service {
@Test
public void savobj(){
Customer customer =new Customer();
customer.setName("iio");
Customer customer1 =new Customer();
customer1.setName("ooc");
Session session=hibernateUtils.getCurrenSession();
Transaction tr=session.beginTransaction();
try {
Dao dao=new Dao();
dao.saveCustorm(customer);
Integer a=/;
dao.saveCustorm(customer1);
tr.commit();
}catch (Exception ex){
ex.printStackTrace();
tr.rollback();
}
// 不要关闭session 线程结束就自动关闭session。 }
}

dao层执行:

 package jd.com.dao;

 import jd.com.hibernatepro.Customer;
import org.hibernate.Session; public class Dao {
public void saveCustorm(Customer custome){
Session session=hibernateUtils.getCurrenSession();
session.save(custome);
}
}

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

简单的条件查询:

 **Query查询接口**

     . 具体的查询代码如下
// 1.查询所有记录
/*Query query = session.createQuery("from Customer");
List<Customer> list = query.list();
System.out.println(list);*/ // 2.条件查询:
/*Query query = session.createQuery("from Customer where name = ?");
query.setString(0, "tom");
List<Customer> list = query.list();
System.out.println(list);*/ // 3.条件查询:
/*Query query = session.createQuery("from Customer where name = :aaa and age = :bbb");
query.setString("aaa", "tom");
query.setInteger("bbb", 38);
List<Customer> list = query.list();
System.out.println(list);*/ ----------
上一篇:《MATLAB面向对象程序设计》


下一篇:嵌入式程序设计中C/C++代码的优化