首页 > 其他 > 详细

【JPA】01 快速上手

时间:2020-05-23 23:04:44      阅读:61      评论:0      收藏:0      [点我收藏+]

前言 Preface

本文的编写根据此视频参考:应该是非常好理解的JPA了

https://www.bilibili.com/video/BV1hE411s72B

小提示:【不想听概念直接上手从P8开始听】

 

什么是JPA?

全称 Java Persistence API,即Java持久化API,

是Sun公司推出的一套基于ORM的规范,内部是一系列的接口和抽象类

JPA通过JDK1.5注解描述ORM映射关系,将运行期的实体类对象持久化到数据库中

 

JPA的特点:

EE标准:

  JCP组织发布的JavaEE标准之一

  因此任何声称符合JPA标准的框架都能遵循同样的架构,提供相同的访问API

  这保证基于JPA开发的企业应用能够经过少量的修改就能在不同的JPA架构下运行

容器特性支持

  JPA框架支持大数据集、事务、并发等容器及事务

  使得JPA超越了简单持久化框架的局限,在企业级应用发挥更大的作用

简单方便

  非侵入式原则设计,可以和其他框架集成使用

  提供简单的编程模型,完全按照OOP思想开发

 

 

演示案例:

 

客户表:

CREATE TABLE `cst_customer` (
  `cust_id` bigint NOT NULL AUTO_INCREMENT COMMENT 客户编号 主键,
  `cust_name` varchar(32) NOT NULL COMMENT 客户名称 公司名称,
  `cust_source` varchar(32) DEFAULT NULL COMMENT 客户信息来源,
  `cust_industry` varchar(32) DEFAULT NULL COMMENT 客户所属行业,
  `cust_level` varchar(32) DEFAULT NULL COMMENT 客户级别,
  `cust_address` varchar(128) DEFAULT NULL COMMENT 客户联系地址,
  `cuts_phone` varchar(64) DEFAULT NULL COMMENT 客户联系电话,
  PRIMARY KEY (`cust_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

 

Maven依赖坐标:

    <dependencies>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.20</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-c3p0</artifactId>
            <version>5.4.15.Final</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.4.15.Final</version>
        </dependency>


    </dependencies>

 

JPA核心配置文件

这个文件需要配置到类路径下的META-INF目录下

技术分享图片

名称必须是这样的

persistence.xml

 

涨知识了,原来XML配置还提供了模板,爱了爱了

技术分享图片

 

复制模板就行了【哭了,再也不用百度去搜了】

技术分享图片

 

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">

    <!-- 持久化单元

        name 持久化单元名称
        transaction-type 事务管理的类型
            JTA:分布式事务管理 【多表分布在多个库中,超过1个以上的连接访问】
            RESOURCE_LOCAL:本地事务管理 【所有的表都在同一个数据库中,只有一个连接】

    -->
    <persistence-unit name="myJpa" transaction-type="RESOURCE_LOCAL">
        <!--
        JPA的实现方式
            provider 供应商,也就是JPA规范的实现者
        -->
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

     
        <properties>

            <!-- 连接参数 -->
            <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql:///jpa?serverTimezone=Asia/Shanghai"/>
            <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.jdbc.password" value="123456"/>

            <!--
            其他 【JPA实现者的配置】

                hibernate 的主要两个配置

                显示的输出SQL语句
                自动实现数据库表的创建
                    creat、【如果DB存在了表,则删除重新创建】
                    update、【程序运行时创建表,有表则不创建】
                    none、【不做】
            -->
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.hbm2ddl.auto" value="update"/>

        </properties>
        
    </persistence-unit>
</persistence>

 

创建客户实体类:

public class entity {
    
    private Long custId;
    private String custName;
    private String custSource;
    private String custLevel;
    private String custIndustry;
    private String custPhone;
    private String custAddress;

}
// 省略toString & getter setter

 

类 & 表 的映射绑定

技术分享图片

主键的映射绑定

技术分享图片

其他无约束的字段

技术分享图片

【话说这些注解的错误提示真的大丈夫萌大奶吗?】

 

 

开始测试JPA

public class JpaTest {

    @Test
    public void test01Save(){
        // 加载配置, 创建工厂对象
        
        
        // 工厂生产实体管理者


        // 管理者开启事务


        // 完成业务逻辑 CRUD


        // 事务提交 或者 回滚


        // 资源释放

    }

}

 

加载JPA配置

// 加载配置, 创建工厂对象
EntityManagerFactory myJpa = Persistence.createEntityManagerFactory("myJpa");

这个配置的参数字符串就是我们在配置文件中的那个单元名称

技术分享图片

 

工厂生产实体管理者的实例

// 工厂生产实体管理者
EntityManager myJpaEntityManager = myJpa.createEntityManager();

 

获取事务的实例,并开启

// 管理者开启事务
EntityTransaction transaction = myJpaEntityManager.getTransaction();
transaction.begin();

 

完成CRUD的逻辑

// 完成业务逻辑 CRUD
Customer customer = new Customer();
customer.setCustName("BKY");
customer.setCustIndustry("传播智慧");

// 传入实体管理者
myJpaEntityManager.persist(customer);

 

事务的操作【因为是简单的演示,就不异常处理回滚了】

// 事务提交 或者 回滚
transaction.commit();

 

资源释放

// 资源释放
myJpaEntityManager.close();
myJpa.close();

 

测试结果

技术分享图片

【在Hibernate这个SQL输出还可以再格式化排版一下的,其次是SQL方言的设置】

再看看我们的数据库

技术分享图片

 


 

【JPA】01 快速上手

原文:https://www.cnblogs.com/mindzone/p/12944792.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!