Hibernate框架的概述

什么是框架?

框架指的是软件的半成品,已经完成了部分功能。

JavaEE开发的三层架构

了解框架的基本概念之后,我们就来看看Hibernate框架处于JavaEE开发的经典三层架构中的什么位置。



温馨提示:虽然Servlet+JSP+JavaBean+JDBC使用这套架构可以开发市面的所有应用(拥有它,你就能打天下),但是在企业中并不会使用(过于底层),这还有个屌用啊!企业中开发一般使用SSH(Struts2+Spring+Hibernate)和SSM(SpringMVC+Spring+MyBatis)。

Hibernate概述

什么是Hibernate?

我们可以从度娘上看到这样有关Hibernate的介绍:



从中,我们可以得出这样的结论:Hibernate是一个轻量级的JDBC封装,也就是说,我们可以使用Hibernate来完成原来我们使用JDBC完成的操作,也就是与数据库的交互操作。它是在Dao层去使用的。总而言之,Hibernate就是一个持久层的ORM框架

什么是ORM?

使用传统的JDBC开发应用系统时,如果是小型应用系统,并不觉得有什么麻烦,但是对于大型应用系统的开发,使用JDBC就会显得力不从心。例如对几十、几百张包含几十个字段的表进行插入操作时,编写的SQL语句不但很长,而且繁琐,容易出错;在读取数据时,需要写多条getXxx语句从结果集中取出各个字段的信息,不但枯燥重复,并且工作量非常大。为了提高数据访问层的编程效率,Gavin King开发出了一个当今最流行的的ORM框架,它就是Hibernate框架。

所谓的ORM就是利用描述对象和数据库表之间映射的元数据,自动把Java应用程序中的对象,持久化到关系型数据库的表中。通过操作Java对象,就可以完成对数据库表的操作。可以把ORM理解为关系型数据和对象的一个纽带,开发人员只需要关注纽带一端映射的对象即可。ORM原理如下图所示。



说那么多,无非就是想说说ORM是个什么东西,对象关系映射(英语:Object Relation Mapping,简称ORM,或O/RM,或O/R mapping),指的是将一个Java中的对象与关系型数据库中的表建立一种映射关系,从而操作对象就可以操作数据库中的表。就这么简单,说那么多干嘛!

为什么要学习Hibernate框架?

与其它操作数据库的技术相比,Hibernate具有以下几点优势:

  • Hibernate对JDBC访问数据库的代码做了轻量级封装,大大简化了数据访问层繁琐的重复性代码,并且减少了内存消耗,加快了运行效率;
  • Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现,它很大程度的简化了DAO(Data Access Object,数据访问对象)层编码工作;
  • Hibernate的性能非常好,映射的灵活性很出色。它支持很多关系型数据库,从一对一到多对多的各种复杂关系;
  • 可扩展性强,由于源代码的开源以及API的开放,当本身功能不够用时,可以自行编码进行扩展。

总结:Hibernate是企业级开发中的主流框架,映射的灵活性很出色,并且它支持很多关系型数据库。

Hiberate框架学习目标

由于之前学过Hiberate框架,所以这就等于是在复习了。对于Hiberate框架的学习重点,可以总结为:

  1. 掌握Hiberate的基本配置——即搭建Hiberate开发环境;
  2. 掌握Hiberate常用API——即如何使用Hiberate框架进行开发;
  3. 掌握Hiberate的关联映射——解决表与表之间存在的关系问题,有1:n(一对多)、 1:1(一对一)、m:n(多对多)关系;
  4. 掌握Hiberate的检索方式——即掌握Hiberate的查询;
  5. 掌握Hiberate的优化方式——即提高Hiberate的效率。

Hibernate快速入门

介绍完Hibernate框架之后,我们来快速入门Hibernate,对其有一个直观的了解。

下载Hibernate5

大家可去官网下载Hibernate,我下载的是



所以,之后有关Hibernate的系列文章都是以这个版本为蓝图展开的。下载解压缩之后,可以看到如下目录结构:

其中,在lib/required目录下,包含运行Hibernate项目所必须的jar包:

创建一个普通的Java项目,导入Hibernate框架相关依赖jar包

创建一个普通的Java项目,例如hibernate_demo01,然后导入Hibernate框架相关依赖jar包。

  • 首先导入Hibernate开发必须的jar包,即lib/required目录下所有的jar包:

  • 再导入MySQL数据库的驱动jar包:

  • 最后导入日志记录相关的jar包:



    导入完日志相关的jar包之后,我们还要导入日志记录文件,日志记录文件咋也是第一次接触,不知道咋写啊?没关系,找到project/etc/log4j.properties文件,很明显,它就是日志记录文件,将它拷贝复制到我们项目的src目录下,打开它,这里面的内容有点多啊!而且我们现在也不知道是什么意思,咋办?先跟着我将其内容精简为,后面我再来为大家做一点解释。

    1. ### direct log messages to stdout ###
    2. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    3. log4j.appender.stdout.Target=System.err
    4. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    5. log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
    6. ### direct messages to file mylog.log ###
    7. log4j.appender.file=org.apache.log4j.FileAppender
    8. log4j.appender.file.File=c\:mylog.log
    9. log4j.appender.file.layout=org.apache.log4j.PatternLayout
    10. log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
    11. ### set log levels - for more verbose logging change 'info' to 'debug' ###
    12. # error warn info debug trace
    13. log4j.rootLogger= info, stdout

这样工程的整个结构就变成:

创建数据库与表

正如前面所说,Hibernate是一个轻量级的JDBC封装,也就是说,我们可以使用Hibernate来完成原来我们使用JDBC完成的操作,也就是与数据库的交互操作。所以我们首先要创建数据库与表,这里我使用的数据库是MySQL。

  1. create database hibernate_demo01;
  2. use hibernate_demo01;
  3. CREATE TABLE `cst_customer` (
  4. `cust_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)',
  5. `cust_name` varchar(32) NOT NULL COMMENT '客户名称(公司名称)',
  6. `cust_source` varchar(32) DEFAULT NULL COMMENT '客户信息来源',
  7. `cust_industry` varchar(32) DEFAULT NULL COMMENT '客户所属行业',
  8. `cust_level` varchar(32) DEFAULT NULL COMMENT '客户级别',
  9. `cust_phone` varchar(64) DEFAULT NULL COMMENT '固定电话',
  10. `cust_mobile` varchar(16) DEFAULT NULL COMMENT '移动电话',
  11. PRIMARY KEY (`cust_id`)
  12. ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

创建实体类

我们在com.meimeixia.hibernate.demo01包中创建一个实体类——Customer.java,如下:

  1. package com.meimeixia.hibernate.demo01;
  2. public class Customer {
  3. private Long cust_id;
  4. private String cust_name;
  5. private String cust_source;
  6. private String cust_industry;
  7. private String cust_level;
  8. private String cust_phone;
  9. private String cust_mobile;
  10. public Long getCust_id() {
  11. return cust_id;
  12. }
  13. public void setCust_id(Long cust_id) {
  14. this.cust_id = cust_id;
  15. }
  16. public String getCust_name() {
  17. return cust_name;
  18. }
  19. public void setCust_name(String cust_name) {
  20. this.cust_name = cust_name;
  21. }
  22. public String getCust_source() {
  23. return cust_source;
  24. }
  25. public void setCust_source(String cust_source) {
  26. this.cust_source = cust_source;
  27. }
  28. public String getCust_industry() {
  29. return cust_industry;
  30. }
  31. public void setCust_industry(String cust_industry) {
  32. this.cust_industry = cust_industry;
  33. }
  34. public String getCust_level() {
  35. return cust_level;
  36. }
  37. public void setCust_level(String cust_level) {
  38. this.cust_level = cust_level;
  39. }
  40. public String getCust_phone() {
  41. return cust_phone;
  42. }
  43. public void setCust_phone(String cust_phone) {
  44. this.cust_phone = cust_phone;
  45. }
  46. public String getCust_mobile() {
  47. return cust_mobile;
  48. }
  49. public void setCust_mobile(String cust_mobile) {
  50. this.cust_mobile = cust_mobile;
  51. }
  52. @Override
  53. public String toString() {
  54. return "Customer [cust_id=" + cust_id + ", cust_name=" + cust_name + ", cust_source=" + cust_source
  55. + ", cust_industry=" + cust_industry + ", cust_level=" + cust_level + ", cust_phone=" + cust_phone
  56. + ", cust_mobile=" + cust_mobile + "]";
  57. }
  58. }

创建Hibernate的相关配置文件

准备好以上工作之后,我们终于要踏入Hibernate的学习中了。首先我们要编写Hibernate的相关配置文件,Hibernate的相关配置文件分为两种:

  1. Xxx.hbm.xml:它主要是用于描述类与数据库中的表的映射关系;
  2. hibernate.cfg.xml:它是Hibernate框架的核心配置文件。

有关这两个配置文件的详细介绍,我后面会给大家讲解,如果就在这里弄的话,违背了我的初衷了,本文只是在教初学者怎样快速入门Hibernate。

创建映射配置文件

首先我们要学会如何编写映射配置文件,大家要知道编写完的映射配置文件应与实体类在同一个包下,并且名称应是类名.hbm.xml,所以我们要在com.meimeixia.hibernate.demo01包下创建一个Customer.hbm.xml文件,但是它的约束应该怎么写呢?可以在Hibernate的核心jar包——hibernate-core-5.0.7.Final.jar的org.hibernate包下查找到hibernate-mapping-3.0.dtd文件,打开该文件,找到如下内容:



然后复制黏贴到Customer.hbm.xml文件中即可。这里我先给出Customer.hbm.xml文件的内容,但内容不做过多介绍:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  4. "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping>
  6. <!-- 建立类与表的映射 -->
  7. <class name="com.meimeixia.hibernate.demo01.Customer" table="cst_customer">
  8. <!-- 建立类中的属性与表中的主键相对应 -->
  9. <id name="cust_id" column="cust_id">
  10. <!-- 主键的生成策略,后面会讲,现在使用的是本地生成策略 -->
  11. <generator class="native" />
  12. </id>
  13. <!-- 建立类中的普通属性和表中的字段相对应 -->
  14. <property name="cust_name" column="cust_name" />
  15. <property name="cust_source" column="cust_source" />
  16. <property name="cust_industry" column="cust_industry" />
  17. <property name="cust_level" column="cust_level" />
  18. <property name="cust_phone" column="cust_phone" />
  19. <property name="cust_mobile" column="cust_mobile" />
  20. </class>
  21. </hibernate-mapping>

创建核心配置文件

核心配置文件主要是Hibernate框架所使用的,它主要包含了连接数据库的相关信息和Hibernate的相关配置等。现在我们要学会如何编写Hibernate的核心配置文件,大家也要知道编写完的核心配置文件应在src目录下,并且名称应是hibernate.cfg.xml,所以我们要在src目录下创建一个hibernate.cfg.xml文件,但是它的约束又应该怎么写呢?同样可以在Hibernate的核心jar包——hibernate-core-5.0.7.Final.jar的org.hibernate包下查找到hibernate-configuration-3.0.dtd文件,打开该文件,找到如下内容:



然后复制黏贴到hibernate.cfg.xml文件中即可。在这个文件中到底该如何配置呢?我们可以参考hibernate-release-5.0.7.Final\project\etc\hibernate.properties文件。这里我先给出hibernate.cfg.xml文件的内容,但内容不做过多介绍:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE hibernate-configuration PUBLIC
  3. "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  4. "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
  5. <hibernate-configuration>
  6. <session-factory>
  7. <!-- 下面是三个必须要有的配置 -->
  8. <!-- 配置连接MySQL数据库的基本参数 -->
  9. <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
  10. <property name="hibernate.connection.url">jdbc:mysql:///hibernate_demo01</property>
  11. <property name="hibernate.connection.username">root</property>
  12. <property name="hibernate.connection.password">liayun</property>
  13. <!-- 配置Hibernate的方言 -->
  14. <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
  15. <!-- 下面两个是可选的配置哟! -->
  16. <!-- 打印sql语句 -->
  17. <property name="hibernate.show_sql">true</property>
  18. <!-- 格式化sql语句 -->
  19. <property name="hibernate.format_sql">true</property>
  20. <!-- 告诉Hibernate的核心配置文件加载哪个映射文件 -->
  21. <mapping resource="com/meimeixia/hibernate/demo01/Customer.hbm.xml"/>
  22. </session-factory>
  23. </hibernate-configuration>

Hibernate快速入门开发测试

在com.meimeixia.hibernate.demo01包下创建一个单元测试类——HibernateDemo1.java。

  1. package com.meimeixia.hibernate.demo01;
  2. import org.hibernate.Session;
  3. import org.hibernate.SessionFactory;
  4. import org.hibernate.Transaction;
  5. import org.hibernate.cfg.Configuration;
  6. import org.junit.Test;
  7. /**
  8. * Hibernate的入门案例
  9. * @author liayun
  10. *
  11. */
  12. public class HibernateDemo1 {
  13. //保存用户的案例
  14. @Test
  15. public void demo1() {
  16. //1. 加载Hibernate的核心配置文件
  17. Configuration configuration = new Configuration().configure();
  18. //如果在Hibernate的核心配置文件没有设置加载哪个映射文件,则可手动加载映射文件
  19. //configuration.addResource("com/meimeixia/hibernate/demo01/Customer.hbm.xml");
  20. //2. 创建SessionFactory对象,类似于JDBC中的连接池
  21. SessionFactory sessionFactory = configuration.buildSessionFactory();
  22. //3. 通过SessionFactory获取到Session对象,类似于JDBC中的Connection
  23. Session session = sessionFactory.openSession();
  24. //4. 手动开启事务,(最好是手动开启事务)
  25. Transaction transaction = session.beginTransaction();
  26. //5. 编写代码
  27. Customer customer = new Customer();
  28. customer.setCust_name("张小敬aaa");
  29. session.save(customer);//保存一个用户
  30. //6. 事务提交
  31. transaction.commit();
  32. //7. 释放资源
  33. session.close();
  34. sessionFactory.close();
  35. }
  36. }

测试如若都无任何问题,则我们就算入门Hibernate了。

Hibernate执行原理总结

可从度娘上看到如下文字:



码字不易,希望大家能够喜欢!

Hibernate入门第一讲——Hibernate框架的快速入门的更多相关文章

  1. Nodejs ORM框架Sequelize快速入门

    Nodejs ORM框架Sequelize快速入门 什么是ORM? 简单的讲就是对SQL查询语句的封装,让我们可以用OOP的方式操作数据库,优雅的生成安全.可维护的SQL代码.直观上,是一种Model ...

  2. 【hibernate】<第一节>hibernate简单入门

    所需工具: ide:eclipse or myeclipse jdk:1.7 jar包:hibernate-distribution-3.6.0.Final 和对应mysql的驱动类(对应jar包如图 ...

  3. ssm框架整合快速入门

    写在前面: 公司一直都是使用ssh框架(Struts2,Spring,Hibernate)来开发,但是现在外面的公司大多数都是使用的ssm框架,所以也有必要多学习一下外面的新技术.这里就快速搭建一个小 ...

  4. Mybatis第一篇【介绍、快速入门、工作流程】

    什么是MyBatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为 ...

  5. 第一章 使用开发者模式快速入门 Odoo 12

    本文为最好用的免费ERP系统Odoo 12开发手册系列文章第一篇. Odoo提供了一个快速应用开发框架,非常适合创建商业应用.这类应用通常用于保留业务记录,增删改查操作.Odoo 不仅简化了这类应用的 ...

  6. Mybatis框架 的快速入门

    MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...

  7. [jbdj]SpringMVC框架(1)快速入门

    1)springmvc快速入门(传统版) 步一:创建springmvc_demo一个web应用 步二:导入springioc,springweb , springmvc相关的jar包 步三:在/WEB ...

  8. Shiro安全框架【快速入门】就这一篇!

    Shiro 简介 照例又去官网扒了扒介绍: Apache Shiro™ is a powerful and easy-to-use Java security framework that perfo ...

  9. Shiro安全框架「快速入门」就这一篇

    Shiro 简介 照例又去官网扒了扒介绍: Apache Shiro is a powerful and easy-to-use Java security framework that perfor ...

随机推荐

  1. 123457123456#0#-----com.twoapp.YiZhiPuzzle02--前拼后广--儿童日常拼图游戏jiemei

    com.twoapp.YiZhiPuzzle02--前拼后广--儿童日常拼图游戏jiemei

  2. Tinymce在ASP.NET中的使用方法

    现在做网页,用FCKEditor用得比较多,它的实现原理是在要加入FCKEditor的地方加入一个iframe,并将其src指向FCKeditor/editor/fckeditor.html?Inst ...

  3. 点击链接,取得href的值,但是不转向

    点击链接,取得href的值,但是不转向 $('.list a').click(function (e) {   e.preventDefault();//取消事件的默认动作.   $.ajax({   ...

  4. python面向对象之初步认识

    面向对象 类,用来描述一类事物的相同的特征或者属性.比如说,狗,狗属于一种统称,狗还分有不同的种类,比如,牧羊犬,蝴蝶犬,京巴等等,他们都有相同的特征,一个头,两个耳朵,四条腿,会跑,会吃东西,会汪汪 ...

  5. web前端学习路程

    学习路程: 1.HTML和CSS基础 2.JavaScript语言 3.jQuery and ajax 4.综合网站实践 5.优化及调试

  6. 如何禁用maven下载进度指示?

    方法 mvn -B ..或者mvn --batch-mode ...

  7. 游戏协议模拟测试工具(TcpEngine)使用简介

    功能介绍 在有的网络开发需要走二进制流协议场景,比如网络游戏开发,在开发阶段,前端和后端协商好协议后就分别开发.在开发写代码的时候,有时需要对端发送一条完整的协议过来触发一下自己的代码,进行单步调试或 ...

  8. 【ARM-Linux开发】Rico Board DIY系列实验教程 Day 2——搭建Boa服务器

    一:BOA WebServer简介 BOA WebServer是一款单任务的HTTP服务器,与其他网页服务器不同之处,是当有连接请求到来是,它既不是为每个连接都单独创建进程,也不是采用复制自身进程处理 ...

  9. Spring 使用复选选按钮

    模型层需要提供数据选项,设置错误信息 关键代码 @NotNull @Size(min = 1, max = 5, message = "选择课程") private String[ ...

  10. jqGrid取消所有选中

    // 获取所有选中行id var jqGridRowid=$("#jqGrid").jqGrid("getGridParam","selarrrow& ...