Hibernate框架学习之初识Hibernate

Hibernate框架学习之初识Hibernate

Hibernate的简单介绍

Hibernate是一个开源的优秀的ORM(Object Relational Mapping、对象关系映射)框架,对JDBC进行了轻量级的对象封装,架起了面向对象开发以及SQL之间的桥梁。Hibernate可以通过配置,自动生成对应的SQL语句,自动执行,并且对结果进行封装,将得到的对象返回给用户。有了Hibernate框架,开发人员可以以面向对象的角度来操作数据库。

Hibernate的优点

  • 对JDBC进行封装,简化了数据访问的代码(这一点相信使用原生JDBC操作数据库的朋友应该会有比较深的感触)

  • 支持多种关系型数据库

  • 性能好、配置灵活

Hibernate_HelloWorld

上面是关于Hibernate的一点简单介绍以及其优点,接下来让我们开始使用Hibernate的进行数据库的访问,感受Hibernate带来的方便性。

准备

首先需要下载Hibernate对应的jar包,Hibernate 5.2.9 Final 版本下载地址 ,如果是使用Maven来进行构建的朋友则更加简单了,只需要配置对应的依赖,Maven就会自动帮我们将对应的jar下载并且导入,笔者这里使用第二种方式。

建立项目

  1. 建一个Maven项目(笔者这里使用IDEA)勾选如下所示

  2. 填写对应的GroupId、Artifact以及Version,如下所示

  3. 选择好对应的Maven版本以及对应的设置、仓库所在位置,如下所示

  4. 填写项目的名称、位置以及对应的Module信息(这里保持默认),如下所示

  5. 建立项目完成之后,项目的结构图如下所示

  6. 为了项目资源管理的方便,这里我们在src目录下建立一个resources目录,并且将其设置为资源文件,这样,Maven在编译时会自动将其导入类路径中,具体操作如下

    至此,我们的项目的基本骨架的搭建完成了。

导入Hibernate的核心包以及依赖包

由于是使用Maven来进行项目管理,所以导入对应的jar文件只需要在根目录的pom.xml文件中添加如下内容即可

<project>
  ...
    <dependencies>
    <!--添加Junit支持-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <!--添加Hibernate支持-->
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>5.2.9.Final</version>
    </dependency>
    <!--添加JDBC支持-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.41</version>
    </dependency>
  </dependencies>

  <build>
    <!--为了IDEA能够在编译时将对应的配置文件加入,需要添加下面的配置-->
    <resources>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.xml</include>
        </includes>
      </resource>
    </resources>
  </build>
  ...
</project>

这样Maven就会自动下载Hibernate所需要的依赖及其核心包了。

编写配置文件

Hibernate的配置主要有两个文件,一个是用于配置元数据的,一个是用于配置数据源等信息的,下面我们开始编写配置文件

元数据

首先闲来编写元数据配置文件,所谓的元数据配置文件,可以理解为就是一个对应关系,也就是配置一个从JavaBean对象到SQL之间的对应关系,显然,为了Hibernate能够自动地完成从Java对象到SQL之间的映射,我们就必须告诉它哪个对象对应哪一张表,其中对象中的哪个属性对应表中的哪个列,哪个属性是对应的ID。

也就是说,在这个环节中,需要建立两个内容,一个是所要操作的类,另外一个其对应的关系,也就是我们的元数据

  1. 在包中建立以个Students对象,如下所示

    package cn.xuhuanfeng.learnignhibernate;
    
    /**
     * Created by xuhuanfeng on 2017-04-06.
     */
    public class Students{
    
        private int id;
        private String name;
        private int age;
     . . . 
     // 篇幅原因省略setter以及getter
    }
    

  2. 在Students对象的同级目录建立一个名为Student.hbm.xml的配置文件,配置内容如下所示

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC
            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
        <!--name为对应的Java类,table为对应的表的名字-->
        <class name="cn.xuhuanfeng.learnignhibernate.Students" table="students">
            <!--id为对应的主键,name为类属性,column为表的字段-->
            <id name="id" column="id">
                <!--主键的增长策略,以后将介绍-->
                <generator class="increment"></generator>
            </id>
            <!--property为其他的属性-->
            <property name="name" column="name"></property>
            <property name="age" column="age"></property>
        </class>
    </hibernate-mapping>
    
    

    至此,我们的元数据则建立完成。

    数据源配置文件

    接下来吗,我们来编写Hibernate的数据源配置文件,该配置文件是Hibernate的核心配置文件,主要用于加载上面的元数据以及配置相关的属性等等,在刚刚建立的resources目录中建立名为hibernate.cfg.xml的文件,注意,该文件不建议更改名字,内容如下所示:

    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
        <session-factory>
            <!--配置数据源信息-->
            <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
            <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate</property>
            <property name="hibernate.connection.username">root</property>
            <property name="hibernate.connection.password">huanfeng</property>
    
            <!--打印操作过程中的SQL语句-->
            <property name="show_sql">true</property>
            <!--格式化SQL语句-->
            <property name="format_sql">true</property>
    
            <!--配置数据库操作策略,以后将介绍-->
            <property name="hbm2ddl.auto">update</property>
    
            <!--配置对应的映射文件 即 元数据-->
            <mapping resource="cn/xuhuanfeng/learnignhibernate/Student.hbm.xml"></mapping>
        </session-factory>
    
    </hibernate-configuration>
    

    由于这里需要操作对应的数据库,所以还需要建立一个对应的库,这里命名为hibernate,如果按照上面的配置,则不需要建立对应的表,只需要建立对应的库即可。

    至此,Hibernate所需要的配置全部完成,接下来我们就来开始编写对应的测试代码了。

编写测试文件

不知道初学Hibernate的你,看到这里会不会有点懵,笔者刚刚学习的时候也觉得有点懵,这样就可以编写测试代码了?我连具体内容都还没见到了,就只是写了配置文件以及一个JavaBean而已。这就是Hibernate的强大之处了,我们基本上可以不需要写任何的JDBC代码就能操作数据库了,而且更神奇的事情还在继续,让我们接下来继续前进,编写对应的测试类 StudentsTest如下所示

/**
 * Created by xuhuanfeng on 2017-04-06.
 * 测试Hibernate
 */
public class StudentsTest {

    @Test
    public void testCreate(){
        // 获取Hibernate的配置对象
        Configuration configuration = new Configuration().configure();
        // 建立SessionFactory
        SessionFactory sessionFactory = configuration.buildSessionFactory();
        // 打开session
        Session session = sessionFactory.openSession();

        // 所要添加到数据库的学生对象
        Students students = new Students();
        students.setAge(22);
        students.setName("xuhuanfeng");

        // 开启事务
        Transaction ts = session.beginTransaction();
        // 将数据添加到数据库
        session.save(students);
        // 提交事务
        ts.commit();

        // 关闭对应的连接
        session.close();
        sessionFactory.close();
    }
}

保存之后直接运行即可,然后就可以查看对应的数据库数据了,相信你会惊奇的发现,对应的数据已经保存到数据库中了: )

控制台输出

细心的你可能会发现,在IDEA控制台中,输出了很多内容,接下来我们来粗略地看一下这些内容,在输出的内容中,主要内容如下

Hibernate: 
    
    create table students (
       id integer not null,
        name varchar(255),
        age integer,
        primary key (id)
    ) engine=MyISAM
Hibernate: 
    select
        max(id) 
    from
        students
Hibernate: 
    insert 
    into
        students
        (name, age, id) 
    values
        (?, ?, ?)

相信看到上面这些内容的你会觉得非常熟悉,这些SQL语句就是Hibernate为我们生成的,也就是说,使用了Hibernate框架,我们基本上再也不需要编写这些SQL操作的语句了,因为Hibernate已经为我们做好了大部分重复性的操作了。

总结

这小节主要介绍了Hibernate以及Hibernate的优点,并且一步步动手搭建一个基于Maven的Hibernate的项目,编写对应的配置文件以及测试类,看到了Hibernate的神奇之处,不过Hibernate的神奇之处可不止这些,Hibernate的学习之路还在继续。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,724评论 6 342
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • 本文包括: 1、CRM 项目的整体介绍 2、Hibernate 框架概述 3、Hibernate 快速入门 4、H...
    廖少少阅读 3,463评论 9 66
  • 本文中我们介绍并比较两种最流行的开源持久框架:iBATIS和Hibernate,我们还会讨论到Java Persi...
    大同若鱼阅读 4,300评论 4 27
  • 不见城市的夜,不算真正来过。在夜里,风声是城市的鼻息,灯火是城市的眼睛。夜晚彰显城市真实的秉性,喧嚣、沉静、繁华或...
    杜痕远阅读 670评论 1 1