Hibernate框架2--Hibernate入門程序

一、創建項目

1.打開idea,file--new--project--maven,創建新項目。如下圖:

創建maven
填寫資料
這裏寫圖片描述
配置pom文件

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&amp;useUnicode=true&amp;characterEncoding=utf8&amp;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

打開idea的數據庫可視化工具

打開idea的數據庫可視化工具
打開idea的數據庫可視化工具

這裏寫圖片描述
這裏寫圖片描述

這裏寫圖片描述

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.測試

入門程序就此結束。

代碼下載

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章