Hibernate入门学习(一)(二)

2014-11-24 07:25:47 · 作者: · 浏览: 1

好了,一个添加功能就已经实现,但是写到这里,我们可能发现我们每进行一次操作,比如添加,修改,删除,查找都需要执行这段代码:

Configuration cfg = new Configuration().configure();
SessionFactory factory = cfg.buildSessionFactory();

这段代码非常耗性能,因为它每次都需要去加载解析配置文件hibernate.cfg.xml,并且每次都需要创建session;因此我们不妨自己创建一个工具类,采用单利的方式来进行实现,并且该工具类实现实体的增删改查,代码如下:

HibernateUtils.java

package toone.com.cn.util;

import java.io.Serializable;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

public class HibernateUtils {
	private static SessionFactory sessionfactory;
	private HibernateUtils(){}
	static{
	Configuration cfg = new Configuration().configure();
	sessionfactory = cfg.buildSessionFactory(); 
	}
	public static Session getSession(){
		return sessionfactory.openSession();
	}
	//添加
	public static void add(Object obj){
		Session session = null;
		Transaction tx = null;
		try {
			session = HibernateUtils.getSession();
			tx = session.beginTransaction();
			session.save(obj);//区别:save()方法如果没有开启事务,它会执行一条插入语句,但之后由于没有提交事务,它又进行
			//session.persist(obj);//回滚了,而persist()方法在没有开启事务的时候,它根本不会去执行,即没有那条插入语句
			tx.commit();
		}finally{
			if(session!=null){
				session.close();
			}
		}
	}
	//修改
	public static void update(Object obj){
		Session session = null;
		Transaction tx = null;
		try {
			session = HibernateUtils.getSession();
			tx = session.beginTransaction();
			session.update(obj);
			tx.commit();
		}finally{
			if(session!=null){
				session.close();
			}
		}
	}
	//删除
	public static void delete(Object obj){
		Session session = null;
		Transaction tx = null;
		try {
			session = HibernateUtils.getSession();
			tx = session.beginTransaction();
			session.delete(obj);
			tx.commit();
		}finally{
			if(session!=null){
				session.close();
			}
		}
	}
	//查找 不需要开启事务
	public static Object findById(Class clazz,Serializable id){
		Session session = null;
		try {
			session = HibernateUtils.getSession();
		//这里需要区分一下get()与load()的区别,load()不会立即//去访问数据库只有在第一次使用的时候才会去加载(懒加载);
		//load方法永远不可能返回空对象(如果不存在,其会产生一个user的子类)具体可以去查资料区别这两个方法
			//Object obj = session.load(clazz, id);
			Object obj = session.get(clazz, id);return obj;}finally{if(session!=null){session.close();}}}}


最后,一个实体的增删改查操作就完成了,下面我们可以重写Main.java文件来使用HibernateUtils工具类来对实体进行操作了:

Main.java

package toone.com.cn;
import java.util.Date;


import toone.com.cn.bo.User;
import toone.com.cn.util.HibernateUtils;


public class Main {
	public static void main(String[] args){
		User user = new User();
		user.setName("Kobi");
		user.setBirthday(new Date());
		HibernateUtils.add(user);//添加
		user.setName("Jams");
		HibernateUtils.update(user);//修改
		HibernateUtils.delete(user);//删除
		User user1 = (User) HibernateUtils.findById(User.class, user.getId());//查找
		System.out.println(user1.getName());
		
	}
}



总结:了解了Hibernate的基本作用,学会了使用其来进行增删改查操作,算是工作之余的一点收获吧,以后还得继续坚持发帖,不断学习!