Spring data JPA 简介及 快速入门 JPA Spring data JPA Spring data JPA Spring data JPA 快速入门

JPA 简介

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

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

   orm介绍:

org介绍

  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 和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 }

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 }

猜你喜欢

转载自www.cnblogs.com/yufudiaodayu/p/11352865.html