Hibernate使用帮助类实现简单的增删查改(CRUD)

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().


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值