作为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的编写:

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

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

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

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

  1. public void insert(User user) {
  2. //加载配置文件:classpath:hibernate.cfg.xml
  3. Configuration config = new Configuration().configure();
  4. //创建连接工厂
  5. SessionFactory sf = config.buildSessionFactory();
  6. //会话对象,表示与数据库的连接会话过程,相当于jdbc的connection连接对象
  7. Session session = null;
  8. Transaction tx = null ;
  9. try {
  10. //获取会话对象
  11. session = sf.openSession();
  12. //打开事务:Hibernate默认数据操作是不提交事务的,所以我们要手动提交事务。
  13. tx = session.beginTransaction();
  14. //保存对象,持久化操作
  15. session.save(user);
  16. //提交事务
  17. tx.commit();
  18. } catch (Exception e) {
  19. e.printStackTrace();
  20. //事务回滚
  21. tx.rollback();
  22. } finally{
  23. //连接会话关闭
  24. if(session!=null){
  25. session.close();
  26. }
  27. }
  28. }

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

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

优点:1,轻量级的ORM框架

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

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

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

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

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

  1. Hibernate框架 jar包介绍

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

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

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

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

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

  4. Hibernate框架(一)——总体介绍

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

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

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

  6. SSH(Struts2+Spring+Hibernate)框架搭建流程<注解的方式创建Bean>

    此篇讲的是MyEclipse9工具提供的支持搭建自加包有代码也是相同:用户登录与注册的例子,表字段只有name,password. SSH,xml方式搭建文章链接地址:http://www.cnblo ...

  7. 为什么要用Hibernate框架? 把SessionFactory,Session,Transcational封装成包含crud的工具类并且处理了事务,那不是用不着spring了?

    既然用Hibernate框架访问管理持久层,那为何又提到用Spring来管理以及整合Hibernate呢?把SessionFactory,Session,Transcational封装成包含crud的 ...

  8. 深入浅出学习Hibernate框架(一):从实例入手初识Hibernate框架

    这篇博客是hibernate学习的第一篇,主要简介hibernate框架,之后简单说一下hibernate的文件夹结构,最后写一个简单的hibernate实例.通过这三步来简单的认识一下hiberna ...

  9. 1.Hibernate框架核心组件 (转自冯岩)

    Hibernate框架核心组件 在Hibernate框架简述中,演示了一个简单的Hibernate应用,但并没有深入说明其中程序,在这篇中将比较详细的介绍一下Hibernate的核心组件.首先最关键一 ...

随机推荐

  1. Scala 中为什么不建议用 return 关键字

    在scala中使用 return 的话,编译的时候会提示the latest statement is method is automatically returned, use of th retu ...

  2. MyBatis 环境搭建(四)

    MyBatis 引言 在回顾JDBC时,我们已经创建有 Java 工程,而且也已经导入 mysql 依赖包,这里就直接在原有工程上搭建MyBatis环境,以及使用MyBatis来实现之前用 JDBC ...

  3. VS Code 调试 OneFlow

    VS Code 调试 OneFlow 本文介绍如何配置 VS Code,搭建 OneFlow 的 GUI 开发环境. 如果对于 VS Code 及其插件系统还不熟悉,可以参阅官方文档. 本文包括: 如 ...

  4. 多篇开源CVPR 2020 语义分割论文

    多篇开源CVPR 2020 语义分割论文 前言 1. DynamicRouting:针对语义分割的动态路径选择网络 Learning Dynamic Routing for Semantic Segm ...

  5. fiddler选项卡-Statistc(统计)

    Statistc Statistc是fiddler用来对session列表里的Session相关情况的统计,利用这个选项,可以对请求进行性能以及其他数据分析 1.界面 2.参数详解 建议:打开fidd ...

  6. 工作流Activiti框架中的LDAP组件使用详解!实现对工作流目录信息的分布式访问及访问控制

    Activiti集成LDAP简介 企业在LDAP系统中保存了用户和群组信息,Activiti提供了一种解决方案,通过简单的配置就可以让activit连接LDAP 用法 要想在项目中集成LDAP,需要在 ...

  7. yum安装时提示“尚未安装任何 GPG 公钥,请下载您希望安装的软件签名公钥并安装”

    在Linux操作系统中,安装软件依赖包时,出现了尚未安装任何 GPG 公钥,要求使用rpm --import public.gpg.key导入  问题: [root@server7 yum.repos ...

  8. 谷歌chrome浏览器network中Stalled分析和优化

    谷歌chrome浏览器network中Stalled分析和优化 问题由来 最近项目上要求首页的加载速度,查看浏览器的network发现接口加载速度非常慢. 问题解决思路 SSL 网上有人因为图片加载, ...

  9. 彻底删除Docker

    yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-la ...

  10. 【SQLite】教程09-VBA读取SQLite数据之ODBC,及中文乱码问题

    VBA使用ODBC Driver for SQLite读SQLite 如下图有这么一个SQlite数据库,我们要读取它 需要先安装ODBC,可以从这里下载: SQLite 3 ODBC Driver ...