当前位置: 首页 > article >正文

JPA Spring Data JPA详解

JPA & Spring Data JPA

一、JPA

1. JPA是什么

JPA(Java Persistence API)Java持久化 API,是一套基于ORM思想的规范。

ORM(Object Relational Mapping)对象关系映射。实现了实体类对象和数据库中表的一个映射关系。我们可以通过操作实体类对象(JavaBean)来操作数据库表,从而实现数据库的CRUD操作并且不需要去重点关注SQL语句。ORM主要涉及到两个映射关系:1、实体类和表的映射关系;2、实体类中的属性和表中的字段的映射关系。像Mybatis框架:一个不完全的ORM框架,需要开发人员写一部分的SQL语句;Hibernate框架:是一个完全的ORM框架,需要编写SQL语句

规范:顾名思义就是只定义了而没有实现,因此可以明白JPA的内部就是由一系列的接口和抽象类组成,自身并没有去实现。

综上所述JPA就是众多实现了ORM思想框架的一个规范,内部只有接口和抽象类,没有实现类。(面向接口编程)

2. 为什么用

2.1 标准化

JPA是一个规范,这就说明任何实现了 JPA 规范的框架都遵循同样的架构,提供相同的访问API,这保证了基于JPA开发的企业应用能够经过少量的修改就能够在不同的JPA框架下运行。

2.2 容器级特性的支持

JPA框架中支持大数据集、事务、并发等容器级事务,这使得 JPA 超越了简单持久化框架的局限,在企业应用发挥更大的作用。

2.3 简单方便

JPA的主要目标之一就是提供更加简单的编程模型:在JPA框架下创建实体和创建Java 类一样简单,没有任何的约束和限制,只需要使用 javax.persistence.Entity进行注释,JPA的框架和接口也都非常简单,没有太多特别的规则和设计模式的要求,开发者可以很容易的掌握。JPA基于非侵入式原则设计,因此可以很容易的和其它框架或者容器集成

2.4 查询能力

JPA的查询语言是面向对象而非面向数据库的,它以面向对象的自然语法构造查询语句,可以看成是Hibernate HQL的等价物。JPA定义了独特的JPQL(Java Persistence Query Language),JPQL是EJB QL的一种扩展,它是针对实体的一种查询语言,操作对象是实体,而不是关系数据库的表,而且能够支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能够提供的高级查询特性,甚至还能够支持子查询。

2.5 高级特性

JPA 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,这样的支持能够让开发者最大限度的使用面向对象的模型设计企业应用,而不需要自行处理这些特性在关系数据库的持久化。

3. 怎么用

3.1 JPA的实现

实现JPA规范的常见的框架有Hibernate、TopLink和OpenJPA. 以Hibernate为例。
在这里插入图片描述
我们在使用JPA操作数据库时,其底层还是由Hibernate去实现的

3.2 环境搭建
3.2.1 导入坐标
 <dependencies><!--hibernate对jpa的支持--><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-entitymanager</artifactId><version>5.4.10.Final</version></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-c3p0</artifactId><version>5.4.10.Final</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.6</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency></dependencies>
3.2.2 创建配置文件persistence.xml

注:persistence.xml必须放在类路径下的META-INF文件下

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/persistence  http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"version="2.0"><!--配置持久化单元name:持久化单元名称transaction-type:事务类型RESOURCE_LOCAL:本地事务管理JTA:分布式事务管理--><persistence-unit name="myJPA" transaction-type="RESOURCE_LOCAL"><!--配置JPA规范的服务提供商--><provider>org.hibernate.jpa.HibernatePersistenceProvider</provider><!--配置数据源--><properties><!-- 数据库信息用户名,javax.persistence.jdbc.user密码,  javax.persistence.jdbc.password驱动,  javax.persistence.jdbc.driver数据库地址   javax.persistence.jdbc.url--><!-- 标准配置方法,适用性高 --><!--<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/><property name="javax.persistence.jdbc.url" value="jdbc:mysql://127.0.0.1:3306/jpa"/><property name="javax.persistence.jdbc.username" value="root"/><property name="javax.persistence.jdbc.password" value="123456"/>--><!-- hibernate 的配置方法--><property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/><property name="hibernate.connection.url" value="jdbc:mysql:///jpa?characterEncoding=UTF-8"></property><property name="hibernate.connection.username" value="root"></property><property name="hibernate.connection.password" value="123456"></property><!--配置jpa实现方(hibernate)的配置信息显示sql           :   false|true自动创建数据库表    :  hibernate.hbm2ddl.autocreate      : 程序运行时创建数据库表(如果有表,先删除表再创建)update      :程序运行时创建表(如果有表,不会创建表)none        :不会创建表--><!--配置方言--><property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"></property><property name="hibernate.show_sql" value="true" /><property name="hibernate.format_sql" value="true" /><property name="hibernate.hbm2ddl.auto" value="update" /></properties></persistence-unit>
</persistence>
3.2.3 编写实体类
3.2.4 配置实体类和数据库表、属性和表中字段的映射关系
Entity   //声明这是一个实体类
@Table(name = "cst_customer") //实体类和数据库表的映射
public class Customer implements Serializable {private static final long serialVersionUID = 2845630796773320819L;/*** @Id:声明主键的配置* @GeneratedValue:配置主键的生成策略*      strategy*          GenerationType.IDENTITY :自增,mysql*                 * 底层数据库必须支持自动增长(底层数据库支持的自动增长方式,对id自增)*          GenerationType.SEQUENCE : 序列,oracle*                  * 底层数据库必须支持序列*          GenerationType.TABLE : jpa提供的一种机制,通过一张数据库表的形式帮助我们完成主键自增*          GenerationType.AUTO : 由程序自动的帮助我们选择主键生成策略* @Column:配置属性和字段的映射关系*      name:数据库表中字段的名称*/@Id@GeneratedValue(strategy = GenerationType.IDENTITY)@Column(name = "cust_id")private Integer custId;@Column(name = "cust_name")private String custName;@Column(name = "cust_source")private String custSource;@Column(name = "cust_industry")private String custIndustry;@Column(name = "cust_level")private String custLevel;@Column(name = "cust_address")private String custAddress;@Column(name = "cust_phone")private String custPhone;//get | set | toString.........
http://www.lryc.cn/news/2420136.html

相关文章:

  • 一文弄懂 Unicode 编码
  • 字符串 格式化 String.format()的详细解释
  • 【计算机网络】localhost不能访问,127.0.0.1可以访问?
  • win10自动更新关闭
  • Fiverr 攻略:跨境自由职业通过 Fiverr 盈利
  • freemark--模版引擎
  • Java——反射(reflection)详解
  • SSM基于协同过滤推荐算法的新闻推荐系统43149
  • Hibernate—(搭建、简单使用)
  • DNS的原理与搭建
  • FIFO存储器概念介绍
  • ORACLE 可插拔式pdb
  • Tensorflow,pytorch,Caffe,MXNet,PaddlePaddle,THeano算法框架哪家强?
  • 【ruoyi-vue】yml文件解析
  • 元数据简析:定义及管理
  • 安装配置 | 用同济邮箱账户下载matlab
  • 支持向量机(SVM)通俗版讲解
  • Python123
  • font字体的一些常用代码
  • Linux命令之nc
  • 【GAN】基础原理讲解及代码实践
  • 黎曼猜想?
  • Iperf3详解+实战教程
  • OLAP实践 —— OLAP基本概念理解总计小记
  • 微服务(概念篇):什么是微服务?一篇文章让你彻底搞明白
  • 黑苹果安装教程(史上最简单、最新)
  • CTF是什么?一文带你读懂网络安全大赛
  • Sonar介绍及使用
  • Thymeleaf学习
  • 回车与换行符号\n,\r\n,^M符号