热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Spring框架系列(四)SpringDataJPA简介

附上示例程序的github地址:https:github.combjtudujunlinSpringDataExample一、概述SpringData是一个数据访问

附上示例程序的github地址:https://github.com/bjtudujunlin/SpringDataExample



一、 概述

SpringData是一个数据访问框架,基于Spring实现,旨在提供一致的数据库访问模型,同时仍然保留不同数据库底层数据存储的特点。Spring Data由一些列的组件组成,分别对应不同数据库具体实现。Spring Data为你实现了访问关系型数据库、非关系型数据库的统一的接口,对于常见的企业级CURD、排序操作不需要手动添加任何sql语句,同时也支持手动扩展功能。下面是Spring Data的组件,比如Spring Data JPA支持关系型数据库操作,Spring Data Elasticsearch支持对Elasticsearch的操作,对于用户来说,使用的是同一套接口,这就很方便了。

同时由于Spring Data采用了“领域驱动模型”的设计思想,用户不需要与数据库直接打交道,只需要定义好领域模型(对象类),后续的创建表、CURD等操作,Spring Data统统帮你做完。下面是spring data框架中的组件。

·       Spring Data Commons

·       Spring Data JPA

·       Spring Data KeyValue

·       Spring Data LDAP

·       Spring Data MongoDB

·       Spring Data Gemfire

·       Spring Data REST

·       Spring Data Redis

·       Spring Data for Apache Cassandra

·       Spring Data for Apache Solr

·       Spring Data Couchbase (community module)

·       Spring Data Elasticsearch (communitymodule)

·       Spring Data Neo4j (community module)

二、 Repository

SpringData中最核心的概念就是Repository,Repository是一个抽象的接口,用户通过该接口来实现数据的访问。这次的内容基于Spring Data JPA进行介绍,Spring Data JPA提供了关系型数据库访问的一致性,在该组件中,Repository包括CrudRepositoryPagingAndSortingRepository两类。

1、CurdRepository

public interface CrudRepositoryextends Serializable>extends Repository {

    extends T> S save(Sentity);

    extends T> Iterable save(Iterableentities);

    T findOne(ID id);

    boolean exists(IDid);

    Iterable findAll();

    Iterable findAll(Iterable ids);

    long count();

    void delete(IDid);

    void delete(Tentity);

    void delete(Iterableextends T> entities);

    void deleteAll();

}

 

CrudRepository接口实现了savedeletecountexistsfindOne等方法,方法的意思从名字上很容易理解,继承这个接口时需要两个模板参数TID,T就是你的实体类(对应数据库表),ID就是主键。

在使用中,用户需要继承这个接口,Customer就是定义的实体,Long是主键类型

public interface CustomerRepository extends CrudRepository

 

2PagingAndSortingRepository

public interface PagingAndSortingRepositoryextends Serializable> extends CrudRepository {

    Iterable findAll(Sort sort);

    Page findAll(Pageable pageable);

}

PagingAndSortingRepository除了CrudRepository提供的方法外还提供了分页和排序两种方法,TID的意思与CrudRepository相同。

 

3、扩展查询

如果觉得curdrepository提供的查询不符合要求,可以继承该接口进行扩展,Spring Data JPA为此提供了一些表达条件查询的关键字,大致如下:

And--- 等价于SQL中的and 关键字,比如findByUsernameAndPassword(String user, Striang pwd);

Or--- 等价于SQL中的or 关键字,比如findByUsernameOrAddress(String user, String addr);

Between--- 等价于SQL中的between 关键字,比如 findBySalaryBetween(int max,int min);

LessThan--- 等价于SQL中的"<"&#xff0c;比如 findBySalaryLessThan(int max)&#xff1b;

GreaterThan--- 等价于SQL中的">"&#xff0c;比如 findBySalaryGreaterThan(intmin)&#xff1b;

IsNull--- 等价于SQL中的"is null"&#xff0c;比如 findByUsernameIsNull()&#xff1b;

IsNotNull--- 等价于SQL中的"is not null"&#xff0c;比如 findByUsernameIsNotNull()&#xff1b;

NotNull--- IsNotNull等价&#xff1b;

Like--- 等价于SQL中的"like"&#xff0c;比如 findByUsernameLike(String user)&#xff1b;

NotLike--- 等价于SQL中的"not like"&#xff0c;比如 findByUsernameNotLike(Stringuser)&#xff1b;

OrderBy--- 等价于SQL中的"order by"&#xff0c;比如findByUsernameOrderBySalaryAsc(String user)&#xff1b;

Not--- 等价于SQL中的"&#xff01; &#61;"&#xff0c;比如 findByUsernameNot(String user)&#xff1b;

In--- 等价于SQL中的"in"&#xff0c;比如findByUsernameIn(Collection userList)&#xff0c;方法的参数可以是 Collection类型&#xff0c;也可以是数组或者不定长参数&#xff1b;

NotIn--- 等价于SQL中的"not in"&#xff0c;比如findByUsernameNotIn(Collection userList)&#xff0c;方法的参数可以是 Collection类型&#xff0c;也可以是数组或者不定长参数&#xff1b;

举个例子&#xff0c;例子中增加了根据lastNamefirsstName查询的方法。

public interface CustomerRepository extends CrudRepository {

   

    List findByLastName(StringlastName);

   

    List findByFirstName(String firstName);  

}

4、基于&#64;query注解的扩展

Springdata支持JPQL 语句对查询进行扩展&#xff0c;例子如下&#xff1a;

public interface CustomerRepository extends CrudRepository {

    &#64;Query("select a from Customer a WHERE a.firstName &#61; ?1")

    List findByQuery(StringfirstName);

}

 


推荐阅读
  • NoSQL数据库,即非关系型数据库,有时也被称作Not Only SQL,是一种区别于传统关系型数据库的管理系统。这类数据库设计用于处理大规模、高并发的数据存储与查询需求,特别适用于需要快速读写大量非结构化或半结构化数据的应用场景。NoSQL数据库通过牺牲部分一致性来换取更高的可扩展性和性能,支持分布式部署,能够有效应对互联网时代的海量数据挑战。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • Spring Data JdbcTemplate 入门指南
    本文将介绍如何使用 Spring JdbcTemplate 进行数据库操作,包括查询和插入数据。我们将通过一个学生表的示例来演示具体步骤。 ... [详细]
  • 本文最初发表在Thorben Janssen的Java EE博客上,每周都会分享最新的Java新闻和动态。 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 帝国CMS中的信息归档功能详解及其重要性
    本文详细解析了帝国CMS中的信息归档功能,并探讨了其在内容管理中的重要性。通过归档功能,用户可以有效地管理和组织大量内容,提高网站的运行效率和用户体验。此外,文章还介绍了如何利用该功能进行数据备份和恢复,确保网站数据的安全性和完整性。 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • 观察 | 求职体验:收到录用通知的公司通常不深究技术细节,而那些详细追问的公司往往没有后续进展
    观察 | 求职体验:收到录用通知的公司通常不深究技术细节,而那些详细追问的公司往往没有后续进展 ... [详细]
  • 提升 Kubernetes 集群管理效率的七大专业工具
    Kubernetes 在云原生环境中的应用日益广泛,然而集群管理的复杂性也随之增加。为了提高管理效率,本文推荐了七款专业工具,这些工具不仅能够简化日常操作,还能提升系统的稳定性和安全性。从自动化部署到监控和故障排查,这些工具覆盖了集群管理的各个方面,帮助管理员更好地应对挑战。 ... [详细]
  • 修复一个 Bug 竟耗时两天?真的有那么复杂吗?
    修复一个 Bug 竟然耗费了两天时间?这背后究竟隐藏着怎样的复杂性?本文将深入探讨这个看似简单的 Bug 为何会如此棘手,从代码层面剖析问题根源,并分享解决过程中遇到的技术挑战和心得。 ... [详细]
author-avatar
dmcm0003
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有