Hibernate:核心API

来源:互联网 发布:江西广电网络好用吗 编辑:程序博客网 时间:2024/05/20 01:43

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,示例:

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


原创粉丝点击