`
eric_weitm
  • 浏览: 242794 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring4系列三 spring data 解析

 
阅读更多

后端开发,简单说就是针对不同的业务建模,抽象数据,对数据进行各种CRUD。根据需求不同大概有这么几类的数据:数据库(mysql),nosql(redis),全文检索引擎(solr),大数据(hdfs),云存储和CDN。其中前2个用于交易事物操作,第三个重点是快速查找,模糊查找(找到最相似的),第四个用于分析(数据仓库的升级),最后是纯粹的可靠存储(多备份的硬盘)。spring中,把所有能存储和处理数据的地方叫Repository。其目标是,提供统一的数据访问接口,尽可能避免写sql。

 

一、相关jar概述

spring-data-commons封装了repository和相关的annotation

spring-data-jpa实现jpaRepository

二、实现

1、基本抽象

–Repository:仅仅是一个标识,表明任何继承它的均为仓库接口类,用于封装数据库的crud

–CrudRepository:继承Repository,实现了一组CRUD相关的方法 

–PagingAndSortingRepository:继承CrudRepository,实现了一组分页排序相关的方法 

–JpaRepository:继承PagingAndSortingRepository,实现一组JPA规范相关的方法 

–自定义的 XxxxRepository需要继承 JpaRepository,这样的XxxxRepository接口就具备了通用的数据访问控制层的能力。

–JpaSpecificationExecutor:实现一组JPACriteria查询相关的方法 

 

2、service层存在意义就是构建page,JPACriteria等,组合底层的repository,controller层直接可以调用对应的crud

 

3、Repository子接口中声明方法 

 * 1.不是随便声明的,而需要符合一定的规范 

 * 2.查询方法以find|read|get开发 

 * 3.涉及条件查询,条件的属性需要定义关键字连接 

 * 4.要注意的额是,条件的属性以字母大写 

 * 5.支持属性的级联查询,若当前类有符合条件的属性,则优先使用,则不使用级联属性 

 * 若需要使用级联属性,则属性之间使用——进行连接 

4、自定义查询的例子

    //为@Query注解传递参数的方式1:使用占位符  

    @Query("SELECT P FROM Person P where P.lastName=?1 AND P.email=?2")  

    List<Person> testQueryAnnotationParams1(String lastName,String email);  

      

    //为@Query注解传递参数的方式2:使用命名参数方式  

    @Query("SELECT P FROM Person P where P.lastName=:lastName AND P.email=:email")  

    List<Person> testQueryAnnotationParams2(@Param("email")String email,@Param("lastName")String lastName);  

          

    //Spring Data 运行在占位符上添加%%  

    @Query("select p from Person p where p.lastName like %?1% or p.email like %?2%")  

    List<Person> testQueryAnnotationLikeParam(String lastName,String email);  

      

    //设置nativeQuery=true 可以使用原生的sql查询  

    @Query(value="SELECT count(id) FROM jpa_persons",nativeQuery=true)  

    public long getTotalCount();  

      

      

    //可以通过自定义的JPQL 完成update和delete操作,注意:JPQL不支持Insert操作  

    //在@Query注解中编写JPQL语句,但必须使用@Modify进行修饰,以通知SpringData,这是一个Update或者Delete  

    //Update或者delete操作,需要使用事务,此时需要定义Service层,在service层的方法上添加事务操作  

    //默认情况下,SpringData的每个方法上有事务,但都是一个只读事务,他们不能完成修改操作  

    @Modifying  

    @Query("update Person p set p.email=:email where id=:id")  

    void updatePersonEmail(@Param("id")Integer id,@Param("email")String email);

5、对应实现

jpa ->JpaRepository 

solr -> SolrTemplate 

redis->RedisTemplate

分享到:
评论

相关推荐

    Spring Data JPA Spring Data Commons

    Spring Data JPA是Spring框架的一部分,它是一种简便的数据访问层(Repository)的实现技术,主要用来简化JPA(Java Persistence API)实体数据访问代码的编写。Spring Data JPA允许开发者通过简单的接口和注解配置...

    spring-data-keyvalue-2.5.5-API文档-中文版.zip

    赠送jar包:spring-data-keyvalue-2.5.5.jar; 赠送原API文档:spring-data-keyvalue-2.5.5-javadoc.jar; 赠送源代码:spring-data-keyvalue-2.5.5-sources.jar; 赠送Maven依赖信息文件:spring-data-keyvalue-...

    spring4.x+springdatajpa+springmvc+maven搭建

    在本项目中,Maven将用于管理各种库的依赖关系,包括Spring框架的不同模块,Spring Data JPA,以及其它必要的第三方库。Maven的POM.xml文件定义了项目的依赖结构,使得开发者可以轻松地集成和更新项目所依赖的库,而...

    SpringData入门到精通

    4. **SpringData Commons**:提供了通用的Repository功能,如分页、排序等,是其他模块的基础。 在教程的后续章节,你将学习到如何使用SpringData进行复杂查询,如 Specifications 和 Querydsl,它们允许你在运行时...

    Spring-data-jpa常用教程.pdf

    ### Spring-data-jpa 的核心知识点解析 #### 一、Spring-data-jpa 基本介绍 Spring-data-jpa 是 Spring 家族中的一个重要成员,它主要用于简化基于 Java Persistence API (JPA) 的数据访问层(DAO)的开发工作。...

    spring data jpa简单案例

    **Spring Data JPA 简单案例** Spring Data JPA 是 Spring 框架的一个模块,它为使用 JPA(Java Persistence API)提供了强大的支持,简化了数据访问层的开发。通过使用 Spring Data JPA,我们可以避免编写大量重复...

    Spring技术内幕:深入解析Spring架构与设计原理.pdf

    Spring技术内幕:深入解析Spring架构与设计原理 Spring技术内幕 Spring是一个基于Java的开源框架,旨在简化Java企业应用的开发。Spring的目标是提供一个简洁、灵活、可扩展的框架,以帮助开发者快速构建企业级...

    spring4.2,spring mvc,spring data,jpa,hibernate的程序构架

    这里我们将详细讨论Spring MVC、Spring Data以及JPA和Hibernate的关系和用法。 首先,Spring MVC是Spring框架的一部分,专门用于构建Web应用程序。它遵循模型-视图-控制器(MVC)设计模式,提供了一种分层架构,...

    spring-data源码

    在源码中,`org.springframework.data.elasticsearch.core.ElasticsearchOperations`接口是核心,它定义了一系列操作Elasticsearch的方法,如索引创建、文档增删改查、搜索等。 接着,让我们看看如何配置Spring ...

    spring data jpa + spring + json demo

    【标题】"spring data jpa + spring + json demo"揭示了这个项目是关于使用Spring Data JPA、Spring框架以及JSON处理的一个示例应用。Spring Data JPA是Spring框架的一个模块,它简化了JPA(Java Persistence API)...

    spring data实战源码

    《Spring Data实战源码》是基于Spring Data框架的一本深入解析书籍,其随书源码提供了丰富的示例和实践案例,帮助读者理解Spring Data的核心概念和技术。Spring Data是一个强大的库,旨在简化数据库访问并增强数据...

    spring data jpa 教程

    Spring Data JPA 是一个基于 Java 的开源框架,它属于 Spring Data 家族的一部分,旨在简化 Java 应用中的数据访问层代码,特别针对基于 JPA(Java Persistence API)的数据持久化操作。本教程将详细介绍 Spring ...

    spring技术内幕第2版深入解析spring架构与设计原理

    在深入解析Spring技术内幕第2版中,会详细探讨Spring框架的核心架构与设计原理,Spring作为一个轻量级的Java平台,提供了全面的编程和配置模型,是企业级Java应用程序开发中广泛使用的技术之一。 Spring的核心特性...

    springBoot整合springData JPA

    通过学习和实践这个项目,开发者可以在短短三小时内快速掌握SpringBoot整合SpringData JPA的基础,从而提升开发效率,更好地应对各种数据访问的需求。这是一条高效的学习路径,尤其适合Java Web开发的初学者。

    Spring Data JPA从入门到精通

    《Spring Data JPA从入门到精通》是一本深入解析Spring Data JPA的书籍,它以Spring Boot框架为核心,旨在帮助读者全面理解并熟练运用Spring Data JPA进行数据库操作。Spring Data JPA是Spring Framework的一个模块...

    neo4j整合spring data文档

    **标题与描述解析** 标题"neo4j整合spring data文档"指出我们要探讨的主题是关于将图数据库Neo4j...在实际项目中,详细阅读"spring-data-neo4j-reference(ne4j结合spring data).pdf"文档将进一步深入掌握相关知识。

    Spring Data实战

     《Spring Data实战》从Spring Data背景知识、关系型数据库、NoSQL、快速应用开发、大数据、数据网格6个方面深度解析了数据访问技术,介绍的内容都是最流行和前沿的,其中文档数据库、图数据库、键/值存储、Hadoop...

    spring springdata springmvc

    标题中的"spring springdata springmvc"提及了三个关键的Java Web开发框架,它们分别是Spring、Spring Data和Spring MVC。这三者是构建现代、高效、模块化的Java后端应用程序的核心组件。 Spring框架是一个全面的...

    SpringDataJpa整合FreeMarker源码样例

    《SpringDataJpa整合FreeMarker源码解析》 在当今的软件开发中,Spring Boot、Spring Data JPA和FreeMarker的整合已经成为了构建高效、简洁Web应用的常见选择。本篇将深入探讨如何将这三个强大的工具结合在一起,...

    spring-data-solr-master

    《Spring Data Solr深度解析与实战指南》 Spring Data Solr是Spring Data项目的一个子模块,专门用于简化Apache Solr的集成。它提供了一种声明式的方式来操作Solr,使得在Java应用程序中处理Solr查询变得更为简洁。...

Global site tag (gtag.js) - Google Analytics