简述 JPA 与 Spring Data JPA 与 Hibernate
1.JPA是什么?以及相关概述
- JPA的是 Java Persistence API 的简写,是Sun官方提出的一种ORM规范!
- Sun提出此规范有2个原因:
1.简化现有Java EE和Java SE应用开发工作。
2.Sun希望整合ORM技术,实现天下归一。 - 重点在于,JPA是一套规范,而不是具体的ORM框架。
- 故Hibernate、TopLink 等ORM框架 都是JPA的实现,其中Hibernate已获得Sun的兼容认证。
- JPA的标准的定制是hibernate作者参与定制的,所以JPA是Hibernate的一个总成。
- 优势在于:
1.开发者面向JPA规范的接口,但底层的JPA实现可以任意切换:觉得Hibernate好的,可以选择Hibernate JPA实现;觉得TopLink好的,可以选择TopLink JPA实现。
2.这样开发者可以避免为使用Hibernate学习一套ORM框架,为使用TopLink又要再学习一套ORM框架。 - 在项目中使用方式为:在实体类中,使用
@Entity、@Table、@Id与@Column等注解。 - 示例代码如下:
import javax.persistence.*;
import javax.persistence.Id;
@Entity
@Table(name = "t_user")//数据库中表名
public class UserEO {
@Id
@Column(name = "USER_ID")//数据库中字段名
private String userId;
@Column(name = "USER_NAME")
private String userName;
}
- jar包结构如下图所示:

2.Spring Data JPA是什么?以及相关概述
- 首先Spring框架几乎是无所不能,无所不在。
- 其次Spring也想要做持久化相关工作,并且已有Spring-data-**这一系列包(Spring-data-jpa,Spring-data-template,Spring-data-mongodb等)。
- 其中Spring-data-jpa即代表着,Spring框架对JPA的整合。
- Spring Data JPA是在JPA规范的基础下提供了Repository层的实现。
- 在项目中的repository层中具体表现为:
1.接口要继承JpaRepository接口,示例代码如下:
@Repository
public interface UserRepository extends JpaRepository<UserEO,String>{//第二个参数是UserEO对应的表的主键类型
//直接定义如下方法,不需要写具体的sql语句
List<UserEO> findByUserName(String userName);
//对于自定义操作(比如更新状态字段为 ‘1’)使用 @Query注解
@Query("update UserEO u set u.status = '1' where u.userName = :userName
void updateStatusByName(String userName);
//此方法 需要拼接条件 在实现类中重写
List<UserEO> findByUserName(Condition condition);
}
2.实现类无需显式实现 UserRepository,只要命名为UserRepositoryImpl即可。
好处在于对于不需要写sql或者sql语句不复杂(使用 @Query 注解可以实现的)的方法,不用重写。
对于需要判断并拼接查询条件的方法,我们可以在实现类中进行重写。
示例代码如下:
public List<UserEO> findByUserName(Condition condition) {
StringBuilder jpql = new StringBuilder(" select u from userEO u where u.tatus = '1' " );
if (StringUtils.hasText(conditon.getUserName)) {
jpql.append(" and u.userName = :userName " );
}
//执行 sql .. 返回List集合...
}
jar包结构如下图:

关于spring-data-jpa的使用可参考:https://www.cnblogs.com/dreamroute/p/5173896.html
3.总结
- JPA是一套规范,Hibernate框架做了较好的实现。
- Spring框架独揽了repository的实现,即CRUD相关操作,即 Spring Data JPA
- JPA 对实体(xxxEO)操作,使其与数据库关联。
- 下面2图展示了JPA 与 ORM框架关系,以及 Spring Data JPA做了什么


不知道为什么,突然就想更新下!2018年2月27日~
从maven仓库搜索 'jpa' 的结果(下图)可以看到,JPA的非repository部分已经被Hibernate霸占了,可怕。

本文参考:http://www.lxway.com/528201191.htm
https://www.cnblogs.com/dreamroute/p/5173896.html
http://www.cnblogs.com/xiaoheike/p/5150553.html
https://baike.baidu.com/item/JPA/5660672?fr=aladdin
简述 JPA 与 Spring Data JPA 与 Hibernate的更多相关文章
- jdbc、jpa、spring data jpa、hibernate、mybatis之间的关系及区别
基础概念 jdbc(Java DataBase Connectivity)是java连接数据库操作的原生接口.JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型.作为A ...
- JDBC、ORM、JPA、Spring Data JPA,傻傻分不清楚?一文带你厘清个中曲直,给你个选择SpringDataJPA的理由!
序言 Spring Data JPA作为Spring Data中对于关系型数据库支持的一种框架技术,属于ORM的一种,通过得当的使用,可以大大简化开发过程中对于数据操作的复杂度. 本文档隶属于< ...
- 【jpa】spring data jpa 配置使用
1.spring data jpa 简单介绍 jpa是用于对象持久化的API,jpa是一种规范,而其他的ORM框架(hibernate,topLink等)是其实现,所以jpa可以使用不同的实现方式,修 ...
- <Spring Data JPA>二 Spring Data Jpa
1.pom依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...
- Spring Data JPA简介 Spring Data JPA特点
Spring Data JPA 是Spring基于ORM框架.JPA规范的基础上封装的一套JPA 应用框架,底层使用了Hibernate 的JPA技术实现,可使开发者用极简的代码即可实现对数据的访问和 ...
- [Spring Boot] Adding JPA and Spring Data JPA
JPA is just like a helper class for providing data for Controller, has method like 'findOne', 'findA ...
- 【spring data jpa】spring data jpa 中的update 更新字段,如果原字段值为null不处理,不为null则在原来的值上加一段字符串
示例代码: /** * 如果barCode字段值为null则不处理 * 如果barCode字段值不为null则在原本值的前面拼接 del: * @param dealer * @return */ @ ...
- 【spring data jpa】 spring data jpa 中 时间格式设置between and 查询
实例代码: //举报时间 Date createDate = entity.getCreateDate(); if (createDate != null){ predicates.add(cb.be ...
- 【spring data jpa】spring data jpa的in查询
如下: List<Dealer> findDealersByTidAndUidIn(String tid,List<String> uidList); 在dao层里面直接写这个 ...
随机推荐
- Python爬虫scrapy-redis分布式实例(一)
目标任务:将之前新浪网的Scrapy爬虫项目,修改为基于RedisSpider类的scrapy-redis分布式爬虫项目,将数据存入redis数据库. 一.item文件,和之前项目一样不需要改变 # ...
- 洛谷P1156 垃圾陷阱 dp
正解:dp 解题报告: 这儿是传送门! 话说最近怎么神仙们都开始狂刷dp,,,感觉今天写了好多dp的题解的样子?(也就三四道其实× 然后这题,首先看到要么吃要么堆起来就会想到01背包趴?然后就考虑设方 ...
- Git入门基本操作
由David发表在天码营 Git简介 Git不仅仅是实际项目开发中进行代码管理的神器,也是你在天码营学习需要掌握的工具. Git是一种代码版本控制工具.我们在实际项目中和天码营的学习过程中都会产生大量 ...
- Mirror--镜像使用的工作线程数
/*在SQL SERVER 2005 及以后版本中, 使用'MAXworker thread' 来配置可用的线程数,默认设置为0 ,即自动控制线程数 计算最大工作线程数: 对于32 位系统:逻辑CPU ...
- vue基础篇(一)
1.简介 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易于上手 ...
- (转)帮你深入理解OAuth2.0协议
1. 引言 如果你开车去酒店赴宴,你经常会苦于找不到停车位而耽误很多时间.是否有好办法可以避免这个问题呢?有的,听说有一些豪车的车主就不担心这个问题.豪车一般配备两种钥匙:主钥匙和泊车钥匙.当你到酒店 ...
- Python Web开发之路
Flask相关 1.DBUtils数据库连接池 2.Flask之初体验 3.Flask之WTForms 4.Flask之信号 5.Flask之flask-session 6.Flask之flask-s ...
- 排序问题Java
package zhuzhuangtu; import java.util.*; import java.io.*; public class Main{ public static void mai ...
- 11月26号host
127.0.0.1 localhost255.255.255.255 broadcasthost::1 localhostfe80::1%lo0 localhost # Google start216 ...
- 20145328 《网络对抗技术》逆向及Bof基础实践
20145328 <网络对抗技术>逆向及Bof基础实践 实践内容 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回 ...