JPA 简介
1.jpa是一个开发规范 是一个ORM框架的开发规范 是SUN公司定义的 中文名:JAVA持久层API
orm:对象关系映射 是一个解决问题的思路 对对象的操作就是对数据库操作
orm介绍:
2.jpa的优势:标准化 容器级特性的支持 简单方便 操作简单 支持继承 支持堕胎
3.jap的供应商:
Hibernate 3.2 开始兼容JPA
OpenJPA 是Apach组织提供的一个开源项目
TopLink WEBGain公司的产品-》被Oracle 收购 可以和任何数据连接
Spring data JPA 简介
Spring Data JPA 框架主要是针对Spring唯一没有简化到的业务逻辑代码 开发者连仅实现持久层业务逻辑的工作省了,唯一要做的就是声明持久层的接口 其他的都交给Spring Data JPA 来完成
Spring data JPA和jpa 以及ORM之间的关系
Spring data JPA 快速入门
1需求
向客户中插入一条数据
如果使用Jpa框架可以不用先建表 可以使用框架生成表
2 实现步骤
a 创建工程 使用maven管理工程
1 <properties>
2 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
3 <project.hibernate.version>5.0.7.Final</project.hibernate.version>
4 <maven.compiler.source>1.8</maven.compiler.source>
5 <maven.compiler.target>1.8</maven.compiler.target>
6 </properties>
7 <dependencies>
8 <dependency>
9 <groupId>junit</groupId>
10 <artifactId>junit</artifactId>
11 <version>4.12</version>
12 </dependency>
13 <!--hibernate 对jpa的支持-->
14 <dependency>
15 <groupId>org.hibernate</groupId>
16 <artifactId>hibernate-entitymanager</artifactId>
17 <version>${project.hibernate.version}</version>
18 </dependency>
19 <dependency>
20 <groupId>org.hibernate</groupId>
21 <artifactId>hibernate-c3p0</artifactId>
22 <version>${project.hibernate.version}</version>
23 </dependency>
24 <dependency>
25 <groupId>log4j</groupId>
26 <artifactId>log4j</artifactId>
27 <version>1.2.17</version>
28 </dependency>
29 <dependency>
30 <groupId>mysql</groupId>
31 <artifactId>mysql-connector-java</artifactId>
32 <version>5.1.6</version>
33 </dependency>
34 </dependencies>
b 创键一个配置文件
配置文件的路径必须是:META-INF/persistence.xml
配置连接数据库的相关配置
1 <?xml version="1.0" encoding="UTF-8"?>
2 <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
3 <!--配置持久化单元 在配置文件中至少有一个
4 name 持久化单元的名称
5 transaction-type 事物类型
6 RESOURCE_LOCAL 单数据库的事物
7 JTA 分布式事物 跨数据的事物 多个数据库的事物
8 -->
9 <persistence-unit name="myjpa" transaction-type="RESOURCE_LOCAL">
10 <!--数据库连接-->
11 <properties>
12 <property name="javax.persistence.jdbc.user" value="root"/>
13 <property name="javax.persistence.jdbc.password" value="111111"/>
14 <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
15 <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/sprign_data"/>
16 <!--配置hibernate的属性-->
17 <!--是否显示sql语句-->
18 <property name="hibernate.show_sql" value="true"></property>
19 <!--sql语句是否格式化-->
20 <property name="hibernate.format_sql" value="true"/>
21 <!--是否自动创建数据库表
22 value 可选值 create update none
23 create 程序自动创建数据库表 如果表存在 先删除后创建
24 update 程序自动创建数据库表 如果表存在 不创建
25 none 不会创建
26 -->
27 <property name="hibernate.hbm2ddl.auto" value="create"/>
28 </properties>
29 </persistence-unit>
30 </persistence>
c: 创键一个Entry类 对应数据库中每个表创键一个实体类
1 package cn.yqk.jpa.entity;
2
3 import javax.persistence.*;
4
5 /**
6 * @author YANG
7 * @date 2019/8/14 10:38
8 */
9 // 该类是jpa的实体类
10 @Entity
11 // 配置实体类和数据库表中映射关系 name 对应的表名
12
13 @Table(name="cust_customer")
14 public class Customer {
15 // 配置主键的生成策略
16 /**
17 * GeneratedValue 主键的生成方式 如果手动生成主键可以没有
18 * 如果框架生成主键 需要配置该注解
19 * GenerationType.IDENTITY 自增长
20 * GenerationType.SEQUENCE 使用序列生成主键 一般在oracle使用
21 * * GenerationType.AUTO 由框架自动选择 默认使用数据库表生成主键 不推荐
22 */
23 @GeneratedValue(strategy = GenerationType.IDENTITY)
24 @Id
25 //配置属性和字段名之间关系
26 @Column(name="cust_id")
27 private long custId;
28 @Column(name="cust_name")
29 private String custName;
30 @Column(name="cust_source")
31 private String custSource;
32 @Column(name="cust_industry")
33 private String custIndustry;
34 @Column(name="cust_level")
35 private String custLevel;
36 @Column(name="cust_address")
37 private String custAddress;
38 @Column(name="cust_phone")
39 private String custPhone;
40
41 public long getCustId() {
42 return custId;
43 }
44
45 public void setCustId(long custId) {
46 this.custId = custId;
47 }
48
49 public String getCustNmae() {
50 return custName;
51 }
52
53 public void setCustName(String custName) {
54 this.custName = custName;
55 }
56
57 public String getCustSource() {
58 return custSource;
59 }
60
61 public void setCustSource(String custSource) {
62 this.custSource = custSource;
63 }
64
65 public String getCustIndustry() {
66 return custIndustry;
67 }
68
69 public void setCustIndustry(String custIndustry) {
70 this.custIndustry = custIndustry;
71 }
72
73 public String getCustLevel() {
74 return custLevel;
75 }
76
77 public void setCustLevel(String custLevel) {
78 this.custLevel = custLevel;
79 }
80
81 public String getCustAddress() {
82 return custAddress;
83 }
84
85 public void setCustAddress(String custAddress) {
86 this.custAddress = custAddress;
87 }
88
89 public String getCustPhone() {
90 return custPhone;
91 }
92
93 public void setCustPhone(String custPhone) {
94 this.custPhone = custPhone;
95 }
96
97 @Override
98 public String toString() {
99 return "Customer{" +
100 "custId=" + custId +
101 ", custName='" + custName + '\'' +
102 ", custSource='" + custSource + '\'' +
103 ", custIndustry='" + custIndustry + '\'' +
104 ", custLevel='" + custLevel + '\'' +
105 ", custAddress='" + custAddress + '\'' +
106 ", custPhone='" + custPhone + '\'' +
107 '}';
108 }
109 }
d: 编写测试程序 实现数据的添加
1 创键一个EntityManagerFactory 对象 使用完关闭
2 使用工厂对象EntityManagerFactory 就是一个连接
3 开启事物
4 创键 Customer 对象
5 使用Entitymanager 对象 的persist 方法向数据库添加数据
6 事物提交
7 关闭连接
1 package cn.yqk.jpa;
2
3 import cn.yqk.jpa.entity.Customer;
4 import org.junit.Test;
5
6 import javax.persistence.EntityManager;
7 import javax.persistence.EntityManagerFactory;
8 import javax.persistence.EntityTransaction;
9 import javax.persistence.Persistence;
10
11 /**
12 * @author YANG
13 * @date 2019/8/14 10:52
14 */
15 public class JpaTest {
16 @Test
17 public void firstTest(){
18 // 1 创键一个EntityManagerFactory 对象 使用完关闭
19 EntityManagerFactory factory = Persistence.createEntityManagerFactory("myjpa");
20 // 2 使用工厂对象EntityManagerFactory 就是一个连接
21 EntityManager entityManager = factory.createEntityManager();
22 // 3 开启事物
23 EntityTransaction transaction = entityManager.getTransaction();
24 transaction.begin();
25 // 4 创键 Customer 对象
26 Customer customer = new Customer();
27 customer.setCustName("ruirui");
28 customer.setCustLevel("vip");
29 customer.setCustSource("网络");
30 customer.setCustPhone("123456");
31 customer.setCustAddress("懒人中心");
32 // 5 使用Entitymanager 对象 的persist 方法向数据库添加数据
33 entityManager.persist(customer);
34 // 6 事物提交
35 transaction.commit();
36 // 7 关闭连接
37 entityManager.close();
38 factory.close();
39 }
40 }