【3.0】第一个Hibernate4程序----详解

1.Configuration管理读取配置文件

//读取src下hibernate.properties,不推荐使用
Configuration cfg = new Configuration();

//如果hibernate的核心配置文件 不叫 hibernate.cfg.xml 
//Configuration cfg1 = new Configuration().configure("hb.cfg.xml");

//可编程式 可以不使用配置文件
//cfg.addProperties();
//cfg.addResource()

Configuration【不理解如何看出它是一个单例,再补充】在一个应用中,最好写一个。通过configuration来创建SessionFactory对象。

  

2. SessionFactory对象:是一个session工厂。是一个重量级对象。在一个应用中最好也是单例的。是一个线程安全的。属于进程级别的对象。

//2.通过Configuration创建SessionFactory对象
		
		//在hibernate3.x版本中是这种写法:
		//SessionFactory sf = cfg.buildSessionFactory();
		
//		hibernate4.3~hibernate4.0版本中:
//		ServiceRegistry sr = new ServiceRegistryBuilder()
//							.applySettings(cfg.getProperties())
//							.buildServiceRegistry();
		
		//hibernate4.3版本中:
		ServiceRegistry registry = new StandardServiceRegistryBuilder()
		  					.applySettings(cfg.getProperties())
		  					.build();
		SessionFactory sf = cfg.buildSessionFactory(registry);

 

3. Session对象:使用hibernate进行数据库操作,主要使用session。Session可以理解为对Connection对象的一个包装。Session对象中提供了对数据库的crud操作。Session是一个线程不安全的对象。生命周期非常短暂,一般和事务一一对应。Session又称为hibernate中的一级缓存。Session又是transaction对象的工厂。

//5.保存数据
		User user = new User();
		user.setName("小风");
		user.setPwd("1111");
		session.save(user);
//		User u  = (User)session.get(User.class, 2);
//		System.out.println("name="+u.getName());

  

  

4.Transaction对象:事务管理对象。通过session来获取到该对象。包括了事务的开启,事务的提交,事务的回滚。

//4.通过session对象 得到Transaction对象
		//开启事务
		//第一种写法
		Transaction tx = session.beginTransaction();
//		//第二种写法
//	    Transaction tran = session.getTransaction();
//		tran.begin();
		//5.保存数据
		User user = new User();
		user.setName("小风");
		user.setPwd("1111");
		session.save(user);
//		User u  = (User)session.get(User.class, 2);
//		System.out.println("name="+u.getName());
		
		//6.提交事务
		tx.commit();
		
		//7.关闭session
		session.close();

  

5.事物和异常处理

package cn.siggy.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;

import cn.siggy.pojo.User;

public class TestException {
	public static void main(String[] args) {
		Configuration cfg = null;
		SessionFactory sf = null;
		Session session = null;
		Transaction tx = null;
		try{
			cfg = new Configuration().configure();
			ServiceRegistry registry = new StandardServiceRegistryBuilder()
			  					.applySettings(cfg.getProperties())
			  					.build();
			sf = cfg.buildSessionFactory(registry);
			session = sf.openSession();
			tx = session.beginTransaction();
			User u  = (User)session.get(User.class, 2);
			System.out.println("name="+u.getName());
			//6.提交事务
			tx.commit();
		}catch (Exception e) {
			e.printStackTrace();
			//回滚事务
			tx.rollback();
		}finally{
			//7.关闭session
			if(session!=null&&session.isOpen())
			session.close();
		}
	}
}

  

 

posted @ 2017-04-06 16:02  chxbar  阅读(230)  评论(0编辑  收藏  举报