开发者社区> 过了即是客> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

搭建Hibernate开发环境

简介: 前面已经介绍了Hibernate的一点知识,现在我们来一步一步开发Hibernate程序来学习。在这里我使用IDEA作为开发工具,Gradle作为项目构建工具。
+关注继续查看

前面已经介绍了Hibernate的一点知识,现在我们来一步一步开发Hibernate程序来学习。在这里我使用IDEA作为开发工具,Gradle作为项目构建工具。当然在实际中不一定必须使用这两个工具,我们可以选择自己习惯使用的工具。只要正确的添加了Hibernate相关类以及数据库驱动,我们就能正确的运行Hibernate程序了。

新建项目

使用IDEA新建一个Gradle项目,新建之后,在build.gradle文件中添加如下内容:

group 'yitian.learning'
version '1.0-SNAPSHOT'

apply plugin: 'java'
apply plugin: 'war'
apply from: 'https://raw.github.com/akhikhl/gretty/master/pluginScripts/gretty.plugin'
apply plugin: 'eclipse'
apply plugin: 'idea'

sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.1.0'
    // compile group: 'mysql', name: 'mysql-connector-java', version: '6.0.5'
    compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.40'

    compile group: 'org.hibernate', name: 'hibernate-core', version: '5.2.5.Final'
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

在Gradle解决项目依赖之后,我们就可以开始搭建Hibernate开发环境了。

SessionFactory

SessionFactory是Hibernate最重要的一个类,也是我们配置和使用Hibernate的第一步。它类似于我们学习JDBC时候的数据库连接,SessionFactory会为我们管理做好所有事情。一般情况下一个项目只需要一个SessionFactory就可以了。我们需要做的,就是编写它的配置文件hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?>
<!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="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/htest?useSSL=false</property>
        <property name="connection.username">root</property>
        <property name="connection.password">12345678</property>

        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="show_sql">true</property>
        <property name="format_sql">true</property>
        <property name="hbm2ddl.auto">create</property>

    </session-factory>

</hibernate-configuration>

以上就是Hibernate的配置文件,有JDBC开发经验的同学应该很熟悉前面几项内容吧。重点是后面这几项。

  • dialect 代表的是Hibernate使用的方言。Hibernate设计时候考虑到了多种数据库,所以这里需要指定我们使用的数据库。在这里我是用的就是MySQL数据库。
  • show_sql 代表的是在Hibernate会在运行的时候同时将所执行的SQL语句输出到控制台上,方便我们开发调试。
  • format_sql 代表将上面输出的SQL语句格式化,方便我们开发。
  • hbm2ddl.auto 代表的是数据库的生成策略。在这里使用create代表每次运行程序都重新创建数据库。这也是我们开发时常用的选项。

配置文件写好之后,我们就可以开始创建SessionFactory了。随着Hibernate的更新,SessionFactory的创建方式也发生了变化。以前我看视频教程的时候,我照着老师的创建方式创建SessionFactory的时候,Hibernate提示我老师讲的那种方式已经过时了。不过现在我直接看的Hibernate官方文档,所以下面这个方式应该是比较新的。

package yitian.data;

import org.hibernate.SessionFactory;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;

public class HibernateUtil {
    private static SessionFactory sessionFactory;

    static {
        final StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
                .configure()
                .build();
        try {
            sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
        } catch (Exception e) {
            StandardServiceRegistryBuilder.destroy(registry);
            throw new RuntimeException(e);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

这就是我的SessionFactory创建类,为了省事我直接写为了静态类,实际情况中一般使用Spring来管理Hibernate SessionFactory的生命周期。重点是静态初始化块中的代码,这就是Hibernate的初始化方式。StandardServiceRegistryBuilder类会搜索我们刚才写的hibernate.cfg.xml配置文件,所以为了保证正确的初始化SessionFactory,一般情况下需要将hibernate.cfg.xml放在CLASSPATH下。由于我用的是Gradle,所以配置文件要放在resources文件夹下。如果是普通的Java Web项目,就放在webapps/WEB-INF下。一开始我直接从Hibernate官方教程抄的代码,结果它直接在catch中吃掉了异常,导致我一天没搞明白错误在哪里。因此在这里我加上了抛出语句。

接下来测试一下SessionFactory是否配置成功。我在这里将单元测试写在src/test/java文件夹中,以便让Gradle自动运行这些测试。

package yitian.data;

import org.hibernate.SessionFactory;
import org.junit.*;

public class HibernateTest {
    private static SessionFactory factory;

    @BeforeClass
    public static void init() {
        factory = HibernateUtil.getSessionFactory();
    }

    @Test
    public void testHibernate() {
        Assert.assertNotNull(factory);
    }

    @AfterClass
    public static void clean() {
        factory.close();
    }
}

这个单元测试很简单,就是看一下SessionFactory是否为空。使用Gradle的话运行一下gradle test命令即可。如果没有使用Gradle的话也可以使用Eclipse或者IDEA提供的单元测试工具来测试。

测试完成之后,我们就可以开始以后的Hibernate学习了。单元测试结果和目前的项目结构如下:
img_484e41e80be13ee1a91496049e81a98f.png
项目结构

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Hibernate初识
简介 相信学过SSH2框架的同学们对Hiberate一点也不陌生。Hibernate是Gavin King于2001年开始,作为EJB2风格实体bean的替代品开发的对象关系映射工具。
1019 0
hibernate搭建及其增删改查
一、jar包   最基础的hibernatejar包,以及数据库驱动的jar包    二、数据库 1  t_user表 2 id int 主键 自动增长 3 name varchar(20) 三、配置文件 1 2 DOCTYPE hibernate-confi...
815 0
Hibernate单表映射
建立实体类 配置好SessionFactory之后,我们就可以开始建立一对一的单表映射了。首先需要建立一个实体类,这里Getter、Setter、toString、equals等方法省略了。
877 0
hibernate错误
今天研究新的架构。 数据库连接方式用的hibernate。 以前没有深入接触hibernate。先说一下流程。 po包,下面,实体类,Person.java    Person.hbm.xml映射文件。 出错如下:特别多,没有必要仔细看,粗略看看与你出错是不是一样就得了。 [ERROR][2016/01/07 09:54:29,723][org.springframework.
1289 0
Hibernate分页
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.
581 0
+关注
过了即是客
一个普普通通的程序员
219
文章
2
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载