第一步:获取配置信息。
Configuration configuration= new Configuration().configure();
configure英文是配置的意思, 通过读取的配置图纸,建立一个生产session的工厂。
如果你的配置文件是在根目录src下面,则没有参数。如果在其他目录下,就必须添加路径信息,以供Configuration正确读取配置信息。
第二步,进一步获取映射文件的信息,才能构建一个完整功能的工厂。
这两部相当于分别完成接收链接java实体类与数据库数据表之间的联系。
这里相比jdbc改进的一个地方是,不用非得手动获得配置文件的信息,才能进行手动连接。省了这一步,直接进行数据库的链接。建立了联系就相当于建立了链接。
SessionFactory sessionFactory=configuration.buildSessionFactory();
SessionFactory: 创建session对象实例。
这个工厂就相当于依靠两套图纸人嘛建立起来的,可是一旦建立起来,图纸的变动就不会影响SessionFactory 实例。
除非变动图纸(配置映射文件)在建立一家工厂。
Session:
Session就相当于jdbc的connection接口。是持久层操作的基础,前面的两部说到底就是为了获得这个操作的方法。
第三步:创建session。或者说打开session。
工厂建成了,正式开工,产品就是session。
因为工厂建设的老旧的原因,先后不同版本的工厂有不同的方法可以获得session。
Session session= sessionFactory.openSession();
Open是3.0.1以前的版本的获得方法。
sessionFactory.getCurrentSession();
Get是3.0.1以后的版本的获得方法。
这两者的区别就是open不会绑定线程,后者可以。线程的重要用处的增加安全。更让人喜欢的是后者还可以自动提交,自动关闭。相对于前者的手动关闭,可谓更上一层楼,更受懒人的欢迎。
当然小小的一点麻烦不在话下。
在配置文件中添加一段配置信息。
如果是本地事物,配置如下:
<property name=”hibernate.current_session_context_class”>thred</property>
如果是全局事物,配置如下:
<property name=”hibernate.current_session_context_class”>jta</property>
至于具体两者的区别,我也没搞明白。可能是Jta可以对多个connection进行管理,而且他的事务周期可以横跨多个jdbc。不过初学者一般选择本地事物。可能是大多在本机运行吧。
注意一点,用了get,他是自动的,就无需手动关闭了。
Session.close();
第四步:开启事物。数据的操作也就是老四样,增删改查。就好比多了一个监工一样,你的所有的操作必须在监工的指导或者监视下进行,
如果你的版本太低,本身还没有对事物进行封装,用不了get,那么就首先要开启事物。
因为对数据的操作必须放在事物中进行。将这些操作还让jdbc或者jta完成。默认的就是transaction所以可以对这些封装称之为轻量级封装。
3.0.1之后的版本封装了事务的管理能力,还是不能不能称之为重量级封装。原因我也不清楚。可能只多封装了一句吧。
Transaction transaction= session.beginTransaction();
第五步,就是具体的怎删改查的操作了。
session.save(object);//增加保存
session.delete(object);//删除
session.update(object);//更新
session.get(clazz, id);//查询
传递的参数就是我们比较容易理解的java对象,一般都是new的实体类。而后hibernate就能将这些实体类通过反射联系翻译为具体的sql语句。相当于节省了我们编写sql语句的过程。
四大方法多有重载方法,比如删除,更新可以根据id查询。
第六步:提交事物。
正确了,或者得到了监工的认可,自己还不能按下操作启动的按钮,只能有监工按下。
transaction.commit();
如果他感觉你做的差强人意就会让你重头开始,也就是
transaction.rollback();//回滚
最后,第七部。工作完成了,监工走了,你还不能走,因为你好要断电,打扫,关门等操作。
//session.clear();//清除内存中的数据
//session.flush();//将内存中的数据彻底搬迁到硬盘中。
session.close();//彻底关闭。