关于在使用hibernate之前的配置步骤博主另一篇博客有讲到https://blog.csdn.net/My_name_is_ZwZ/article/details/82822661
1.读取总的配置文件
Configuration configuration = new Configuration( ).configure( );//将配置文件的信息读给Configuration对象
Configuration configuration = new Configuration( ).configure("");hibernate总的配置文件的默认名字hibernate.cfg.xml如果改掉了的话上边那句代码就要改成这个,其中引号里面要加进去改后的名字(具体原因看hibernate在线API Configuration类里面这两个方法的介绍,这里不再阐述)
Configuration类的四个重要用途:
1)负责管理hibernate的配置信息(也就是说程序运行的时候会把这个配置文件给加载进去)
2)读取hibernate.cfg.xml
3)加载hibernate.cfg.xml配置文件中的配置驱动,url,用户名,密码,连接池
4)管理 *.hbm.xml对象关系文件(从总的配置文件中的<mapping resource="">标签就可以看得出来)
2.创建sessionFactory
即session工厂,可以简单地理解成 生产session的地方,而生产session的目的就是用它去连接数据库并对数据库内容和信息进行操作(这里的session跟浏览器和服务器之间交互的那个session没有半毛钱关系。这里的是指java程序和数据库之间的交互。在javaweb程序中,session工厂在服务器一端,并不在浏览器)
SessionFactory sessionFactory = configuration.buildSessionFactory( );
SessionFactory是一个接口,其关键知识点:
1)缓存sql语句和某些数据(称为session级缓存)
2)它是一个重量级的类,比较吃内存
3)一个数据库对应一个SessionFactory对象即可
3.通过SessionFactory对象得到session (session就是对connection的封装) :
1).
Session session = factory.openSession( );
2).
Session session = factory.getCurrentSession( );
以上两种方法的区别:
1>openSession( )用于获取一个新的回话,每一次用factory.openSession( )创建回话的时候都是创建的新的回话。
2>getCurrentSession( )用于获取和当前线程绑定的session,也就是说在同一个线程中我们调用这个方法获取到的session始终是同一个session(这一点可以在两次调用此方法后将得到的对象的hashCode输出到控制台加以验证),这样利于事务控制。
3>采用getCurrentSession( )创建的session在事务commit或者rollback时会自动关闭,但是采用openSession( )创建的session必须手动关闭。
4>使用getCurrentSession( )创建session后用于查询的时候,也是必须要用事务提交。否则会报错
***使用getCurrentSession( )方法之前要在hibernate.cfg.xml中进行一个简单的配置,内容如下:
如果使用的是本地事务(jdbc事务)
<property name="current_session_context_class">thread</property>
如果使用的是全局事务(即jta事务,使用较少)
<property name="current_session_context_class">jta</property>
***jdbc事务与jta事务的区别:
本地事务即是针对一个数据库的操作
全局事务即是跨数据库的事务
(一般一个java程序都是用的某一个数据库,所以对两个数据库进行操作的情况比较少见。例如:跨行转账,且他们两 个银行所用到的数据库不相同)
4.开启事务(什么是事务:事务是数据库中的一个概念,是数据库运行中的一个逻辑工作单位。增删改需要事务,查询不需要事务,但是查询的时候也可以写事务。因为事务只有在数据发生变化的时候才起到作用。具体看百度百科)
Transaction transaction = session.beginTransaction( );
5.持久化存储数据(也就是通过相关对象去进行操作数据库)
. . .
. . .
session.save( );//这里是拿添加的方法作为例子来说明,还有可能是删除修改查询
6.提交事务
transaction.commit( );
7.关闭session(就好比关闭connection连接一样)
session.close( );