AP计算机科学A(APcomputer science A)复习备考攻略视频教程
43759 人在学
在java领域,访问关系数据库的最原始、最直接的方法是借助JDBC API。但是它的缺点是在java中嵌入了太多SQL的代码。Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架。越来越多的Java开发人员通过Hibernate来访问关系数据库,以节省和访问数据库有关的30%的JDBC编程工作量。而Hibernate核心借口和数据类型都是Hibernate的基础知识,下面我们来了解一下关于两者的概念。
Hibernate数据类型
Hibernate类型概念是一个基础的并且非常强大的体系结构元素。Hibernate的设计使Hibernate类型对象将Java类型映射到数据库字段的类型时,会持续类所有的持续属性,都会有一个对用的Hibernate类型。这样子Hibernate使用的时候就会变得极端灵活并且易于扩展。
Hibernate映射类型分为两类:内置的和客户化的类型。内置负责把一些常见的java类型映射到相应的SQL;
客户化映射是用户能够以编程方式创建自定义的映射类型来讲持久化类任意类型的属性映射到数据库。
还有Hibernate中支持用户自定义类型,分别提供了UserType和serType接口允许用户增加自己自定义的类型。使用这个自定义应用使用的共通类就可以方便简单的进行处理。例如:Name。在Hibernate中,自定义被人们认为是它的重要特征,并且鼓励你对自定义类型进行创新或创造性的使用。
Hibernate的核心接口
Hibernate中有五个核心的接口:Configuration接口、SessionFactory接口、Session接口、Criteria接口以及Transaction接口,这些接口几乎在Hibernate应用中都会用到,非常基础。
Configuration接口
Configuration是你在开始使用Hibernate时遇到的第一个对象,但它只是在Hibernate应用范围中相对较小的一个部分。Configuration使用一个配置实例来指定映射文件的位置和Hibernate的特定属性,然后创建一个会话。实现对Hibernate进行配置以及对它进行启动。在Configuration类的实例读取这些配置后就会创建一个SessionFactory对象。
SessionFactory接口
SessionFactory作为Hibernate中的核心接口,起到了一个缓冲区的作用。你可以先通过Configuration实例构建SessionFactory。然后SessionFactory负责创建Session实例,如下:
Configuration con=new Configuration().configure();
SessionFactorysessionFactory=con.buildSessionFactory();
当SessionFactory构建完成的时候就会被赋予特定的配置信息。在SessionFactory中,保存了对用当前数据库的所有映射,同时也维护当前的二级缓存以及Statement Pool。由于SessionFactory采用了线程安全设计,它可以在多个应用线程间进行共享。
典型地,整个应用只有唯一的一个会话工厂——例如在应用初始化时被创建。然而,如果你的应用使用Hibernate访问多个数据库,你需要对每一个数据库使用一个会话工厂。会话工厂缓存了生成的SQL语句和Hibernate在运行时使用的映射元数据。它也保存了在一个工作单元中读入的数据并且可能在以后的工作单元中被重用(只有类和集合映射指定了这种二级缓存是想要的时才会如此)。
Session(会话)接口
Session是Hibernate持久化操作的基础,也是Hibernate应用使用的主要方法。它提供了众多持久化方法,如save、update、delete等。通过这些方法,透明地完成对象的增加、删除、修改、查找等操作。
有时候你的应用可能每一次请求都在创建于烧毁会话,但是你要知道的是会话接口的实例知识轻量级的而且创建于烧毁的代价也不贵。值得注意的是,Hibernate Session的设计不是线程安全的。就是说一个Session实例同时只能由一个使用,同一个Session实例的多线程并发调用将导致难以预知的错误。
在Hibernate中,Session是一个介于连接和事务之间的概念。你也可以简单的认为Session是一个单独的工作单元已装载对象的缓存或集合。而Hibernate可以知道对象在这个工作单元中的改变。就像Session中存储和取出对象的接口这些持续性的操作,我们有时候也会将Session称为持续性管理器。
还有一个要注意的地方是,Hibernate Session与web层的HttpSession没有任何关系。
Criteria接口
接口非常小,Criteria允许你创建和指向对面向对象的标准查询。而Hibernate为了帮助应用代码减少冗余,提供了一些快捷方法在会话接口上,这些方法能够允许你可以在一行代码中调用一个查询。
Query接口
Query(查询)接口允许你在数据库上执行查询并控制查询如何执行。查询的方法使用SQL数据库或者使用HQL编写。
Query query=session.createQuery(“fromtable where id=1”);
Transaction接口
Hibernate是对JDBC的轻量级对象封装,Hibernate本身是不具备Transaction处理功能的,Hibernate的Transaction实际上是底层的JDBC Transaction的封装,或者是JTA Transaction的封装。
在使用中,Hibernate应用可以选择不使用这个接口,而是直接在自己的底层代码中管理事务。所以Transaction接口就是一个可选择的API。如果使用Transaction,它会将应用代码从下层的实务中抽象出来。这个事务有可能是一个JTA用户事务或者是一个公共对象请求代理结构,又或者是一个JDBC事务。允许应用通过一组一致的API控制事务边界,有助于让Hibernate应用在不同类型的容器中或者执行环境中的可移植性。
在没有ORM之前,程序员需要自己开发对象到数据库的映射工作,这让当时的程序员觉得崩溃,因为这个过程实在是太过繁琐耗时。但是现在有了Hibernate为程序员做这项工作,程序员只要进行小小的配置即可。所以可以看出,Hibernate在编程中的便利。所以在Hibernate这一方面多多少少都要有一定的了解。