• 【JPA】01 快速上手


    前言 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配置还提供了模板

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

    编写配置信息

    在JPA这里,被称为是一个持久化单元

    <?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(){
            // 1、加载配置, 创建工厂对象            
            // 2、工厂生产实体管理者
            // 3、管理者开启事务
            // 4、完成业务逻辑 CRUD
            // 5、事务提交 或者 回滚
            // 6、资源释放
        }
    }

    加载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方言的设置】

    再看看我们的数据库


  • 相关阅读:
    用UILocalNotification实现一个闹钟(Swift)
    Swift
    iOS判断一些权限是否被禁止
    ofbiz学习笔记
    POJ1062 昂贵的聘礼 【DFS】
    echarts 应用数个样例
    java 中缀转后缀(逆波兰)
    开放是否能让苹果成为智能家居的标准制定者?
    2015阿里校招前端在线题目
    hql中不能写count(1)能够写count(a.id)
  • 原文地址:https://www.cnblogs.com/mindzone/p/12944792.html
Copyright © 2020-2023  润新知