JPA
JPA全称为:Java Persistence API,译为java持久层api。持久层,明显是用于操作数据库的。它是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
ORM
说道jpa 就必须了解一下orm思想。全称:Object Relational Mapping,译为对象关系映射。简而言之就是将java中的实体类与数据库的表进行关联映射、实体类的属性与数据库表中的字段进行关联映射。
实操
废话不多说,上实操。
- 创建java的maven工程
- 导入需要的坐标
<dependency>
<!-- 核心包-->
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.4.10.Final</version>
</dependency>
<!--测试单元-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- mysql8.0.22驱动(取决于自己数据库版本)-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
<!-- 日志(可有可无)-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- 阿里连接池(c3p0等其他连接池也可以) -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.6</version>
</dependency>
</dependencies>
- 配置jpa核心配置文件
此处有个特别注意地方:此文件必须在名为MATE-INF 文件夹目录里,且命名为persistence.xml 否则获取不到!
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<!-- 两种取值:RESOURCE_LOCAL 本地操作, JTA:分布式操作,这里做演示 使用本地操作-->
<persistence-unit name="MyJPA" transaction-type="RESOURCE_LOCAL">
<!-- 指定jpa的实现方式-->
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<properties>
<property name="javax.persistence.jdbc.user" value="root"/>
<!-- 注意:8.0以前的数据库 为com.mysql.jdbc.Driver-->
<property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
<!-- 注意:8.0以前的数据库 不需要: ?serverTimezone=GMT-->
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/sys?serverTimezone=GMT"/>
<property name="javax.persistence.jdbc.password" value="数据库密码"/>
<!-- 配置hibernate-->
<!-- 展示发送的sql语句 -->
<property name="hibernate.show_sql" value="true"/>
<!-- 规定建表操作 三个取值:creat(每次都创建)update(有则不创建) none(不创建)-->
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
</persistence>
- 编写实体类
import javax.persistence.*;
/**
* @author cql
* @date 2021/8/2
*/
@Entity //意为实体类
//指定此实体类创建的表名,注:在hibernate4.3只有 此注解会保存但是不影响代码执行 可以将此简写为 @Entity(name ="t_stuent")
@Table(name ="t_stuent")
public class Student {
@Id //指定主键
// mysql:IDENTITY(主键自增) oracle:SEQUENCE(主键序列化) 其他取值:TABLE 创建额外的新表保存主键 AUTO:自动判断
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
//当表字段名和属性名不一致时使用,指定此属性为某个字段
@Column(name = "name")
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
- 测试
@Test
public void test01(){
//创建工厂
EntityManagerFactory myJPA = Persistence.createEntityManagerFactory("MyJPA");
//创建实体类管理
EntityManager entityManager = myJPA.createEntityManager();
//用于操作事务
EntityTransaction transaction = entityManager.getTransaction();
transaction.begin();
Student student=new Student();
student.setName("张三");
//增加方法
entityManager.persist(student);
transaction.commit();
}
- 测试结果