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();
}
}