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 等注解。
  • 示例代码如下:
  1. import javax.persistence.*;
  2. import javax.persistence.Id;
  3. @Entity
  4. @Table(name = "t_user")//数据库中表名
  5. public class UserEO {
  6. @Id
  7. @Column(name = "USER_ID")//数据库中字段名
  8. private String userId;
  9. @Column(name = "USER_NAME")
  10. private String userName;
  11. }
  • 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接口,示例代码如下:
  1. @Repository
  2. public interface UserRepository extends JpaRepository<UserEO,String>{//第二个参数是UserEO对应的表的主键类型
  3. //直接定义如下方法,不需要写具体的sql语句
  4. List<UserEO> findByUserName(String userName);
  5. //对于自定义操作(比如更新状态字段为 ‘1’)使用 @Query注解
  6. @Query("update UserEO u set u.status = '1' where u.userName = :userName
  7. void updateStatusByName(String userName);
  8. //此方法 需要拼接条件 在实现类中重写
  9. List<UserEO> findByUserName(Condition condition);
  10. }

2.实现类无需显式实现 UserRepository,只要命名为UserRepositoryImpl即可。

好处在于对于不需要写sql或者sql语句不复杂(使用 @Query 注解可以实现的)的方法,不用重写。

对于需要判断并拼接查询条件的方法,我们可以在实现类中进行重写。

示例代码如下:

  1. public List<UserEO> findByUserName(Condition condition) {
  2. StringBuilder jpql = new StringBuilder(" select u from userEO u where u.tatus = '1' " );
  3. if (StringUtils.hasText(conditon.getUserName)) {
  4. jpql.append(" and u.userName = :userName " );
  5. }
  6. //执行 sql .. 返回List集合...
  7. }

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的更多相关文章

  1. jdbc、jpa、spring data jpa、hibernate、mybatis之间的关系及区别

    基础概念 jdbc(Java DataBase Connectivity)是java连接数据库操作的原生接口.JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型.作为A ...

  2. JDBC、ORM、JPA、Spring Data JPA,傻傻分不清楚?一文带你厘清个中曲直,给你个选择SpringDataJPA的理由!

    序言 Spring Data JPA作为Spring Data中对于关系型数据库支持的一种框架技术,属于ORM的一种,通过得当的使用,可以大大简化开发过程中对于数据操作的复杂度. 本文档隶属于< ...

  3. 【jpa】spring data jpa 配置使用

    1.spring data jpa 简单介绍 jpa是用于对象持久化的API,jpa是一种规范,而其他的ORM框架(hibernate,topLink等)是其实现,所以jpa可以使用不同的实现方式,修 ...

  4. <Spring Data JPA>二 Spring Data Jpa

    1.pom依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...

  5. Spring Data JPA简介 Spring Data JPA特点

    Spring Data JPA 是Spring基于ORM框架.JPA规范的基础上封装的一套JPA 应用框架,底层使用了Hibernate 的JPA技术实现,可使开发者用极简的代码即可实现对数据的访问和 ...

  6. [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 ...

  7. 【spring data jpa】spring data jpa 中的update 更新字段,如果原字段值为null不处理,不为null则在原来的值上加一段字符串

    示例代码: /** * 如果barCode字段值为null则不处理 * 如果barCode字段值不为null则在原本值的前面拼接 del: * @param dealer * @return */ @ ...

  8. 【spring data jpa】 spring data jpa 中 时间格式设置between and 查询

    实例代码: //举报时间 Date createDate = entity.getCreateDate(); if (createDate != null){ predicates.add(cb.be ...

  9. 【spring data jpa】spring data jpa的in查询

    如下: List<Dealer> findDealersByTidAndUidIn(String tid,List<String> uidList); 在dao层里面直接写这个 ...

随机推荐

  1. [shell]用shell脚本将本地文件夹与ftp上的文件夹同步

    需求说明 最近在AIX上做开发,开发机器在office网段,测试机器在lab网段,不能互相通讯,只能通过特定的ftp来传文件. 每次上传的机器都要做:登录ftp,进入我的目录,上传:下载的机器都要做: ...

  2. 使用angular路由切换后 轮播以及iscrollJs失效的问题

    我们在使用angular的时候,路由总是最让人头疼的地方. 在这里为大家解决一些用angular来回切换遗留下的小问题 比如我们在使用ng-route时如果主页面含有轮播图,当你切换到其他页面再切回主 ...

  3. Python默认调用路径

    记录个遇到的小问题,防止下次遇到忘记怎么解. 起因:pip安装扩展库时提示安装完成,但是在Python 终端下无法import 现象:终端直接运行python 时提示如下:(2.7.13)然而用/us ...

  4. State of the official Elasticsearch Java clients

    Elasticsearch Java Clients | Elastic https://www.elastic.co/blog/state-of-the-official-elasticsearch ...

  5. jQuery 的attr()方法

    在JS中设置节点的属性与属性值用到setAttribute(),获得节点的属性与属性值用到getAttribute(),而在jquery中,用一个attr()就可以全部搞定了,赞一个先 ^^ jque ...

  6. flask实现api

    https://www.cnblogs.com/vovlie/p/4178077.html from flask import Flask, jsonify app = Flask(__name__) ...

  7. android studio 使用CMAKE

    前言 之前,每次需要边写C++代码的时候,我的内心都是拒绝的.  1. 它没有代码提示!!!这意味着我们必须自己手动敲出所有的代码,对于一个新手来说,要一个字母都不错且大小写也要正确,甚至要记得住所有 ...

  8. tcp/udp/socket 端口映射,转发小工具

    1) 利用 Python 的 Socket 端口转发,用于远程维护 https://github.com/knownsec/rtcp 2) 反向端口转发工具 Reverse TCP Port to U ...

  9. R语言apply()函数用法

    在R语言的帮助文档里,apply函数的功能是: Retruns a vector or array or list of values obtained by applying a function ...

  10. array2xml xml2array

    array2xml/**     *     * 将简单数组转化为简单的xml     * @param string $data  要进行转化的数组     * @param string $tag ...