基于maven搭建hibernate运行环境

准备案例需要的数据库表和测试数据

建表语句:

create table DEPARTMENT (
   DEPT_ID integer not null,
   DEPT_NAME varchar(255) not null,
   DEPT_NO varchar(20) not null,
   LOCATION varchar(255),
   primary key (DEPT_ID),
   unique (DEPT_NO)
);

create table EMPLOYEE (
   EMP_ID bigint not null,
   EMP_NAME varchar(50) not null,
   EMP_NO varchar(20) not null,
   HIRE_DATE date not null,
   IMAGE longblob,
   JOB varchar(30) not null,
   SALARY float not null,
   DEPT_ID integer not null,
   MNG_ID bigint,
   primary key (EMP_ID),
   unique (EMP_NO)
);

create table SALARY_GRADE (
   GRADE integer not null,
   HIGH_SALARY float not null,
   LOW_SALARY float not null,
   primary key (GRADE)
);

create table TIMEKEEPER (
   Timekeeper_Id varchar(36) not null,
   Date_Time datetime not null,
   In_Out char(1) not null,
   EMP_ID bigint not null,
   primary key (Timekeeper_Id)
);

alter table EMPLOYEE
   add index FK75C8D6AE269A3C9 (DEPT_ID),
   add constraint FK75C8D6AE269A3C9
   foreign key (DEPT_ID)
   references DEPARTMENT (DEPT_ID);

alter table EMPLOYEE
   add index FK75C8D6AE6106A42 (EMP_ID),
   add constraint FK75C8D6AE6106A42
   foreign key (EMP_ID)
   references EMPLOYEE (EMP_ID);

alter table EMPLOYEE
   add index FK75C8D6AE13C12F64 (MNG_ID),
   add constraint FK75C8D6AE13C12F64
   foreign key (MNG_ID)
   references EMPLOYEE (EMP_ID);

alter table TIMEKEEPER
   add index FK744D9BFF6106A42 (EMP_ID),
   add constraint FK744D9BFF6106A42
   foreign key (EMP_ID)
   references EMPLOYEE (EMP_ID);

初始化数据

insert into Department (DEPT_ID, DEPT_NAME, DEPT_NO, LOCATION)
values (10, ‘ACCOUNTING‘, ‘D10‘, ‘NEW YORK‘);

insert into Department (DEPT_ID, DEPT_NAME, DEPT_NO, LOCATION)
values (20, ‘RESEARCH‘, ‘D20‘, ‘DALLAS‘);

insert into Department (DEPT_ID, DEPT_NAME, DEPT_NO, LOCATION)
values (30, ‘SALES‘, ‘D30‘, ‘CHICAGO‘);

insert into Department (DEPT_ID, DEPT_NAME, DEPT_NO, LOCATION)
values (40, ‘OPERATIONS‘, ‘D40‘, ‘BOSTON‘);

insert into Employee (EMP_ID, EMP_NAME, EMP_NO, HIRE_DATE, JOB, SALARY, DEPT_ID, MNG_ID)
values (7839, ‘KING‘, ‘E7839‘, Str_To_Date(‘17-11-1981‘, ‘%d-%m-%Y‘), ‘PRESIDENT‘, 5000, 10, null);

insert into Employee (EMP_ID, EMP_NAME, EMP_NO, HIRE_DATE, JOB, SALARY, DEPT_ID, MNG_ID)
values (7566, ‘JONES‘, ‘E7566‘, Str_To_Date(‘02-04-1981‘, ‘%d-%m-%Y‘), ‘MANAGER‘, 2975, 20, 7839);

insert into Employee (EMP_ID, EMP_NAME, EMP_NO, HIRE_DATE, JOB, SALARY, DEPT_ID, MNG_ID)
values (7902, ‘FORD‘, ‘E7902‘, Str_To_Date(‘03-12-1981‘, ‘%d-%m-%Y‘), ‘ANALYST‘, 3000, 20, 7566);

insert into Employee (EMP_ID, EMP_NAME, EMP_NO, HIRE_DATE, JOB, SALARY, DEPT_ID, MNG_ID)
values (7369, ‘SMITH‘, ‘E7369‘, Str_To_Date(‘17-12-1980‘, ‘%d-%m-%Y‘), ‘CLERK‘, 800, 20, 7902);

insert into Employee (EMP_ID, EMP_NAME, EMP_NO, HIRE_DATE, JOB, SALARY, DEPT_ID, MNG_ID)
values (7698, ‘BLAKE‘, ‘E7698‘, Str_To_Date(‘01-05-1981‘, ‘%d-%m-%Y‘), ‘MANAGER‘, 2850, 30, 7839);

insert into Employee (EMP_ID, EMP_NAME, EMP_NO, HIRE_DATE, JOB, SALARY, DEPT_ID, MNG_ID)
values (7499, ‘ALLEN‘, ‘E7499‘, Str_To_Date(‘20-02-1981‘, ‘%d-%m-%Y‘), ‘SALESMAN‘, 1600, 30, 7698);

insert into Employee (EMP_ID, EMP_NAME, EMP_NO, HIRE_DATE, JOB, SALARY, DEPT_ID, MNG_ID)
values (7521, ‘WARD‘, ‘E7521‘, Str_To_Date(‘22-02-1981‘, ‘%d-%m-%Y‘), ‘SALESMAN‘, 1250, 30, 7698);

insert into Employee (EMP_ID, EMP_NAME, EMP_NO, HIRE_DATE, JOB, SALARY, DEPT_ID, MNG_ID)
values (7654, ‘MARTIN‘, ‘E7654‘, Str_To_Date(‘28-09-1981‘, ‘%d-%m-%Y‘), ‘SALESMAN‘, 1250, 30, 7698);

insert into Employee (EMP_ID, EMP_NAME, EMP_NO, HIRE_DATE, JOB, SALARY, DEPT_ID, MNG_ID)
values (7782, ‘CLARK‘, ‘E7782‘, Str_To_Date(‘09-06-1981‘, ‘%d-%m-%Y‘), ‘MANAGER‘, 2450, 30, 7839);

insert into Employee (EMP_ID, EMP_NAME, EMP_NO, HIRE_DATE, JOB, SALARY, DEPT_ID, MNG_ID)
values (7788, ‘SCOTT‘, ‘E7788‘, Str_To_Date(‘19-04-1987‘, ‘%d-%m-%Y‘), ‘ANALYST‘, 3000, 20, 7566);

insert into Employee (EMP_ID, EMP_NAME, EMP_NO, HIRE_DATE, JOB, SALARY, DEPT_ID, MNG_ID)
values (7844, ‘TURNER‘, ‘E7844‘, Str_To_Date(‘08-09-1981‘, ‘%d-%m-%Y‘), ‘SALESMAN‘, 1500, 30, 7698);

insert into Employee (EMP_ID, EMP_NAME, EMP_NO, HIRE_DATE, JOB, SALARY, DEPT_ID, MNG_ID)
values (7876, ‘ADAMS‘, ‘E7876‘, Str_To_Date(‘23-05-1987‘, ‘%d-%m-%Y‘), ‘CLERK‘, 1100, 20, 7698);

insert into Employee (EMP_ID, EMP_NAME, EMP_NO, HIRE_DATE, JOB, SALARY, DEPT_ID, MNG_ID)
values (7900, ‘ADAMS‘, ‘E7900‘, Str_To_Date(‘03-12-1981‘, ‘%d-%m-%Y‘), ‘CLERK‘, 950, 30, 7698);

insert into Employee (EMP_ID, EMP_NAME, EMP_NO, HIRE_DATE, JOB, SALARY, DEPT_ID, MNG_ID)
values (7934, ‘MILLER‘, ‘E7934‘, Str_To_Date(‘23-01-1982‘, ‘%d-%m-%Y‘), ‘CLERK‘, 1300, 10, 7698);

insert into Salary_Grade (GRADE, HIGH_SALARY, LOW_SALARY)
values (1, 9999, 3001);

使用idea新建一个空的maven工程,并在该项目中增加hibernate的依赖、jdbc驱动依赖、log4j日志依赖、junit依赖。

该项目的pom.xml文件依赖内容如下:

 <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.0.12.Final</version>
    </dependency>
    <!--添加mysql的jdbc驱动-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.41</version>
    </dependency>
    <!--添加log4j依赖-->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>
  </dependencies>

在resource目录下新建hibernate配置文件,hibernate.cfg.xml,该配置文件为hibernate的全局配置文件,用于定义hibernate的一些全局配置。目前仅配置数据库连接的相关信息

<?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>
        <!-- Database connection settings -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/dept?serverTimezone=UTC</property>
        <property name="connection.username">root</property>
        <property name="connection.password">12345678</property>

        <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">1</property>

        <!-- SQL dialect ,定义数据库方言-->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

        <!-- Enable Hibernate‘s automatic session context management -->
        <property name="current_session_context_class">thread</property>

        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>
    </session-factory>

</hibernate-configuration>

每种数据库都有一个单独的方言, 例如:

Oracle方言:

  • org.hibernate.dialect.Oracle10gDialect(Dùngcho 10g&11g)
  • org.hibernate.dialect.Oracle12cDialect

SQL Server方言:

  • org.hibernate.dialect.SQLServerDialect并
  • org.hibernate.dialect.SQLServer2012Dialect
  • org.hibernate.dialect.SQLServer2008Dialect

MySQL方言

  • org.hibernate.dialect.MySQLDialect
  • org.hibernate.dialect.MySQL5Dialect

什么是方言?

Dialect是一个使用Hibernate的方式将数据库的数据类型转换为Java的数据类型,反之亦然。此外,它用于定义将HSQL(Hibernate SQL)的函数转换为数据中的函数的方式,如下列出的一部分 -

Java SQL类型 Oracle MySQL SQL Server
Types.BIT number(1,0) bit bit
Types.BIGINT number(19,0) bigin bigint
Types.DATE date date date
…….
Types.CLOB clob longtext varchar(MAX)
Types.BLOB blob longblob varbinary(MAX)

创建HibernateUtils类,用于加载hibernate配置信息,以及提供获取session的方法,代码如下:

package com.deng.hibernate.util;

import org.hibernate.Session;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;

/**
 * hibernate工具类
 */
public class HibernateUtils {

    private static org.hibernate.SessionFactory sessionFactory;

    private static Configuration configuration = new Configuration();
    private static ServiceRegistry serviceRegistry;

    static {
        try {
            configuration.configure();
            serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
            sessionFactory = configuration.buildSessionFactory(serviceRegistry);
        } catch (Exception e) {
            System.err.println("%%%% Error Creating SessionFactory %%%%");
            e.printStackTrace();
        }
    }

    /**
     * 获取session,所有的hibernate操作均基于session进行
     * @return
     */
    public static Session getSession(){
        if(sessionFactory == null){
            return null;
        }
        if(sessionFactory.getCurrentSession() == null){
            return sessionFactory.getCurrentSession();
        }else{
            return sessionFactory.openSession();
        }
    }

    /**
     * 通过测试方法来测试是否正确加载hibernate,并获取到session
     * @param args
     */
    public static void main(String[] args) {
        System.out.println(getSession());
    }

}

若运行main方法结果出现

代表环境搭建成功。

时间: 2024-08-29 00:09:16

基于maven搭建hibernate运行环境的相关文章

基于Maven搭建SpringMVC+Mybatis项目(2)

从头开始基于Maven搭建SpringMVC+Mybatis项目(2) 标签:               JAVAmavenmybatisspring mvc 版权声明:欢迎转载, 转载请保留原文链接. 接上文内容,本节介绍Maven的聚合和继承. 从头阅读传送门 互联网时代,软件正在变得越来越复杂,开发人员通常会对软件划分模块,以获得清晰的设计.良好的分工及更高的可重用性.Maven的聚合特性能把多个模块聚合在一起构建,并促进各子模块通过继承父模块的pom配置来保持配置的一致.为了演示这些特

从零使用qemu模拟器搭建arm运行环境

为什么会有这篇文章 早在2011年的时候,跟当时同事一起讨论,做Linux系统开发正处于整个Linux开发中间层,没有上层的C/C++业务和数据库的开发经验,也没有底层的内核和驱动开发经验,到底路该如何走--基于对Linux系统开发的理解和内核的兴趣,认为选择Linux内核开发更适合自己.于是到淘宝上买了块三星s3c2440(arm 9)开发板,学起内核开发.没有过多久,机缘巧合,正式加入了公司的内核开发部.就这样跟内核和arm打上交道了. 没有想到这一做就是3年了,arm芯片只有在公司才能使用

基于Maven搭建SpringMVC+Mybatis项目(4)

从高考,到程序员      CSDN日报20170620--<找一个好工作,谈一份好薪水>      6 月书讯 | 最受欢迎的 SQL 入门书重磅升级 从头开始基于Maven搭建SpringMVC+Mybatis项目(4) 标签:               mavenmybatisspring mvc分页JAVA 2016-07-27 16:53             4598人阅读             评论(0)             收藏              举报 本文章

基于Maven搭建SpringMVC+Mybatis项目(3)

| 从高考,到程序员      CSDN日报20170620--<找一个好工作,谈一份好薪水>      6 月书讯 | 最受欢迎的 SQL 入门书重磅升级 从头开始基于Maven搭建SpringMVC+Mybatis项目(3) 标签:               JAVAmavenspring mvcmybatis 2016-07-26 10:06             42087人阅读             评论(2)             收藏              举报 本文

Docker 搭建 Tomcat 运行环境

使用 Docker 搭建 Tomcat 运行环境 1. Docker与虚拟机的区别 2 搭建过程 2.1 准备宿主系统 准备一个 CentOS 7操作系统,具体要求如下: · 必须是 64 位操作系统 · 建议内核在 3.8 以上 查看 CentOS 7系统内核: [[email protected] ~]# uname  -r 3.10.0-327.el7.x86_64 2.2 安装Docker [[email protected] ~]# yum  -y   install   docker

9款一键快速搭建PHP运行环境的好工具

原文链接: http://www.cmhello.com/a-key-build-php-environment.html 内容提要: 建立一个PHP网站,首先需要搭建PHP的开发和运行环境,对于PHP初学者也是一个难题,下面介绍部分一站式PHP环境搭建安装程序.小编推荐使用APMServ或者phpnow. 一键搭建PHP运行环境工具 1.APMServ http://apmserv.s135.com/国内研发,功能强大,操作简单,无需安装,只需鼠标一点,即可在自己的电脑上傻瓜全自动搭建一个完美

Windows7下搭建Django运行环境

一直都是在Linux环境下搭建django的运行环境,开学因为需要叫前端的同学帮忙修改模板,所以需要在Windows下搭建起运行环境,想来PHP倒是有不少集成开发环境,Python倒是少的可怜…只在win下用过python,搭建django竟然一时不知道怎么办… 搜索了一圈,在win7下搭建起来了环境,简单的记录一下: 1,安装Python (下载地址:https://www.python.org/downloads/) 我选择呢的是2.7.5版本,安装到了D盘的目录Python27目录 2,添

搭建Babel运行环境,块级作用域,let和const命令

搭建Babel运行环境 Babel(http://babeljs.io/)可用于将使用ES6语法的脚本转化为ES5语法的脚本,基本功能的安装步骤如下: 1.安装node解释器和npm包管理工具 2.安装babel解释器  npm install -g babel (建议这个过程完成以后重启一下电脑,以免无法识别babel指令) 3.使用babel实现脚本转换,命令行进入js文件所在目录后   babel es6.js 示例:新建一个demo01.js,代码如下: //定义一个常量PI const

Centos 搭建java运行环境

 linux 搭建java运行环境 [本文档所介绍的内容适用于公司测试/生产等常见的java环境部署] 一:环境部署前准备: 1.1相关软件以及系统 系统要求:Centos 6.0(以上) (64位) 相关中间件:jdk1.7.0_71,  apache-tomcat7.0 1.2下载jdk和tomcat等相关软件 下载jdk(版本为jdk1.7.0_71) wget --no-check-certificate --no-cookies --header "Cookie: oraclelice