Hibernate学习笔记 搭建开发环境

2022-05-05 19:32:21 浏览数 (1)

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

新建项目

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

代码语言:javascript复制
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: '5.1.40'
    compile 'org.hibernate: hibernate - core: 5.2.5.Final'
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

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

SessionFactory

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

代码语言:javascript复制
<?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</property>
        <property name="connection.username">root</property>
        <property name="connection.password">1234678</property>

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

    </session-factory>

</hibernate-configuration>

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

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

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

代码语言:javascript复制
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自动运行这些测试。

代码语言:javascript复制
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学习了。

单元测试结果和目前的项目结构如下:

0 人点赞