1、 Configuration管理读取配置文件
1 //读取src下hibernate.properties,不推荐使用 2 Configuration cfg = new Configuration(); 3 //如果hibernate的核心配置文件 不叫 hibernate.cfg.xml ,叫hb.cfg.xml 4 Configuration cfg1 = new Configuration().configure("hb.cfg.xml"); 5 //可编程式 可以不使用配置文件 6 //cfg.addProperties(); 7 //cfg.addResource()
Configuration在一个应用中,最好写一个。通过configuration来创建SessionFactory对象
2、 SessionFactory对象:是一个session工厂。是一个重量级对象。在一个应用中最好也是单列的。是一个线程安全的。属于进程级别的对象。
1 //2.通过Configuration创建SessionFactory对象 2 //在hibernate3.x中是这种写法 3 //SessionFactory sf = cfg.buildSessionFactory(); 4 //hibernate4.3之前~hibernate4.0 5 // ServiceRegistry sr = new ServiceRegistryBuilder() 6 // .applySettings(cfg.getProperties()) 7 // .buildServiceRegistry(); 8 //hibernate4.3 9 ServiceRegistry registry = new StandardServiceRegistryBuilder() 10 .applySettings(cfg.getProperties()) 11 .build(); 12 SessionFactory sf = cfg.buildSessionFactory(registry);
3、 Session对象:使用hibernate进行数据库操作,主要使用session。Session可以理解为对Connection对象的一个包装。Session对象中提供了对数据库的crud操作。Session是一个线程不安全的对象。生命周期非常短暂,一般和事务一一对应。Session又称为hibernate中的一级缓存。Session又是transaction对象的工厂。
4、 Transaction对象:事务管理对象。通过session来获取到该对象。包括了事务的开启,事务的提交,事务的回滚。
1 //第一种写法 2 Transaction tx = session.beginTransaction(); 3 //第二种写法 4 Transaction tran = session.getTransaction(); 5 tran.begin();
事务和异常处理:
1 public static void main(String[] args) { 2 Configuration cfg = null; 3 SessionFactory sf = null; 4 Session session = null; 5 Transaction tx = null; 6 try{ 7 cfg = new Configuration().configure(); 8 ServiceRegistry registry = new StandardServiceRegistryBuilder() 9 .applySettings(cfg.getProperties()) 10 .build(); 11 sf = cfg.buildSessionFactory(registry); 12 session = sf.openSession(); 13 tx = session.beginTransaction(); 14 User u = (User)session.get(User.class, 2); 15 System.out.println("name="+u.getName()); 16 //6.提交事务 17 tx.commit(); 18 }catch (Exception e) { 19 e.printStackTrace(); 20 //回滚事务 21 tx.rollback(); 22 }finally{ 23 //7.关闭session 24 if(session!=null&&session.isOpen()) 25 session.close(); 26 } 27 }
5、Query对象:条件查询