准备案例需要的数据库表和测试数据
建表语句:
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方法结果出现
代表环境搭建成功。
基于maven搭建hibernate运行环境
原文地址:http://www.cnblogs.com/dengcl/p/7591892.html