Hibernate学习笔记-hibernate与JDBC比较

  1. JDBC的优点和缺点

JDBC的优点

             直接底层操作,提供了很简单、便捷的访问数据库的方法,跨平台性比较强。灵活性比较强,可以写很复杂的SQL语句。

JDBC的缺点

             因为JAVA是面向对象的,JDBC没有做到使数据能够面向对象的编程,使程序员的思考仍停留在SQL语句上。

             操作比较繁琐,很多代码需要重复写很多次。

             如果遇到批量操作,频繁与数据库进行交互,容易造成效率的下降。

             JDBC的程序操作可以封装一些什么内容?又不可以封装哪些内容?

  1. Hibernate

为什么要用Hibernate

            Hibernate实现了面向对象的数据库编程

            Hibernate比起JDBC来,在代码的书写上比较简单化了。

            Hibernate提出了缓存机制,这样可以使访问数据的效率提高很大。

第一个Hibernate程序

    例子包括的内容:

            项目所需要的LIB包

       配置文件hibernate.cfg.xml

       持久化类      Customer.java

       映射文件      Customer.hbm.xml

结论:通过这个例子可以看到利用面向对象的技术也可以操作数据库。Hibernate就是一个面向对象操作数据库的框架,是基于JDBC开发的。

例子解析

 

 

 

 

 

 

 

 

 

配置文件:

Hibernate.connection.url  表示要链接的数据库地址

Hibernate.connection.driver_class    表示要链接的数据库的驱动类

Hibernate.connection.username     要连接的数据库的用户名

Hibernate.connection.password      要连接的数据库的密码

Hibernate.dialect   表示要使用的数据库的类型

          org.hibernate.dialect.MySQL5Dialect       mysql数据库

          org.hibernate.dialect.Oracle9Dialect        oracle数据库

          org.hibernate.dialect.SQLServerDialect    SQLServer数据库

hibernate.hbm2ddl.auto

          validate:加载hibernate时验证创建表结构

          update:加载hibernate时自动更新数据库结构,如果表存在不用创建,如果不存在就创建。

          create:每一次加载hibernate时都创建表结构

          create-drop:加载hibernate时创建,退出时删除

 

 

 

持久化类:                                                      

映射文件:

客户端:

查询例子:

 

 

删除例子:

 

 

 

更新例子:

 

保存例子:

  1. Cnfiguration 类负责管理 Hibernate 的配置信息。包括如下内容:
    • Hibernate运行的底层信息:数据库的URL、用户名、密码、JDBC驱动类,数据库Dialect,数据库连接池等(对应 hibernate.cfg.xml 文件)。
    • 持久化类与数据表的映射关系(*.hbm.xml 文件)
  1. 创建 Configuration 的两种方式
    • 属性文件(hibernate.properties):

    Configuration cfg = new Configuration();

    • Xml文件(hibernate.cfg.xml

    Configuration cfg = new Configuration().configure();

第二种创建方式较为常见。Hibernate.cfg.xml文件默认的目录为系统的根目录。

(展示源代码以得到证实)

也可以利用config.config方法来指定配置文件所在的目录。

  1. Configuration对象根据当前的配置信息生成 SessionFactory 对象。SessionFactory 对象一旦构造完毕,即被赋予特定的配置信息(SessionFactory 对象中保存了当前的数据库配置信息和所有映射关系以及预定义的SQL语句。同时,SessionFactory还负责维护Hibernate的二级缓存)。

   Configuration cfg = new Configuration().configure();

   SessionFactory sf = cfg.buildSessionFactory();

  1. 是线程安全的。
  2. SessionFactory是生成Session的工厂:

    Session session = sf.openSession();

  1. 构造 SessionFactory 很消耗资源,一般情况下一个应用中只初始化一个 SessionFactory 对象。
  2. 在Hibernate中,Transaction tx = session.beginTransaction()相当于给数据库操作起事务。Session.commit()则为提交事务。
  3. Hibernate的整个运行过程如下:

1、应用程序先调用Configuration类,该类读取Hibernate配置文件及映射文件中的信息,

2、并用这些信息生成一个SessionFactory对象,

3、然后从SessionFactory对象生成一个Session对象,

4、并用Session对象生成Transaction对象;

    A、可通过Session对象的get(),load(),save(),update(),delete()和saveOrUpdate()等方法对PO进行加载、保存、更新、删除、等操作;

B、在查询的情况下,可通过Session对象生成一个Query对象,然后利用Query对象执行查询操作;如果没有异常,Transaction对象将提交这些操作到数据库中。

 

ORM框架  ------hibernate

1.开源的持久层框架.

2.ORM(Object/Relational Mapping)映射工具,建立面向对象的域模型和关系数据模型之间的映射.

3.连接java应用和数据库的中间件.

4.对JDBC进行封装,负责java对象的持久化.

5.在分层结构中处于持久化层,封装对数据库的访问细节,

  使业务逻辑层更专注于实现业务逻辑

 

 

Hibernate的优点:

1、Hibernate对JDBC访问数据库的代码做了封装,大大简化

          了数据访问层繁琐的重复性代码。
 2、Hibernate是一个基于jdbc的主流持久化框架,是一个优秀

           的orm实现,它很大程度的简化了dao层编码工作。
 3、Hibernate使用java的反射机制,而不是字节码增强程序类实现

           透明性
 4、Hibernate的性能非常好,因为它是一个轻量级框架。映射的灵

           活性很出色。它支持很多关系型数据库,从一对一到多对多的各

           种复杂关系。

5、Hibernate使数据库的操作完全面向对象。而不是从前的面向关系进行操作。

建立ORM思想

          应用Hibernate意味着程序员将不直接操作SQL语句,也就是说以前对SQL的直接操作现在要用面向对象实现。实际上ORM到JDBC是紧密相连的。于此带来了一些问题:

主键是怎么样产生的

一对多、多对一的关系在面向对象中是怎么样去实现的