【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(); } } }