springDataJpa的官方API
一 . Core concepts(核心概念)
1.springdata中的中心接口是——Repository。这个接口没有什么重要的功能(原句称没什么惊喜的一个接口)。主要的作用就是标记和管理。其他的接口都是此接口的子类。
Example 1:
public interface CrudRepository<T, ID extends Serializable> extends Repository<T, ID> {
2 <S extends T> S save(S var1);//保存给定的实体
3
4 <S extends T> Iterable<S> save(Iterable<S> var1);//保存指定的实体集合
5
6 T findOne(ID var1);查询指定id的实体
7
8 boolean exists(ID var1);//判断一个实体是否与给定的ID存在
9
10 Iterable<T> findAll();//返回所有实体
11
12 Iterable<T> findAll(Iterable<ID> var1);//查询指定的实体集合
13
14 long count();//该实体的总数
15
16 void delete(ID var1);//根据id删除指定实体
17
18 void delete(T var1);//删除指定实体
19
20 void delete(Iterable<? extends T> var1);//删除指定的实体集合
21
22 void deleteAll();//删除全部
23 }
除此还提供了一些技术相关的接口,比如 JpaRepository,MongoRepository这两个接口继承了CrudRepository。
2.CrudRepository
1)CrudRepository有个子类PagingAndSortingRepository,增加了一些方法来实现分页。
public interface PagingAndSortingRepository<T, ID extends Serializable> extends CrudRepository<T, ID> {
2 Iterable<T> findAll(Sort var1);
3
4 Page<T> findAll(Pageable var1);
5 }
2)除了普通查询,计数和删除查询都可以使用
Example 4:计数查询
dao:

controller:

Example 5:派生删除查询
dao:

controller:

3.查询数据
4.定义dao层的继承接口
通常,dao层接口将会继承Repository,CrudRepository 或者PagingAndSortingRepository 。
或者不想继承Springdata的接口,你也可以定义个自己的接口@RepositoryDefinition,继承CrudRepository 。可以定义一套完整的自己的方法。
Example 6:

1 @NoRepositoryBean
2 interface MyBaseRepository<T, ID extends Serializable> extends Repository<T, ID> {
3
4 Optional<T> findById(ID id);
5
6 <S extends T> S save(S entity);
7 }
8
9 interface UserRepository extends MyBaseRepository<User, Long> {
10 User findByEmailAddress(EmailAddress emailAddress);
11 }

5.空库
spring提供了一些注解,用来对付这种空值请情况。
Example 7:
interface UserRepository : Repository<User, String> {
fun findByUsername(username: String): User //该方法当传入一个空的参数时,将会抛出一个 EmptyResultDataAccessException
fun findByFirstname(firstname: String?): User? //该方法接受零作为参数 firstname 并返回 零 在查询执行不会产生结果。
}
6.查询方法
Spring中的基础架构中,有一种查询构建机制的约束。这种约束会忽略像find…By,read…By,query…By,count…By,和
get…By这种前缀,而开始分析其余部分。当然还可以引入进一步的表达式,可以定义实体中的一些条件,用and或者or对他们进行连接。
Example 8:

interface PersonRepository extends Repository<User, Long> {
List<Person> findByEmailAddressAndLastname(EmailAddress emailAddress, String lastname);
// Enables the distinct flag for the query
List<Person> findDistinctPeopleByLastnameOrFirstname(String lastname, String firstname);
List<Person> findPeopleDistinctByLastnameOrFirstname(String lastname, String firstname);
// Enabling ignoring case for an individual property
List<Person> findByLastnameIgnoreCase(String lastname);
// Enabling ignoring case for all suitable properties
List<Person> findByLastnameAndFirstnameAllIgnoreCase(String lastname, String firstname);
// Enabling static ORDER BY for a query
List<Person> findByLastnameOrderByFirstnameAsc(String lastname);
List<Person> findByLastnameOrderByFirstnameDesc(String lastname);
}

IgnoreCase属性表示忽略大小写
OrderBy表示引用属性进行查找时附加子句并提供排序方向(Asc或Desc)
7.关于特殊参数的处理(比如Pageable和Sort in查询方法)
Example 9:

Page<User> findByLastname(String lastname, Pageable pageable); Slice<User> findByLastname(String lastname, Pageable pageable); List<User> findByLastname(String lastname, Sort sort); List<User> findByLastname(String lastname, Pageable pageable);
8.关于限制查询的结果
查询方法的结果可以通过关键字来限制,first或者top都可以互换使用。且后面可以直接加数字指定需要的前几位结果。
Example 10:

User findFirstByOrderByLastnameAsc(); User findTopByOrderByAgeDesc(); Page<User> queryFirst10ByLastname(String lastname, Pageable pageable); Slice<User> findTop3ByLastname(String lastname, Pageable pageable); List<User> findFirst10ByLastname(String lastname, Sort sort); List<User> findTop10ByLastname(String lastname, Pageable pageable)

9.方法中支持的关键字
8.关于限制查询的结果
查询方法的结果可以通过关键字来限制,first或者top都可以互换使用。且后面可以直接加数字指定需要的前几位结果。
Example 10:

User findFirstByOrderByLastnameAsc(); User findTopByOrderByAgeDesc(); Page<User> queryFirst10ByLastname(String lastname, Pageable pageable); Slice<User> findTop3ByLastname(String lastname, Pageable pageable); List<User> findFirst10ByLastname(String lastname, Sort sort); List<User> findTop10ByLastname(String lastname, Pageable pageable)

9.方法中支持的关键字,详情见慕课网springData,Reposotory查询方法命名规则
10.使用注解 @Query
Example 11:
public interface UserRepository extends JpaRepository<User, Long> {
@Query("select u from User u where u.emailAddress = ?1")
User findByEmailAddress(String emailAddress);
}
Example 12:使用命名参数
public interface UserRepository extends JpaRepository<User, Long> {
@Query("select u from User u where u.firstname = :firstname or u.lastname = :lastname")
User findByLastnameOrFirstname(@Param("lastname") String lastname,
@Param("firstname") String firstname);
}
Example 13:声明操作查询
@Modifying
@Query("update User u set u.firstname = ?1 where u.lastname = ?2")
int setFixedFirstnameFor(String firstname, String lastname);
springDataJpa的官方API的更多相关文章
- SpringdataJpa的官方API学习
(将对Springdata JPA的API 第三章之后进行解释) 一 . Core concepts(核心概念) 1.springdata中的中心接口是——Repository.这个接口没有什么重 ...
- 关于基本类型值和引用类型值以及Vue官方API的array.$remove(reference)
今天又是孟哥解惑. 数组里的元素也是指向内存地址么? 这个要分情况的. 无论a[0],a[2]在什么地方,只要其值是基本类型值,就是值的比较,只要其值是引用类型(对象),就是内存地址的比较. Vue官 ...
- 国内值得关注的官方API集合
项目地址:https://github.com/marktony/Awesome_API 本页仅收集国内部分官方API,如需查看其他版本,请点击这里. 目录 笔记 出行 词典 电商 地图 电影 后端云 ...
- 通过官方API结合源码,如何分析程序流程
通过官方API结合源码,如何分析程序流程通过官方API找到我们关注的API的某个方法,然后把整个流程执行起来,然后在idea中,把我们关注的方法打上断点,然后通过Step Out,从内向外一层一层分析 ...
- Springboot整合elasticSearch的官方API实例
前言:在上一篇博客中,我介绍了从零开始安装ElasticSearch,es是可以理解为一个操作数据的中间件,可以把它作为数据的存储仓库来对待,它具备强大的吞吐能力和计算能力,其基于Lucene服务器开 ...
- mongodb数据库下载链接,相关配置(转载),官方api
下载链接:http://dl.mongodb.org/dl/win32/x86_64 配置:http://blog.sina.com.cn/s/blog_685213e70101g81t.html 官 ...
- Ext js-02 -官方API文档使用
官方API文档地址: http://docs.sencha.com/extjs/6.5.3/classic/Ext.html 打开网页如下: 1.选择所使用的Ext js版本,后面offline do ...
- 图解DevExpress RichEditControl富文本的使用,附源码及官方API
9点半了,刚写到1.2. 该回家了,明天继续写完. 大家还需要什么操作,留言说一下,没有的我明天继续加. 好久没有玩DevExpress了,今天下载了一个玩玩,发现竟然更新到14.2.5了..我去 ...
- 【完全开源】知乎日报UWP版(上篇):界面设计、官方API分析
目录 说明 使用Fiddler分析android版API 部分效果图 关于源码 说明 在做博客园UWP版的时候其实就有做知乎日报的打算了,前段时间一直出差,在酒店里用Fiddler简单的分析了一下An ...
随机推荐
- 微信小程序学习笔记(一)--创建微信小程序
一.创建小程序 1.申请帐号.安装及创建小程序,请参照官方文档里面的操作 https://developers.weixin.qq.com/miniprogram/dev/. 小程序在创建的时候会要求 ...
- 最全的PS快捷键大全!
一.工具箱 01.(多种工具共用一个快捷键的可同时按[Shift]加此快捷键选取)02.矩形.椭圆选框工具 [M]03.裁剪工具[C]04.移动工具[V]05.套索.多边形套索.磁性套索[L]06.魔 ...
- 20165239 2018——2019Exp8 Web基础
Exp8 Web基础 基础问题回答 (1)什么是表单 •表单在网页中主要负责数据采集功能. •一个表单有三个基本组成部分: ◦表单标签,这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务 ...
- Django Shell 如何对数据库进行测试
Django 如何对数据库进行测试 Python manager.py shell Import django django.setup() from my_app.models import * 开 ...
- (1)sqlserver2017安装
本体 https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 图形管理工具ssm 文档 https://docs.microso ...
- 10 个轻松学会 CSS3 的优秀在线资源
本文包揽 CSS 的所有关键点,并且引入了最新的 CSS3 版本.这个先进的技术提供超级多的新标签和属性,使得 Web 设计构建创新更简单,帮助开发者创建具有新趋势,带有漂亮布局的 Web 页面.随着 ...
- SDL系列之 - 字体显示测试
例9.7:设计一个程序,初始化视频子系统,设置显示模式为640*480,表面的色深为16位,使用SDL_ttf库在屏幕上显示“Linux下TrueType字体显示示例”,字体大小为38,颜色为红色.设 ...
- css垂直居中设置
转载自大佬的文章:纯css实现垂直居中的几种方法(https://www.cnblogs.com/hutuzhu/p/4450850.html) 总结得很棒,有好几种方法自己没用过的,拷贝过来给自己看 ...
- 2018-6-17-win10-UWP-全屏
title author date CreateTime categories win10 UWP 全屏 lindexi 2018-06-17 17:51:19 +0800 2018-2-13 17: ...
- debian 下设置Ctrl+Alt+T快捷键打开终端
在设置->键盘->快捷键->自定义快捷键->添加 名称:Terminal 命令:gnome-terminal 再右上边点击后 按Ctrl +Alt +T