一、創建項目
1.打開idea,file--new--project--maven,創建新項目。如下圖:
2.pom.xml文件的配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xusheng.hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.39</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.6.Final</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.1.4.RELEASE</version>
</dependency>
</dependencies>
<build>
<!--爲了IDEA能夠在編譯時將對應的配置文件加入,需要添加下面的配置-->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
</project>
3.添加hibernate的配置文件
hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- mysql賬戶名 -->
<property name="connection.username">root</property>
<!-- mysql密碼 -->
<property name="connection.password">123456</property>
<!-- mysql驅動 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- mysql連接URL -->
<property name="connection.url">jdbc:mysql:///mydb?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false</property>
<!-- 數據庫方言 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 顯示sql語句 -->
<property name="show_sql">true</property>
<!-- 格式化sql語句 -->
<property name="format_sql">true</property>
<!-- 根據需要創建數據庫-->
<!-- <property name="hbm2ddl.auto">create</property>-->
<mapping class="com.hibernate.entity.Department"></mapping>
<mapping class="com.hibernate.entity.Employee"></mapping>
<mapping class="com.hibernate.entity.SalaryGrade"></mapping>
<mapping class="com.hibernate.entity.Timekeeper"></mapping>
</session-factory>
</hibernate-configuration>
4.打開idea的數據庫可視化工具,連接MySQL
CREATE TABLE department
(
DEPT_ID INT NOT NULL
PRIMARY KEY,
DEPT_NAME VARCHAR(255) NOT NULL,
DEPT_NO VARCHAR(20) NOT NULL,
LOCATION VARCHAR(255) NULL,
CONSTRAINT DEPT_NO
UNIQUE (DEPT_NO)
);
CREATE TABLE employee
(
EMP_ID BIGINT NOT NULL
PRIMARY KEY,
EMP_NAME VARCHAR(50) NOT NULL,
EMP_NO VARCHAR(20) NOT NULL,
HIRE_DATE DATE NOT NULL,
IMAGE LONGBLOB NULL,
JOB VARCHAR(30) NOT NULL,
SALARY FLOAT NOT NULL,
DEPT_ID INT NOT NULL,
MNG_ID BIGINT NULL,
CONSTRAINT EMP_NO
UNIQUE (EMP_NO),
CONSTRAINT FK75C8D6AE6106A42
FOREIGN KEY (EMP_ID) REFERENCES employee (EMP_ID),
CONSTRAINT FK75C8D6AE269A3C9
FOREIGN KEY (DEPT_ID) REFERENCES department (DEPT_ID),
CONSTRAINT FK75C8D6AE13C12F64
FOREIGN KEY (MNG_ID) REFERENCES employee (EMP_ID)
);
CREATE INDEX FK75C8D6AE13C12F64
ON employee (MNG_ID);
CREATE INDEX FK75C8D6AE269A3C9
ON employee (DEPT_ID);
CREATE INDEX FK75C8D6AE6106A42
ON employee (EMP_ID);
CREATE TABLE salary_grade
(
GRADE INT NOT NULL
PRIMARY KEY,
HIGH_SALARY FLOAT NOT NULL,
LOW_SALARY FLOAT NOT NULL
);
CREATE TABLE timekeeper
(
Timekeeper_Id VARCHAR(36) NOT NULL
PRIMARY KEY,
Date_Time DATETIME NOT NULL,
In_Out CHAR NOT NULL,
EMP_ID BIGINT NOT NULL,
CONSTRAINT FK744D9BFF6106A42
FOREIGN KEY (EMP_ID) REFERENCES employee (EMP_ID)
);
CREATE INDEX FK744D9BFF6106A42
ON timekeeper (EMP_ID);
5.根據數據庫自動生成實體類
代碼如下:
Department .java
package com.hibernate.entity;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
@Entity
@Table(name = "DEPARTMENT", uniqueConstraints = { @UniqueConstraint(columnNames = { "DEPT_NO" }) })
public class Department {
private Integer deptId;
private String deptNo;
private String deptName;
private String location;
private Set<Employee> employees = new HashSet<Employee>(0);
public Department() {
}
public Department(Integer deptId, String deptName, String location) {
this.deptId = deptId;
this.deptNo = "D" + this.deptId;
this.deptName = deptName;
this.location = location;
}
@Id
@Column(name = "DEPT_ID")
public Integer getDeptId() {
return deptId;
}
public void setDeptId(Integer deptId) {
this.deptId = deptId;
}
@Column(name = "DEPT_NO", length = 20, nullable = false)
public String getDeptNo() {
return deptNo;
}
public void setDeptNo(String deptNo) {
this.deptNo = deptNo;
}
@Column(name = "DEPT_NAME", nullable = false)
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
@Column(name = "LOCATION")
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
@OneToMany(fetch = FetchType.LAZY, mappedBy = "department")
public Set<Employee> getEmployees() {
return employees;
}
public void setEmployees(Set<Employee> employees) {
this.employees = employees;
}
}
Employee .java
package com.hibernate.entity;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.UniqueConstraint;
@Entity
@Table(name = "EMPLOYEE", uniqueConstraints = { @UniqueConstraint(columnNames = { "EMP_NO" }) })
public class Employee {
private Long empId;
private String empNo;
private String empName;
private String job;
private Employee manager;
private Date hideDate;
private Float salary;
private byte[] image;
private Department department;
private Set<Employee> employees = new HashSet<Employee>(0);
public Employee() {
}
public Employee(Long empId, String empName, String job, Employee manager, Date hideDate, Float salary, Float comm,
Department department) {
this.empId = empId;
this.empNo = "E" + this.empId;
this.empName = empName;
this.job = job;
this.manager = manager;
this.hideDate = hideDate;
this.salary = salary;
this.department = department;
}
@Id
@Column(name = "EMP_ID")
public Long getEmpId() {
return empId;
}
public void setEmpId(Long empId) {
this.empId = empId;
}
@Column(name = "EMP_NO", length = 20, nullable = false)
public String getEmpNo() {
return empNo;
}
public void setEmpNo(String empNo) {
this.empNo = empNo;
}
@Column(name = "EMP_NAME", length = 50, nullable = false)
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
@Column(name = "JOB", length = 30, nullable = false)
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "MNG_ID")
public Employee getManager() {
return manager;
}
public void setManager(Employee manager) {
this.manager = manager;
}
@Column(name = "HIRE_DATE", nullable = false)
@Temporal(TemporalType.DATE)
public Date getHideDate() {
return hideDate;
}
public void setHideDate(Date hideDate) {
this.hideDate = hideDate;
}
@Column(name = "SALARY", nullable = false)
public Float getSalary() {
return salary;
}
public void setSalary(Float salary) {
this.salary = salary;
}
@Column(name = "IMAGE", length = 1111111, nullable = true)
@Lob
public byte[] getImage() {
return image;
}
public void setImage(byte[] image) {
this.image = image;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "DEPT_ID", nullable = false)
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
@OneToMany(fetch = FetchType.LAZY, mappedBy = "empId")
public Set<Employee> getEmployees() {
return employees;
}
public void setEmployees(Set<Employee> employees) {
this.employees = employees;
}
}
SalaryGrade.java
package com.hibernate.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "SALARY_GRADE")
public class SalaryGrade {
private Integer grade;
private Float lowSalary;
private Float highSalary;
public SalaryGrade() {
}
public SalaryGrade(Integer grade, Float lowSalary, Float highSalary) {
this.grade = grade;
this.lowSalary = lowSalary;
this.highSalary = highSalary;
}
@Id
@Column(name = "GRADE")
public Integer getGrade() {
return grade;
}
public void setGrade(Integer grade) {
this.grade = grade;
}
@Column(name = "LOW_SALARY", nullable = false)
public Float getLowSalary() {
return lowSalary;
}
public void setLowSalary(Float lowSalary) {
this.lowSalary = lowSalary;
}
@Column(name = "HIGH_SALARY", nullable = false)
public Float getHighSalary() {
return highSalary;
}
public void setHighSalary(Float highSalary) {
this.highSalary = highSalary;
}
}
等等。
6.創建工具類HibernateUtils.java、DataUtils.java
HibernateUtils.java
package com.hibernate.Utils;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtils {
private static SessionFactory sessionFactory;
public static SessionFactory getSessionFactory() {
Configuration configuration = new Configuration().configure();//創建配置對象
sessionFactory = configuration.buildSessionFactory();//創建會話工廠
return sessionFactory;
}
}
DataUtils.java
import com.hibernate.entity.Department;
import com.hibernate.entity.Employee;
import org.hibernate.Session;
import org.hibernate.query.Query;
public class DataUtils {
public static Department findDepartment(Session session, String deptNo) {
String sql = "Select d from " + Department.class.getName() + " d "//
+ " Where d.deptNo = :deptNo";
Query<Department> query = session.createQuery(sql);
query.setParameter("deptNo", deptNo);
return query.getSingleResult();
}
public static Long getMaxEmpId(Session session) {
String sql = "Select max(e.empId) from " + Employee.class.getName() + " e ";
Query<Number> query = session.createQuery(sql);
Number value = query.getSingleResult();
if (value == null) {
return 0L;
}
return value.longValue();
}
public static Employee findEmployee(Session session, String empNo) {
String sql = "Select e from " + Employee.class.getName() + " e "//
+ " Where e.empNo = :empNo";
Query<Employee> query = session.createQuery(sql);
query.setParameter("empNo", empNo);
return query.getSingleResult();
}
}
7.測試代碼
QueryObjectDemo2.java
package com.hibernate.demo;
import com.hibernate.Utils.HibernateUtils;
import com.hibernate.entity.Department;
import com.hibernate.entity.Employee;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.query.Query;
import java.util.List;
public class QueryObjectDemo2 {
public static void main(String[] args) {
SessionFactory factory = HibernateUtils.getSessionFactory();
Session session = factory.openSession();
try {
// All the action with DB via Hibernate
// must be located in one transaction
// Start Transaction.
session.getTransaction().begin();
// Create an HQL statement, query the object.
// HQL with parameters.
// Equivalent to the SQL statement:
// Select e.* from EMPLOYEE e cross join DEPARTMENT d
// where e.DEPT_ID = d.DEPT_ID and d.DEPT_NO = :deptNo;
String sql = "Select e from " + Employee.class.getName() + " e " + " where e.department.deptNo=:deptNo ";
// Create query object.
Query<Employee> query = session.createQuery(sql);
query.setParameter("deptNo", "D10");
// Execute query.
List<Employee> employees = query.getResultList();
for (Employee emp : employees) {
System.out.println("Emp: " + emp.getEmpNo() + " : " + emp.getEmpName());
}
// Commit data
session.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
// Rollback in case of an error occurred.
session.getTransaction().rollback();
}
}
}
8.總結
總結一下:
<1. 創建Maven的QuickStart項目
<2. 創建完成後,在pom.xml內添加需要的依賴包的語句,讓Maven自動下載
<3. 手動添加resources文件夾,並設置爲資源文件
<4. 打開項目結構,添加hibernate配置文件,選擇放在main的resources文件夾內,並配置
<5. 創建數據庫表
<6. 對數據庫表進行映射生成映射類,並將映射文件配置到hibernate配置文件中
<7.測試
入門程序就此結束。