范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Spring认证中国教育管理中心ApacheCassandra的Spring数据教程八

  11.3.存储库删除查询
  上表中的关键字可与 结合使用delete…By以创建删除匹配文档的查询。 interface PersonRepository extends Repository {    void deleteWithoutResultByLastname(String lastname);    boolean deleteByLastname(String lastname); }
  删除查询返回查询是应用还是终止而不使用返回值void。 11.3.1.预测
  Spring Data 查询方法通常返回存储库管理的聚合根的一个或多个实例。但是,有时可能需要根据这些类型的某些属性创建投影。Spring Data 允许对专用返回类型进行建模,以更有选择地检索托管聚合的部分视图。
  想象一个存储库和聚合根类型,例如以下示例:
  示例 76. 示例聚合和存储库 class Person {    @Id UUID id;   String firstname, lastname;   Address address;    static class Address {     String zipCode, city, street;   } }  interface PersonRepository extends Repository {    Collection findByLastname(String lastname); }
  现在假设我们只想检索此人的姓名属性。Spring Data 提供什么方法来实现这一目标?本章的其余部分回答了这个问题。基于界面的投影
  将查询结果限制为仅名称属性的最简单方法是声明一个接口,该接口公开要读取的属性的访问器方法,如以下示例所示:
  示例 77. 用于检索属性子集的投影接口 interface NamesOnly {    String getFirstname();   String getLastname(); }
  这里的重要一点是这里定义的属性与聚合根中的属性完全匹配。这样做可以添加一个查询方法,如下所示:
  示例 78. 使用基于接口的投影和查询方法的存储库 interface PersonRepository extends Repository {    Collection findByLastname(String lastname); }
  查询执行引擎在运行时为每个返回的元素创建该接口的代理实例,并将对公开方法的调用转发到目标对象。
  在您Repository中声明一个覆盖基本方法的方法(例如,在 中声明CrudRepository,特定于商店的存储库接口或Simple…Repository)会导致对基本方法的调用,而不管声明的返回类型如何。确保使用兼容的返回类型,因为基本方法不能用于投影。一些商店模块支持@Query注释将覆盖的基本方法转换为查询方法,然后可用于返回投影。
  可以递归地使用投影。如果您还想包含一些Address信息,请为此创建一个投影接口并从 的声明中返回该接口getAddress(),如下例所示:
  示例 79. 用于检索属性子集的投影接口 interface PersonSummary {    String getFirstname();   String getLastname();   AddressSummary getAddress();    interface AddressSummary {     String getCity();   } }
  在方法调用时,address获取目标实例的属性并依次包装到投影代理中。封闭式投影
  其访问器方法都与目标聚合的属性匹配的投影接口被认为是封闭投影。以下示例(我们在本章前面也使用过)是一个封闭投影:
  示例 80. 闭合投影 interface NamesOnly {    String getFirstname();   String getLastname(); }
  如果使用封闭投影,Spring Data 可以优化查询执行,因为我们知道支持投影代理所需的所有属性。有关更多详细信息,请参阅参考文档中特定于模块的部分。打开投影
  投影接口中的访问器方法也可用于通过使用@Value注释计算新值,如以下示例所示:
  例 81. 一个开放的投影 interface NamesOnly {    @Value("#{target.firstname + " " + target.lastname}")   String getFullName();   … }
  支持投影的聚合根在target变量中可用。使用的投影界面@Value是开放式投影。在这种情况下,Spring Data 无法应用查询执行优化,因为 SpEL 表达式可以使用聚合根的任何属性。
  中使用的表达式@Value不应太复杂——您希望避免在String变量中编程。对于非常简单的表达式,一种选择可能是采用默认方法(在 Java 8 中引入),如以下示例所示:
  示例 82. 使用自定义逻辑的默认方法的投影界面 interface NamesOnly {    String getFirstname();   String getLastname();    default String getFullName() {     return getFirstname().concat(" ").concat(getLastname());   } }
  这种方法要求您能够纯粹基于投影接口上公开的其他访问器方法来实现逻辑。第二个更灵活的选择是在 Spring bean 中实现自定义逻辑,然后从 SpEL 表达式调用它,如以下示例所示:
  示例 83. 示例 Person 对象 @Component class MyBean {    String getFullName(Person person) {     …   } }  interface NamesOnly {    @Value("#{@myBean.getFullName(target)}")   String getFullName();   … }
  请注意 SpEL 表达式如何引用myBean和调用该getFullName(…)方法并将投影目标作为方法参数转发。由 SpEL 表达式评估支持的方法也可以使用方法参数,然后可以从表达式中引用这些参数。方法参数可通过Object名为的数组获得args。以下示例显示了如何从args数组中获取方法参数:
  示例 84. 示例 Person 对象 interface NamesOnly {    @Value("#{args[0] + " " + target.firstname + "!"}")   String getSalutation(String prefix); }
  同样,对于更复杂的表达式,您应该使用 Spring bean 并让表达式调用一个方法,如前所述。可空包装器
  投影接口中的 getter 可以使用可为空的包装器来提高空安全性。当前支持的包装器类型有:java.util.Optionalcom.google.common.base.Optionalscala.Optionio.vavr.control.Option
  示例 85. 使用可为空包装器的投影接口 interface NamesOnly {    Optional getFirstname(); }
  如果基础投影值不是null,则使用包装器类型的当前表示返回值。如果支持值是null,则 getter 方法返回所用包装器类型的空表示。基于类的预测 (DTO)
  定义投影的另一种方法是使用值类型 DTO(数据传输对象),这些 DTO 包含应该检索的字段的属性。这些 DTO 类型的使用方式与使用投影接口的方式完全相同,只是不发生代理并且不可以应用嵌套投影。
  如果存储通过限制要加载的字段来优化查询执行,则要加载的字段由公开的构造函数的参数名称确定。
  以下示例显示了一个投影 DTO:
  例 86. 一个投影 DTO class NamesOnly {    private final String firstname, lastname;    NamesOnly(String firstname, String lastname) {      this.firstname = firstname;     this.lastname = lastname;   }    String getFirstname() {     return this.firstname;   }    String getLastname() {     return this.lastname;   }    // equals(…) and hashCode() implementations }
  避免投影 DTO 的样板代码
  您可以使用Project Lombok显着简化 DTO 的代码,它提供了一个@Value注解(不要与@Value前面的接口示例中显示的Spring 的注解混淆)。如果使用 Project Lombok 的@Value注释,之前显示的示例 DTO 将变为以下内容:
  @Value   class  NamesOnly  { String firstname, lastname; }
  字段是private final默认的,并且该类公开了一个构造函数,该构造函数接受所有字段并自动获取equals(…)和hashCode()实现方法。
  动态投影
  到目前为止,我们已经使用投影类型作为集合的返回类型或元素类型。但是,您可能希望选择在调用时使用的类型(这使其成为动态的)。要应用动态投影,请使用如下例所示的查询方法:
  示例 87. 使用动态投影参数的存储库 interface PersonRepository extends Repository {     Collection findByLastname(String lastname, Class type); }
  这样,该方法可用于按原样或应用投影获取聚合,如以下示例所示:
  示例 88.使用具有动态投影的存储库 void someMethod(PersonRepository people) {    Collection aggregates =     people.findByLastname("Matthews", Person.class);    Collection aggregates =     people.findByLastname("Matthews", NamesOnly.class); }
  内容来源:Spring中国教育管理中心(Spring认证)
  2021年2月,VMware公司正式与北京中科卓望网络科技有限公司(以下简称:中科卓望)达成战略合作,授予其 Spring 中国教育管理中心,携手 VMware 全球最新 Spring技术和认证体系,帮助中国院校构建专业教学内容,全面赋能未来开发人
  #头条话题发明家##互联网行业哪个职位比较有前途#

ESPN勇士下赛季卫冕,快船成争冠大黑马!班凯罗最佳新秀近日,ESPN在对202223赛季总冠军及各大奖项进行了预测,其中上赛季成功夺下队史第7冠的勇士,被专家群认为,将有机会持续挑战两连冠。但值得一提的是,上赛季在当家球星伦纳德因伤整单场56分,信手拈来!身高2米01打控卫,公牛18顺位捡漏天赋怪?继夏季联赛后,公牛今年的首轮18号秀达伦特里,又统治了业余联赛。昨天参加JCrossover半职业赛,他全场轰下56分,进攻端展示出了非常丰富的手段。中投,突破,扣篮,后撤步,干拔输了比赛,没了人品!BLG02不敌V5,Bin赛后拒绝握手被喷惨哈喽大家好,这里是狗子,每天为您带来有趣的游戏资讯,喜欢的记得点个关注LPL夏季赛正在火热进行当中,常规赛进行到现在,局势已经渐渐明朗了起来,目前有6支队伍确定晋级季后赛,3支队伍输了比赛,没了人品!BLG02不敌V5,Bin赛后拒绝握手被喷惨哈喽大家好,这里是狗子,每天为您带来有趣的游戏资讯,喜欢的记得点个关注LPL夏季赛正在火热进行当中,常规赛进行到现在,局势已经渐渐明朗了起来,目前有6支队伍确定晋级季后赛,3支队伍超级人类超击突破Superpeople进不去游戏怎么办?进不去解决方法超级人类超击突破SUPERPEOPLE是由WonderPeople开发的全新模式的生存射击游戏。玩家可在12种具有特殊技能的超级战士中选择其中一种,相互进行激烈的竞争,并成为最后一超级人类超击突破Superpeople进不去游戏怎么办?进不去解决方法超级人类超击突破SUPERPEOPLE是由WonderPeople开发的全新模式的生存射击游戏。玩家可在12种具有特殊技能的超级战士中选择其中一种,相互进行激烈的竞争,并成为最后一visualstudiocodeC语言必备扩展插件visualstudiocode是Microsoft在2015年4月30日Build开发者大会上正式宣布一个运行于MacOSXWindows和Linux之上的,针对于编写现代WebvisualstudiocodeC语言必备扩展插件visualstudiocode是Microsoft在2015年4月30日Build开发者大会上正式宣布一个运行于MacOSXWindows和Linux之上的,针对于编写现代Web8款千元机盘点,最低1369iQOOZ5骁龙778G重193g6。67英寸120HzLCD居中挖孔屏后摄主摄6400万800万广角4cm微距前摄1600万44W充电5000毫安电池,8GB128GB存储某东18款千元机盘点,最低1369iQOOZ5骁龙778G重193g6。67英寸120HzLCD居中挖孔屏后摄主摄6400万800万广角4cm微距前摄1600万44W充电5000毫安电池,8GB128GB存储某东17月新能源汽车延续高速增长势头近日,中国汽车工业协会发布最新数据。数据显示,我国新能源汽车延续高速增长势头,7月新能源汽车销量同比增长1。2倍,17月市场占有率达到22。1。我国新能源汽车产销保持快速增长。具体
65岁孙亚芳任正非背后的华为女皇,有着铁血手腕的狠角色文财图说编辑财图说人们常说成功男人的背后,一定会有一个成功的女人,这话说得不无道理。毕竟男女搭配,干活不累。马云创建阿里巴巴,背后有彭蕾彭蕾张勇创建海底捞,背后有杨丽娟杨丽娟王健林2021年,今年阿里双十一怎么了?说起双11,年轻剁手党是最熟悉不过了,以往每年都有战报送达,今年很低调,只在小网站发发文贴,为什么这么低调,树大招风,枪打出头鸟,当年天天上热搜的马爸爸现在是低调做人,低调做事。阿帕奎奥克星马奎兹阿瓦雷兹永远不可能成为墨西哥最佳拳手文搏击江湖墨西哥超级巨星卡内罗阿瓦雷兹残暴KO普朗特之后,横扫168磅,成为这个级别无可争辩的霸主。阿瓦雷兹已经成为当今拳坛第一巨星,无论身价还是影响力,都是首屈一指。毫无疑问,阿微软市值(腾讯阿里美团)2截至11月9日盘前,微软市值位居全球第一,达到2。53万亿美元,中国市值前三的互联网企业,腾讯(5716亿美元)阿里(4408亿美元)美团(2130亿美元)三家企业的合计市值不及微看破不说破,是修养还是一种懦弱我们中国传统里,是最推崇含蓄的。看破但是不说破,是给大家留情面,留些后退之路,日后好相见。可是,相见了要怎么呢?继续说些无关痛痒面子上的话,然后浪费自己的精力去伪装么?为什么要把精生活的无奈都市的生活依然是一种迷惑一点点的阳光洒落在我的面庞,似乎在昭示着黎明的醒来。点点繁星纷扰着桂魄的离合,所呼唤的是一种黑暗。我无法传递时光的更迭与扭转,所诉说的不过是黑夜与清晨的黯然星辰大海之最爱最爱文左诗右香念你的风不知息停循着熟悉的一座城一条巷一个窗棂身影一动撒落的都是温柔的爱意朦胧最痴的爱情或是夜深时的悄然入梦是缘份的天空中前世就蕴着的情合意重痴念的噬骨的抚慰心灵的这1950年彭德怀对洪学智说自己不是志愿军,洪学智那你是怎么来的图丨洪学智前言抗美援朝中,彭德怀是志愿军总司令员,洪学智是副司令员,两个人在朝鲜战争中朝夕相处的日子,为他们建立了深厚的友谊。朝鲜的日子1950年6月,朝鲜内战爆发之后,美国派兵干为什么清朝会有军机处?清朝,是中国历史上最后一个封建王朝,共历12任皇帝,统治时期长达近三百年,在各个皇帝执政期间,或快或慢都促使国家的政治经济文化制度等各方面实现了发展。这里要说的是雍正皇帝在位的那些每日冷知识面粉也会爆炸1。竖中指的来历竖中指最早出现在英法百年战争末期。英国弓箭手让法军损失惨重,法军发誓在击败英军后,将英军弓箭手拉弓的中指斩断。但结果法军惨败。在法军撤退时,英军弓箭手纷纷伸出右手中双十一薅不到羊毛了苹果宣布取消iPhone13显示屏维修限制佳华云链企业赋能平台,关注科技工业互联网能源碳达峰碳中和等领域,欢迎关注。一Facebook爆料人批元宇宙潜在危害当地时间周二,曾为Facebook产品经理的爆料人Haugen对目