1,Configuration类,用于加载解析配置文件的类,通过new可以获取其实例,直接new可用于加载名为hibernate.properties的主配置文件,new Configuration().configure();调用configure方法可以加载src下的hibernate.cfg.xml文件。
2,获取到configuration对象后,利用该对象的buildSessionFactory()方法,可以获取SessionFactory工厂对象,Session相当于维护hibernate与数据库的一次会话,那么SessionFactory则可以代表一个连接池,其实SessionFactory底层也是利用了DataSource数据源的。
3,获取到sessionFactory对象后,利用这个对象的openSession()方法可以获取Session链接对象,这相当于与数据库建立了会话。开启了资源,就需要在最后关闭,可以将关闭资源的代码放到finally代码块里,关闭资源的API:session.close();。
4,获取session对象后,可以用它获取事务对象,hibernate默认是不开启事务的,需要我们手动开启,通过session.beginTransaction()方法可以开启事务,并获取一个Transaction对象,事务开启以后不自动提交,需要在事务完成后我们自己手动提交,transaction.commit()方法可以完成提交事务的动作。事务是有原子性的,我们需要维护他的原子性,一旦任何一个子任务没有完成或出现错误,整个事务就不能完成,要回滚到初始状态,可以在catch中将其回滚,回滚的API为:transaction.rollback()。
5,利用session链接对象,我们可以进行CURD的操作。
增:session.save(Object obj)将映射好的PO保存到数据库,可以利用session.saveOrUpdate()方法,该方法确保在数据库中没有这条记录时就添加一条记录,有了这条记录时就更新这条记录。
删:session.delete(obj),将当前PO,根据其主键,从数据库删除。
改:session.update(obj),根据主键更新当前PO。
查:session.get(obj.class,主键),根据给定的PO,以及主键,从数据库获取该PO的实例。
Session.createQuery(HQL),利用HQL建立条件查询,得到一个Query对象,该对象的list()方法可以获取所有符合条件的PO实例。
6,示例:
@Test
public void test1(){
//创建配置文件对象,负责加载解析配置文件
Configuration configuration = new Configuration().configure();
//建立连接池
SessionFactory sessionFactory = configuration.buildSessionFactory();
//建立链接
Session session = sessionFactory.openSession();
//开启事务
Transaction transaction = session.beginTransaction();
try {
//增
User user = new User();
user.setUsername(“xiaoqiang”);
user.setPassword(“1234”);
session.save(user);
//删
User user = new User();
user.setId(1);
session.delete(user);
//改
User user = new User();
user.setId(1);
user.setUsername(“wangcai”);
user.setPassword(“123456”);
session.update(user);
//查:
User user1 = session.get(User.class,1);
Query query = session.createQuery(“from t_user”);
List<User> userList = query.list();
for(User u : userList) {
System.out.println(u);
}
//提交事务
transaction.commit();
} catch (HibernateException e) {
//回滚
transaction.rollback();
throw e;
} finally {
//关闭资源
session.close();
}
}