1.1 jpa 是一個開發規范 是一個ORM框架的開發規范 是SUN 公司定義的 中文名:JAVA持久層API
orm : 對象關系映射 是一個解決問題的思路 對對象的操作就是對數據庫的操作
1.2 jpa 的優勢
標准化
容器級特性的支持
簡單方便
操作簡單 創建類跟 創建java普通類一樣方便 只需使用javax.persistence.Entity注釋
查詢能力
支持繼承 支持多態
2 什么是SpringDataJPA
Spring Data JPA框架主要針對的是Spring 唯一沒有簡化到業務邏輯代碼 開發者連僅實現持久層業務邏輯的工作都省了,唯一要做的就是生明持久層的接口 其它的都交給Spring Data JPA來幫完成
並不是JPA規范實現 基於原生的jpa 的api 進行了再次的封裝
如果要使用SpringDataJpa 還需要使用Hibernate
創建maven工程
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.hibernate.version>5.0.7.Final</project.hibernate.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!--hibernate 對jpa的支持-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${project.hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>${project.hibernate.version}</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
</dependencies>
在resources包中建META-INF/persistence.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<!--配置持久化單元 在配置文件中至少有一個
name 持久化單元的名稱
transaction-type 事物類型
RESOURCE_LOCAL 單數據庫的事物
JTA 分布式事物 跨數據的事物 多個數據庫的事物
-->
<persistence-unit name="myjpa" transaction-type="RESOURCE_LOCAL">
<properties>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="root"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/數據庫名"/>
<!--配置hibernate的屬性-->
<property name="hibernate.show_sql" value="true"></property>
<!--sql語句是否格式化-->
<property name="hibernate.format_sql" value="true"/>
<!--是否自動創建數據庫表
value 可選值 create update none
create 程序自動創建數據庫表 如果表存在 先刪除后創建
update 程序自動創建數據庫表 如果表存在 不創建
none 不會創建
-->
<property name="hibernate.hbm2ddl.auto" value="create"/>
</properties>
</persistence-unit>
</persistence>
entity包
package cn.dy.jpa.entity;
import javax.persistence.*;
/**
* author:dingyi
* time:2019/8/14 0014 16:00
*/
@Entity
@Table(name="cust_stu")
public class Stu {
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Id
@Column(name = "Id")
private Long Id;
@Column (name="name")
private String name;
@Column(name = "age")
private Integer age;
@Column(name = "sex")
private String sex;
@Override
public String toString() {
return "Stu{" +
"name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
測試類:
import cn.dy.jpa.entity.Stu;
import org.junit.Test;
import javax.persistence.*;
/**
* author:dingyi
* time:2019/8/14 0014 16:05
*/
public class TestStu {
@Test
public void firstTest(){
// 1 創鍵一個EntityManagerFactory 對象 使用完關閉
EntityManagerFactory factory = Persistence.createEntityManagerFactory("myjpa");
// 2 使用工廠對象EntityManagerFactory 就是一個連接
EntityManager entityManager = factory.createEntityManager();
// 3 開啟事物
EntityTransaction transaction = entityManager.getTransaction();
transaction.begin();
// 4 創鍵 Customer 對象
Stu stu = new Stu();
stu.setName("jack");
stu.setAge(123);
stu.setSex("男");
// 5 使用Entitymanager 對象 的persist 方法向數據庫添加數據
entityManager.persist(stu);
// 6 事物提交
transaction.commit();
// 7 關閉連接
entityManager.close();
factory.close();
}
}