1、 Configuration管理读取配置文件

     //读取src下hibernate.properties,不推荐使用
Configuration cfg = new Configuration();
//如果hibernate的核心配置文件 不叫 hibernate.cfg.xml ,叫hb.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对象的工厂。

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

                 //第一种写法
Transaction tx = session.beginTransaction();
//第二种写法
Transaction tran = session.getTransaction();
tran.begin();

事务和异常处理:

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

5、Query对象:条件查询

05-07 15:27