zoukankan      html  css  js  c++  java
  • 简述 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集合...
    }
    
    

    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

  • 相关阅读:
    jquery 建议编辑器
    开发中可能会用到的几个 jQuery 小提示和技巧
    Httpsqs的安装以及安装过程错误的解决方法 转
    ajax加载模块实时刷新的原理
    好用的php类库和方法
    js中masonry与infinitescroll结合 形成瀑布流
    网站架构从无到有
    可扩展Web架构与分布式系统
    JSONP跨域的原理解析
    你写的前端到底用没用到这些
  • 原文地址:https://www.cnblogs.com/kangkaii/p/8458371.html
Copyright © 2011-2022 走看看