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

再看看我们的数据库


【JPA】01 快速上手的更多相关文章

  1. ESFramework 4.0 快速上手(01) -- Rapid引擎

    (在阅读该文之前,请先阅读 ESFramework 4.0 概述 ,会对本文的理解更有帮助.) ESFramework/ESPlatform 4.0 的终极目标是为百万级的用户同时在线提供支持,因为强 ...

  2. ESFramework 4.0 快速上手(06) -- Rapid引擎(续)

    <ESFramework 4.0 快速上手>系列介绍的都是如何使用Rapid引擎(快速引擎) -- RapidServerEngine 和 RapidPassiveEngine.其实,大家 ...

  3. Requests快速上手

    发送请求 使用 Requests 发送网络请求非常简单. 一开始要导入 Requests 模块: >>> import requests 然后,尝试获取某个网页.本例子中,我们来获取 ...

  4. [Full-stack] 快速上手开发 - React

    故事背景 [1] 博客笔记结合<React快速上手开发>再次系统地.全面地走一遍. [2] React JS Tutorials:包含了JS --> React --> Red ...

  5. Spring Boot 揭秘与实战(一) 快速上手

    文章目录 1. 简介 1.1. 什么是Spring Boot 1.2. 为什么选择Spring Boot 2. 相关知识 2.1. Spring Boot的spring-boot-starter 2. ...

  6. python的requests快速上手、高级用法和身份认证

    https://blog.csdn.net/qq_25134989/article/details/78800209 快速上手 迫不及待了吗?本页内容为如何入门 Requests 提供了很好的指引.其 ...

  7. 【opencv入门篇】 10个程序快速上手opencv【下】

    导言:本系列博客目的在于能够在vs快速上手opencv,理论知识涉及较少,大家有兴趣可以查阅其他博客深入了解相关的理论知识,本博客后续也会对图像方向的理论进一步分析,敬请期待:) 上篇传送:http: ...

  8. 三分钟快速上手TensorFlow 2.0 (上)——前置基础、模型建立与可视化

    本文学习笔记参照来源:https://tf.wiki/zh/basic/basic.html 学习笔记类似提纲,具体细节参照上文链接 一些前置的基础 随机数 tf.random uniform(sha ...

  9. 【转】Vue.js 2.0 快速上手精华梳理

    Vue.js 2.0 快速上手精华梳理 Sandy 发掘代码技巧:公众号:daimajiqiao 自从Vue2.0发布后,Vue就成了前端领域的热门话题,github也突破了三万的star,那么对于新 ...

  10. SpringBoot+SpringDataJpa快速上手(基本CRUD)

    以及表结构和数据 依赖 <!-- 如果有SpringBoot启动器,就不加--> <parent> <groupId>org.springframework.boo ...

随机推荐

  1. SELinux策略语法以及示例策略

    首发公号:Rand_cs SELinux策略语法以及示例策略 本文来讲述 SELinux 策略常用的语法,然后解读一下 SELinux 这个项目中给出的示例策略 安全上下文 首先来看一下安全上下文的格 ...

  2. kettle从入门到精通 第六十二课 ETL之kettle job中发送邮件(带多个附件),闭坑指南

    1.今天群里一个朋友加我微信遇到问下向我求助.一顿测试下来发现原来是使用kettle姿势不对,对kettle没有完全驾驭导致的,今天和大家一起分享下这个问题. 2.先自我膨胀下,自从写kettle系列 ...

  3. 闪迪SSD PLUS 128G CDM CrystalDiskMark

    闪迪SSD PLUS 128G CDM CrystalDiskMark 4k 读取才11,大号U盘水平. -- 对比三星SATA SSD. ..

  4. .NET5 ASP.NET Core 使用 EF Core MS SQL SERVER DB First

    .NET5 ASP.NET Core 使用 EF Core MS SQL SERVER DB First 开发工具:VS2019 1.修改appsettings.json,增加一项. "Co ...

  5. 第三届机器人、人工智能与信息工程国际学术会议(RAIIE 2024)

    [ACM独立出版/Fellow大咖云集]2024年第二届机器人.人工智能与信息工程国际学术会议(RAIIE 2024) 2024 3rd International Symposium on Robo ...

  6. LangChain转换链:让数据处理更精准

    上篇文章<5分钟了解LangChain的路由链>里主要介绍了路由链,核心类是LLMRouterChain和MultiPromptChain.本文介绍LangChain里的另外1个重要的链: ...

  7. 你了解Vim的增删改查吗 ?

    增: 在Vim的Normal模式中输入A/I/O,a/i/o字符进行对应的增加操作. 删 在Vim的Normal模式中, 输入x 删除光标对应的一个字符(4x代表删除4个字符): 输入dd删除光标所在 ...

  8. P3355 骑士共存问题题解

    题目链接:P3355 骑士共存问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题解: 棋盘问题考虑黑白染色成为二分图后做. 观察马的性质,可知一个点只能到一个异色点,所以,构造 ...

  9. 全志科技T3国产工业核心板规格书(四核ARM Cortex-A7,主频1.2GHz)

    1 核心板简介 创龙科技SOM-TLT3是一款基于全志科技T3处理器设计的4核ARM Cortex-A7国产工业核心板,每核主频高达1.2GHz. 核心板通过邮票孔连接方式引出CSI.TVIN.MIP ...

  10. 全志T113-i+玄铁HiFi4开发板(双核ARM Cortex-A7 )规格书

    评估板简介 创龙科技TLT113-EVM是一款基于全志科技T113-i双核ARM Cortex-A7 + 玄铁C906 RISC-V + HiFi4 DSP异构多核处理器设计的国产工业评估板,ARM ...