基於maven搭建hibernate運行環境
阿新 • • 發佈:2017-09-25
string 函數 manage 全局配置 img factory server2 gte ear
準備案例需要的數據庫表和測試數據
建表語句:
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) notnull, 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_SALARYfloat 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運行環境