JPA 简介

  1.jpa是一个开发规范  是一个ORM框架的开发规范  是SUN公司定义的  中文名:JAVA持久层API

      orm:对象关系映射  是一个解决问题的思路   对对象的操作就是对数据库操作

   orm介绍:

spring data jpa 时间大于 spring data jpa 性能_Customer

  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 时间大于 spring data jpa 性能_java_02

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 }