作为SSH三大框架之一的Hibernate,是用来把程序的Dao层和数据库打交道用的,它封装了JDBC的步骤,是我们对数据库的操作更加简单,更加快捷。利用Hibernate框架我们就可以不再编写重复的JDBC代码,不再反复的测试我们的SQL语句写的如何。这里这需要我们简单配置,调用框架给我们提供的方法,就可以完成对数据增删改查的,那么Hibernate到底是个什么样的框架呢?如何使用呢?先看一个关于Hibernate框架的知识体系图:

   这篇博客,我们来总结一下,Hibernate宏观的认识和,环境搭建。

   一,Hibernate到底是什么?

     Hibernate是一个基于元数据的轻量级的ORM框架:

    1,元数据(Meta Data):data about data(数据的数据),也就是说描述一个对象数据,相当于这个对象的上下文环境。

    2,轻量级:占用资源少,没有侵入性。(其实我认为这只是相对而言,如果和Ibatis相比,它到成重量级的了)。

    3,ORM:(Object Relation Mapping)对象关系数据库的映射

    这是Hibernate框架的重点,也就是说将我们程序中的实体(bean,这里也叫POJO)和数据库中的表进行映射。java类型和sql类型映射,面向对象设计和关系型数据库设计的映射,从而我们只需要将更多的精力放到业务中,而不是sql数据库方面。

    4,POJO:(Plain Ordinary Java Object),无格式的普通java对象,也就是上边说的实体,和数据库做映射的简单类。只是在这里提出了一个新的名词而已。

    总而言之,Hibernate就是将我们的数据库表和程序的POJO类进行映射,数据的操作进行了封装,使我们不用把数据库弄得非常精通,我们会面向对象编程就可以了,这样大大提高了我们的编程效率,而且对个人的知识要求也降低了。(Hibernate的设计目的是这样的,可是我觉的要想更好的应用Hibernate,更好的掌握开发的来龙去脉,这是要求我们要有更高的能力了,知其然知其所以然了)

   二,环境搭建:

    1,和前边几个框架的大概流程一样,首先需要我们拷入必备的jar包。jar包的拷入奔着一个够用即可的原则,用什么拷贝什么,当然有些日志输出,单元测试是为了更好的观察框架而拷入的不是必备的。这里讲到是用MySql来进行演示,所以使用了mysql的驱动jar包:

    antlr-2.7.6.jar (生成SQL语句)

    asm.jar(字节码增强工具类)

    c3p0-0.9.1.jar(数据源连接池组件)

    cglib-2.1.3.jar(代理组件,基于继承的)

    commons-collections-2.1.1.jar(集合工具类组件,会进行高效的操作)

    commons-logging-1.0.4.jar(日志输出的转换组件)

    log4j-1.2.11.jar(日志输出组件,更加详细和可以控制输出格式,及目的地)

    dom4j-1.6.1.jar(XML解析)

    ehcache-1.2.3.jar(缓存组件)

    ejb3-persistence.jar(持久化操作的规范jar包)

    hibernate3.jar(框架的核心jar包)

    jta.jar(全局的事务管理)

    junit-3.8.1.jar        (单元测试)

    mysql-connector-java-3.1.13-bin.jar        (MySQL数据库驱动jar包)

    2,引入配置文件:

    hibernate.cfg.xml  Hibernate核心配置文件(包括数据库的连接配置,映射文件的读取等)

    log4j.properties          Log4j的日志输出控制文件

  User.hbm.xml  映射文件(这里的User只是匹配User实体的,一个实体类对应一个此类的映射文件。)

  3,核心配置文件hibernate.cfg.xml的编写:

<hibernate-configuration>
<!-- 构造数据库的连接工厂,这是Hibernate的核心类 -->
<session-factory> <!-- 这里是简单的数据库连接的基本信息,也可以写在配置文件中,或者利用JNDI来调用数据源 -->
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/example?useUnicode=true&characterEncoding=utf8</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.username">ljh</property>
<property name="hibernate.connection.password">ljh</property> <!-- 在控制台里打印生成的SQL语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 格式化控制台输出的SQL语句,这两条都是方便我们来学习Hibernate框架 -->
<property name="hibernate.format_sql">true</property> <!--
方言:根据指定的方言与数据库打交道,完成SQL的具有语句生成,因为不同的数据库sql语法还是有区别的,
这里相当于告诉Hibernate框架,我们使用的是什么数据库。
MySQL : org.hibernate.dialect.MySQLDialect
Oracle : org.hibernate.dialect.OracleDialect
-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 管理所有的映射资源文件,这里仅仅配置了User类的配置映射文件,应该将我们的所有的映射配置文件设置到这里,这样我们框架才能找到 -->
<mapping resource="com/ljh/hibernate/pojo/User.hbm.xml"/> </session-factory>
</hibernate-configuration>
 

  4,   *.hbm.xml与实体类对应的用来做映射的文件的编写,我觉的这里是重点,设计的知识点比较多。这里简单看一个,后边会总结这里边的语法:

<hibernate-mapping>
<!-- 实体类class和数据库表table的映射 -->
<class name="com.ljh.hibernate.pojo.User" table="t_user"> <!--
id标签用来映射主键字段
name属性表示类的属性
column属性表示表的字段
-->
<id name="usercode" column="usercode" length="20">
<!-- 主键生成策略
native 表示根据连接数据库的表的主键生成方式来生成主键值
mysql数据采用的auto_increment属性来生成主键值,一般主键字段需要设置的类型为int
assigned 表示主键由用户自己维护。
-->
<generator class="assigned"/>
</id> <!-- 普通属性的映射
name 表示类中的属性名称
column 表示表中的列名称 column属性不指定会采用默认的值,默认名称与属性名称一致
length 表示属性的字符长度
not-null 表示属性值不能为null
-->
<property name="userpswd" column="userpswd" type="java.lang.String" length="20" not-null="true"/>
<property name="username" />
<property name="regdate" length="19"/>
<property name="orgtype" length="1"/>
</class>
</hibernate-mapping>

  5,上边已经做好了实体类和数据表的映射了,我们可以通过Hibernate框架提供的方法进行对数据库的数据操作了,简单看一个dao层类的实现:

public void insert(User user) {
//加载配置文件:classpath:hibernate.cfg.xml
Configuration config = new Configuration().configure();
//创建连接工厂
SessionFactory sf = config.buildSessionFactory(); //会话对象,表示与数据库的连接会话过程,相当于jdbc的connection连接对象
Session session = null;
Transaction tx = null ;
try {
//获取会话对象
session = sf.openSession();
//打开事务:Hibernate默认数据操作是不提交事务的,所以我们要手动提交事务。
tx = session.beginTransaction();
//保存对象,持久化操作
session.save(user);
//提交事务
tx.commit();
} catch (Exception e) {
e.printStackTrace();
//事务回滚
tx.rollback();
} finally{
//连接会话关闭
if(session!=null){
session.close();
}
}
}

  这样一看我们的方法写的代码也是挺多了,想说的是这里只是写出了Hibernate框架是从创建sessionFactory对象,然后创建session对象,通过session对象进行对数据库的操作。其实真正的开发中,我们会把这些对象,事务的操作交给框架来管理,我们需要做的就是持久化操作的那些代码,是非常少的。

   综上为Hibernate实现一个简单插入user数据的例子,当然如果数据库关系复杂了,或者更多的设置,后边会进行相关总结。最后来看看Hibernate框架的优缺点吧,当然这些优缺点都是相对而言呢,看用在什么环境下了!

  优点:

  1,轻量级的ORM框架

  2,对JDBC进行了很好的封装,使用了ORM做了映射,那么就可以通过面向对象的方式很容易的操作数据库了。

  3,它还提供了缓存机制,可以提高效率。等

  缺点:

  1,如果对大量的数据进行频繁的操作,性能效率比较低,不如直接使用JDBC。

  总而言之对于框架,我们利用其优秀的一面,避开其不好的一面,使其对我们开发发挥最大的作用即可!!!

Hibernate框架(一)——总体介绍的更多相关文章

  1. ABP开发框架前后端开发系列---(1)框架的总体介绍

    ABP是ASP.NET Boilerplate的简称,ABP是一个开源且文档友好的应用程序框架.ABP不仅仅是一个框架,它还提供了一个最徍实践的基于领域驱动设计(DDD)的体系结构模型.学习使用ABP ...

  2. Hibernate框架 jar包介绍

    一直使用my eclipse集成的Hibernate来学习.最近在写hibernate的日记,写到搭建hibernate框架的时候才发现自己对hibernate的内容还是不了解,决定自己手动搭建一下. ...

  3. 深入浅出学习Hibernate框架(二):JDBC基础操作

    上篇博客<深入浅出学习Hibernate框架(一):从实例入手初识Hibernate框架>简单介绍了一下Hibernate框架,并且举了一个实例来了解Hibernate.这篇博客将介绍JD ...

  4. ABP开发框架前后端开发系列---(2)框架的初步介绍

    在前面随笔<ABP开发框架前后端开发系列---(1)框架的总体介绍>大概介绍了这个ABP框架的主要特点,以及介绍了我对这框架的Web API应用优先的一些看法,本篇继续探讨ABP框架的初步 ...

  5. Hibernate 系列 01 - 框架技术 (介绍Hibernate框架的发展由来)

    引导目录: Hibernate 系列教程 目录 本篇导航: 为什么学习框架技术 框架的概念 主流框架的介绍 1.为什么学习框架技术 如何制作一份看上去具有专业水准的PPT文档呢?一个简单的方法就是使用 ...

  6. 基于Metronic的Bootstrap开发框架经验总结(8)--框架功能总体界面介绍

    在前面介绍了一系列的<基于Metronic的Bootstrap开发框架经验总结>的随笔文章,随笔主要是介绍各个知识点的内容,对框架的总体性界面没有很好的阐述,本篇随笔主要介绍这个Boots ...

  7. Hibernate框架预览以及基础介绍

    前言 从本节我们开始进入到对于Hibernate框架的学习,当前Hibernate框架还未正式发布6.0稳定版本,所以这里我们以5.4.12Final版本进行讲解. Hibernate框架 Hiber ...

  8. Hibernate框架(一)总结介绍

    作为SSH三大框架之一的Hibernate,是用来把程序的Dao层和数据库打交道用的,它封装了JDBC的步骤,是我们对数据库的操作更加简单,更加快捷.利用Hibernate框架我们就可以不再编写重复的 ...

  9. ABP(现代ASP.NET样板开发框架)系列之1、ABP总体介绍

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之1.ABP总体介绍 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...

随机推荐

  1. qt绘制设备

    # -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' from PyQt4.QtGui import  * from Py ...

  2. 程序猿都是project师吗?

    全部的程序猿都是project师吗?当然不是.project师是必修课.程序猿则是选修.project师为自己的事业工作,而程序猿做他们喜欢做的事情.project是实实在在的,编程是抽象的. 为了吸 ...

  3. VS2008找不到MFC90d.dll错误解决方法

    问题是在更新嵌入的清单文件时发生的,由于FAT32的原因而未能更新嵌入的清单文件,于是我们有如下两种解决方法: (1)不启用增量链接.在项目的“属性|配置属性|链接器|常规”中的“启用增量链接”选择“ ...

  4. PHP <<EOF EOF的使用方法

    PHP <<EOF EOF的使用方法 <?php     $name = '浅水游';     print <<<EOT             <html& ...

  5. Hacker(六)----黑客藏匿之地--系统进程

    windows系统中,进程是程序在系统中的依次执行活动.主要包括系统进程和程序进程两种. 凡是用于完成操作系统各种功能的各种进程都统称为系统进程: 而通过启动应用程序所产生的进程则统称为程序进程. 由 ...

  6. spring mvc + mybatis + spring aop声明式事务管理没有作用

    在最近的一个项目中,采用springMVC.mybatis,发现一个很恼人的问题:事务管理不起作用!!网上查阅了大量的资料,尝试了各种解决办法,亦未能解决问题! spring版本:3.0.5 myba ...

  7. MVC View基础(转)

    View主要用于呈现数据.由于Controller和相关的Service已经处理完业务逻辑并将结果打包成model实体,View只需要怎么去获得model并将其转为Html 1选择需要渲染的视图 在上 ...

  8. 在shell脚本中调用sqlplus

    #!/bin/bash sqlplus dc_file_data_js/dc_file_data_js << EOF1 set linesize 500; set pagesize 100 ...

  9. 实现js浮点数加、减、乘、除的精确计算(网上很多文章里的方法是不能解决所有js浮点数计算误差的)

    最近做项目,要用到js的加.减.乘.除的计算,发现js浮点数计算会有一些误差. 网上有很多文章都有js浮点数计算误差的解决方法,说能解决这个问题,But…….比如一个加法函数,如下: function ...

  10. 存储过程使用表变量或临时表代替游标Fetch实例,访问远程数据库

    定义表变量是可以直接操作在内存中的数据,比较快.临时表在大数据量时会比游标使用的资源少.还是要看具体情况了.也有可能在实际优化过程中相互替换呢. 留作记忆的代码如下: if object_id('te ...