Hibernate 作为使用最为广泛的ORM框架, 也是Spring框架默认使用的JPA实现。Hibernate + MySQL组合也是实战开发中使用最为常见的组合。
本篇使用的软件及版本如下:
- Java: 1.8.0_211
- 集成开发工具 Eclipse : 2021-06 (4.20.0)
- Maven: Apache Maven 3.6.1
- MySQL: 8.0
- MySQL 管理控制台 : MySQL WorkBench 8.0C
- JUnit 5
相关软件的安装部分本篇略去,直接开始项目的创建和配置。主要步骤包括
- 创建Maven类型的项目
- 配置Hibernate依赖
- 配置数据库连接和准备测试数据
- 创建实体类
- 进行单元测试
1. 创建Maven 类型项目
-
创建Maven 类型的项目,在Eclipse中点击工具栏 File > New > Project, 选择"Maven Project"
-
在弹出的窗口选择 “Create a simple Project”, 也就是创建一个简单的项目, 选中这个选项会跳过后面选择项目骨架(archetype)的选择。
- 输入项目名,包名等信息之后, 点击创建
2. 引入JUnit 5 单元测试依赖包
在pom.xml 中加入:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit-bom</artifactId>
<version>5.8.2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
在src/test/java 下创建一个测试文件
/**
* @Title: JUnit5Tests.java
* @Package com.osxm.jpa.junit
* @Description: TODO
* @author XM
* @date 2022年6月1日 上午7:17:29
* @Copyright: 2022
* @version V1.0
*/
package com.osxm.jpa.junit;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
public class JUnit5Tests {
@Test
public void hello() {
Assertions.assertTrue(1>0);
}
}
右键 run as > JUnit Test 能够正常运行则代表运行成功。
3. 导入Hibernate 及JPA的依赖包
Hibernate 作为ORM 框架可以独立的进行数据库相关的开发, 开发方式时配置Hibernate 本身的配置文件。 同时, Hibernate 实习了JPA的接口, 可以使用JPA的配置,而不需要另外的配置。
所以导入Hibernate 作为JPA 实现, 需要导入Hibernate的核心包以及与JPA的整合包,所有这些,通过hibernate-entitymanager就可以一次性导入了, 于是在pom.xml 增加如下配置:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.6.9.Final</version>
</dependency>
4. 导入MySQL 驱动以及创建和准备数据
导入驱动很简单, 在pom.xml 加入:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>
数据库初始化以及插入数据的SQL如下:
-- 创建数据库
create database jpaency;
-- 使用数据库
use jpaency;
-- 创建表
CREATE TABLE USR
(
id INT NOT NULL COMMENT '主键',
name varchar(30) NOT NULL COMMENT '姓名',
PRIMARY KEY (id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 插入数据
INSERT INTO USR(ID,NAME) VALUES(1,'刘备') ;
INSERT INTO USR(ID,NAME) VALUES(2,'关羽') ;
INSERT INTO USR(ID,NAME) VALUES(3,'张飞') ;
5. 创建实体类
定义实体类 Usr , 包含两个属性 id 和 name,使用 @Entity 注解为实体类, 使用@Id注解主键属性。
/**
* @Title: Usr.java
* @Package com.osxm.entity
* @Description: TODO
* @author XM
* @date 2022年6月3日 上午9:02:19
* @Copyright: 2022
* @version V1.0
*/
package com.osxm.jpa.entity;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Usr {
@Id
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
6. 配置持久化配置,并且将配置需要持久化的类
在 src/main/resources 创建 META-INF目录, 在该目录下创建文件 persistence.xml, 内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<persistence-unit name="jpaency_mysql">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>com.osxm.jpa.entity.Usr</class>
<properties>
<property name="javax.persistence.jdbc.url"
value="jdbc:mysql://127.0.0.1:3306/jpaency" />
<property name="javax.persistence.jdbc.driver"
value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.user"
value="root" />
<property name="javax.persistence.jdbc.password"
value="123456" />
</properties>
</persistence-unit>
</persistence>
- persistence-unit 用于配置持久化单元,也就是对应一个数据库连接单元
- provider 配置JPA 的实现, 这里是Hibernate
- class 配置需要持久化的类
- properties, 配置数据库连接的信息, 包括数据库的地址、驱动类、用户名和密码等。
7. 建立测试类并测试
/**
* @Title: QueryTests.java
* @Package com.osxm.jpa.basic
* @Description: TODO
* @author XM
* @date 2022年6月3日 上午8:53:58
* @Copyright: 2022
* @version V1.0
*/
package com.osxm.jpa.basic;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import com.osxm.jpa.entity.Usr;
public class QueryTests {
@Test
public void find() {
EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("jpaency_mysql");
EntityManager em = emFactory.createEntityManager();
Usr usr = em.find(Usr.class, 1);
Assertions.assertEquals("刘备",usr.getName());
em.close();
emFactory.close();
}
}
本篇的项目结构如下图:
本篇完整的项目地址
https://github.com/osxm/jpa-ency.git