1.提取重复的代码写一个hibernate帮助类
1):HFUtil.java
package cn.pzhu.utils;
/**
* 这是一个对Hibernate的帮助类
* 是对重复代码的抽取
* @author jgm
*/
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HFUtil {
private static SessionFactory sf=null;
//定义一个线程的局部变量 用来标识唯一的一个线程
private static ThreadLocal<Session> threadLocal=new ThreadLocal<Session>();
static {
sf = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
}
/**
* 获取session
*/
public static Session getSession() {
//首先判断是否已经存在session
Session session=threadLocal.get();
if(null!=session) {
return session;
}
session=sf.openSession();
//将这个session放在线程的局部变量中去
threadLocal.set(session);
return session;
}
/**
* 关闭资源
*/
public static void close() {
Session session=threadLocal.get();
if(null!=session) {
//说明有session存在
//首先要提交这个事物
session.getTransaction().commit();
//关闭资源
session.close();
}
}
}
2).HibernateUtil.java
import org.hibernate.Session;
/**
*
* @author Guomin JIn
*
*/
public class HibernateUtil {
/**
* 保存的方法
* @param object
*/
public static void save(Object object) {
Session session=HFUtil.getSession();
session.beginTransaction();
session.save(object);
HFUtil.close();
}
/**
* 删除的方法
* @param object
*/
public static void delete(Object object) {
Session session=HFUtil.getSession();
// session.beginTransaction();
session.delete(object);
HFUtil.close();
}
/**
* 修改的方法
* @param object
*/
public static void update(Object object){
Session session=HFUtil.getSession();
//session.beginTransaction();
session.update(object);
HFUtil.close();
}
/**
* 查询的方法
* @param object
*/
public static <T> T query(int id,Class clazz) {
Session session=HFUtil.getSession();
session.beginTransaction();
T t1=(T) session.get(clazz, id);
//HFUtil.close();
return t1;
}
}
2.hibernate已经准备好,现在编写测试类测试数据库的增删查改
User为实体 具有三个属性 id name password
配置很简单就省略
测试使用junit
test.java
import org.junit.Test;
import cn.pzhu.pojo.User;
import cn.pzhu.utils.HFUtil;
import cn.pzhu.utils.HibernateUtil;
public class test_001 {
/**
* 测试保存方法
*/
@Test
public void testSave() {
// TODO Auto-generated method stub
User user=new User(4, "zengtugou", "122030");
HibernateUtil.save(user);
}
@Test
public void testUpdate() throws Exception{
// TODO Auto-generated method stub
User user=HibernateUtil.query(1, User.class);
System.out.println(user);
user.setUsername("das");
user.setPassword("123");
HibernateUtil.update(user);
System.out.println(user);
//HFUtil.close();
}
@Test
public void testdelete() {
User user=HibernateUtil.query(2, User.class);
HibernateUtil.delete(user);
}
@Test
public void testQuery() {
User user=HibernateUtil.query(3, User.class);
HFUtil.close();
System.out.println(user);
}
}
如果出现报错Transaction already active,则要观察程序在运行中是否重复session.beginTransaction().