关于JPA方法名创建自动查询

JPA 的根据解析方法名称自动对接口进行实现的方法能节省大量的资源,以下对于解析规则进行列举哈

商品实体类

package com.dionren.zhaoxie.entity.trade;import com.dionren.mvc.entity.EntityBase;
import com.dionren.zhaoxie.entity.EntityShoeSku;
import io.swagger.annotations.ApiModelProperty;import javax.persistence.*;
import java.math.BigDecimal;/**** 单件货物,即SKU+鞋码+数量,单件货物不能单独存在,只能依附到配货单、订单、生产单中** 本类是单件货物的基类,单表继承方式,即所有子类数据都存到一个表中,通过goodsType来区分**/@Entity
@Table(name = "trade_goods")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "goodsType", discriminatorType = DiscriminatorType.STRING)
public class EntityTradeGoods extends EntityBase {@GeneratedValue(strategy= GenerationType.AUTO)@Idpublic Long     id;                 // 序列ID
@ApiModelProperty(value = "SKU的ID号")@ManyToOne(cascade = {CascadeType.REFRESH},fetch = FetchType.EAGER)@JoinColumn(name = "skuId")public EntityShoeSku sku;@ApiModelProperty(value = "进货价")@Column(precision=18, scale=2)public BigDecimal   priceIn;
//    public Double       priceIn;
@ApiModelProperty(value = "销售价")@Column(precision=18, scale=2)public BigDecimal   priceOut;
//    public Double       priceOut;
@ApiModelProperty(value = "尺码,按照mm标注")public Integer      size;@ApiModelProperty(value = "订货数量")public Integer      quantity;}

鞋子的SKU类

package com.dionren.zhaoxie.entity;import com.dionren.mvc.api.ApiJsonView;
import com.dionren.mvc.entity.EntityBase;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonView;
import io.swagger.annotations.ApiModelProperty;import javax.persistence.*;
import java.math.BigDecimal;
import java.util.Date;/*** Created by DionRen on 2015/9/28.** 鞋样的数据*/@Entity
@Table(name = "shoe_sku")
public class EntityShoeSku extends EntityBase {@JsonView(ApiJsonView.ListSummary.class)@GeneratedValue(strategy= GenerationType.AUTO)@Idpublic Long     id;                 // 序列ID
@ApiModelProperty("款型的id")public Long     shoePatternId;@ApiModelProperty("sku完整编码")@Column(length = 32)public String   skuCode;@ApiModelProperty(value = "sku编码的后两位")@Column(length = 2)public String   colorCode;@ApiModelProperty(value = "颜色的中文名称")@Column(length = 64)public String   colorName;@ApiModelProperty("sku所属的企业id,其实可以从patternId查询,但是为了加速查询")public Long     clientCompanyId;}

 

方法解析:(findByPriceOutAndSkuSkuCode)

1.首先去掉前缀,如find、findBy、read、readBy、get、getBy,剩下部分进行解析。并且如果方法的最后一个参数是 Sort 或者 Pageable 类型,也会提取相关的信息,以便按规则进行排序或者分页查询。

2.经过第一步,方法名剩下PriceOutAndSkuSkuCode,先判断 PriceOut(根据 POJO 规范,首字母变为小写,下同)是否为 PriceOut的一个属性,

3.1如果是对象的一个属性,并且遇到and,则将其作为查询条件中的一个继续步骤2,判断SkuSkuCode

3.2如果不是对象的一个属性遇到And,则报错:对象中没有对应的属性,And算是强制拆分。

3.3.如果是,并且也没有遇到and,则以将此属性作为对象,继续向下判断,既把SKU作为一个对象,向下找sku的属性

如上述:方法findByPriceOutAndSkuSkuCode就会拆分成根据priceOut和 sku.skuCode查询,

 

下面举例理解下上述:

findByPriceIn---->根据priceIn查询

findByPriceInAndPriceOut---->根据priceIn和PriceOut查询

findByPriceInAndSkuSkuCode--->根据priceIn丶skuid与sku表主键关联后sku表的skuCode查询

findByPriceInSkuSkuCode------>报错,会把priceIn作为一个对象根据priceIn的sku属性查询

正确应该为findByPriceInAndSkuSkuCode

findBySkuSkuCodeColorCode --->报错会议sku.skuCode.colorCode查询,

正确应该为findBySkuSkuCodeAndSkuColorCode

可能会存在一种特殊情况,比如 AccountInfo 包含一个 user 的属性,也有一个 userAddress 属性,此时会存在混淆。读者可以明确在属性之间加上 "_" 以显式表达意图,比如 "findByUser_AddressZip()" 或者 "findByUserAddress_Zip()"。


在查询时,通常需要同时根据多个属性进行查询,且查询的条件也格式各样(大于某个值、在某个范围等等),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 中的 "<",比如 findBySalaryLessThan(int max);
  • GreaterThan --- 等价于 SQL 中的">",比如 findBySalaryGreaterThan(int min);
  • IsNull --- 等价于 SQL 中的 "is null",比如 findByUsernameIsNull();
  • IsNotNull --- 等价于 SQL 中的 "is not null",比如 findByUsernameIsNotNull();
  • NotNull --- 与 IsNotNull 等价;
  • Like --- 等价于 SQL 中的 "like",比如 findByUsernameLike(String user);
  • NotLike --- 等价于 SQL 中的 "not like",比如 findByUsernameNotLike(String user);
  • OrderBy --- 等价于 SQL 中的 "order by",比如 findByUsernameOrderBySalaryAsc(String user);
  • Not --- 等价于 SQL 中的 "! =",比如 findByUsernameNot(String user);
  • In --- 等价于 SQL 中的 "in",比如 findByUsernameIn(Collection<String> userList) ,方法的参数可以是 Collection 类型,也可以是数组或者不定长参数;
  • NotIn --- 等价于 SQL 中的 "not in",比如 findByUsernameNotIn(Collection<String> userList) ,方法的参数可以是 Collection 类型,也可以是数组或者不定长参数;

 

 

以上与方法解析可以合并用:

举例

findBySkuSkuCodeAndPriceInLessThanOrderOrderByPriceInAsc("10123",200);

查询所有Sku的skuCode等于10123,priceIn小于200的货物列表,并且按升序排列

转载于:https://www.cnblogs.com/xuyuanjia/p/5795621.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/573232.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

查到应看的网址

http://www.zhangxinxu.com/wordpress/2010/12/div-textarea-height-auto/ > div模拟textarea文本域轻松实现高度自适应 https://www.web-tinker.com/article/20054.html 一个很特殊的事件beforeunload(点击确定离开,取消继续) http://www.jb51.net/article/39486.htm ifr…

c语言程序前言,C语言 程序代码编写规范前言

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼一个好的程序编写规范是编写高质量程序的保证。清晰、规范的源程序不仅仅是方便阅读&#xff0c;更重要的是能够便于检查错误&#xff0c;提高调试效率&#xff0c;从而最终保证软件的质量和可维护性。说明l 本文档主要适用于刚刚开…

c语言去字母的其中三个,请问这个用c怎么做:输入一串字符,分别统计其中数字和字母的个数...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#includemain(){int acount0,bcount0,ccount0,dcount0;char a;printf("请输入一行字符:\n");a getchar();while (a !\n){switch (a){caseq:casew:casee:caser:caset:casey:caseu:casei:caseo:casep:casea:cases:cased:c…

[CF706D]Vasiliy's Multiset(异或字典树)

题目链接&#xff1a;http://codeforces.com/contest/706/problem/D 1 /*2 ━━━━━┒ギリギリ♂ eye&#xff01;3 ┓┏┓┏┓┃キリキリ♂ mind&#xff01;4 ┛┗┛┗┛┃&#xff3c;○&#xff0f;5 ┓┏┓┏┓┃ /6 ┛┗┛┗┛┃ノ)7 ┓┏┓┏┓┃8 ┛┗┛┗┛┃9 ┓┏…

信号与系统与c语言,2016年安徽医科大学生命科学学院信号系统与C语言程序设计之信号与系统复试笔试仿真模拟题...

一、计算题1&#xff0e; 已知系统的算子方程及初始条件如下&#xff0c;求其零输入响应。【答案】(l )由算子方程可以得出其系统的传输函数为由因此代入初始条件和&#xff0c;解出&#xff1a;求得特征根为&#xff1a;所以零输入响应为(2)由算子方程可以得出其系统的传输函数…

android状态栏

郭林《Android状态栏微技巧&#xff0c;带你真正理解沉浸式模式 》转载于:https://www.cnblogs.com/hsji/p/5803527.html

android 自定义属性 双向绑定,如何解决:“在使用自定义视图实现双向数据绑定时,找不到属性’android:text’”的getter?...

我经历了许多类似的问题,但没有一个答案似乎解决了我的问题.我实现了一个自定义EditText,我希望与双向数据绑定兼容.问题是,每次我尝试编译时都会收到错误&#xff1a;Error:java.lang.IllegalStateException: Failed to analyze: android.databinding.tool.util.LoggedErrorEx…

linux用grep查找包含两个关键字的命令

linux用grep查找包含两个关键字的命令 http://zhidao.baidu.com/link?urlVsFxeJXmU7W7hy1UH7eT6QAbUsVz9Ru2ABPuWYHWm4kBvE0ccLDwcvFi821FT5uWvgjJkNEgx80ICQaaR3HxMCr1BnLe8naTKZUwxseZ4qe http://www.linuxidc.com/Linux/2016-01/127944.htm ##查询历史记录 http://blog.sin…

Ext JS 6学习文档-第6章-高级组件

Ext JS 6学习文档-第6章-高级组件 高级组件 本章涵盖了高级组件&#xff0c;比如 tree 和 data view。它将为读者呈现一个示例项目为 图片浏览器&#xff0c;它使用 tree 和 data view 组件。以下是本章将要讨论的主题&#xff1a; TreesData views拖放图片浏览器 — 一个示例项…

android没有apk文件怎么打开方式,ios怎么打开apk文件,安卓无法打开apk文件

?  许多win7系统小伙伴在打开电脑中&#xff0c;经常会看到一些文件格式自己不知道是什么以及不知道要怎么打开&#xff0c;比如apk文件&#xff0c;APK是Android Package的缩写&#xff0c;即Android安装包&#xff0c;几乎所有的安卓应用程序都是这种格式&#xff0c;那么…

android屏幕基础知识

首先&#xff0c;先来上一张图&#xff0c;看看android屏幕分辨率的占比情况 什么是dp&#xff0c;dip&#xff0c;dpi&#xff0c;sp、px ?之间的关系是什么&#xff1f; px&#xff1a;构成图像的最小单位 dp/dip&#xff1a;密度无关像素 以160dpi为基准 1dp1px sp&#xf…

Android模糊查询excel文件内容,【excel】模糊查询关键字

求Excel大神指点迷津。如何批量模糊查找和替换。例如&#xff0c;A1&#xff1a;A100,每个单元格有一段文字。B1:B200,每个单元格有一个关键词。我的目的是在A1:A100中查找包含B1的单元格&#xff0c;找到后把这个单元格内容换成B1的内容。然后查找B2替换B2...一直到B200解决办…

日语的学习

1. 50 音图与假名 日本&#xff1a;に&#xff08;ni&#xff09;は&#xff08;ho&#xff09;ん&#xff08;nn&#xff09;谢谢&#xff1a;あ&#xff08;a&#xff09;り&#xff08;ri&#xff09;が&#xff08;ga&#xff09;と&#xff08;to&#xff09;う&#xff0…

android 翻转切换view,Android ViewFlipper翻转视图使用详解

简介ViewFlipper是Android自带的一个多页面管理控件且可以自动播放&#xff01;它和ViewPager有所不同&#xff0c;ViewPager继承自ViewGroup&#xff0c;是一页一页的&#xff0c;可以带动画效果&#xff0c;可以兼容低版本&#xff1b;而ViewFlipper继承ViewAnimator&#xf…

拓扑学初步

拓扑&#xff08;Topology&#xff09;原本是一个数学概念&#xff0c;描述的是几何图形或空间在连续改变形状后还能保持不变的性质。2016 年度的诺贝尔物理学奖颁给的三位物理学家&#xff0c;正是凭借他们在物理学中引入了拓扑的概念。0. 基本概念 & 定义 同胚&#xff1…

android 京东白条支付,京东网银钱包安卓版上线:整合京东白条和小金库

京东金融网银钱包移动版上线 京东账号可直接登录【TechWeb报道】4月1日消息&#xff0c;京东金融今日宣布网银钱包客户端正式在Android平台上线。网银钱包客户端近期也将登录苹果应用商店&#xff0c;用户使用京东账号将可以直接登录。据悉&#xff0c;网银钱包客户端是京东金融…

android 缓存头像,android 实现类似微信缓存和即时更新好友头像示例

引言使用微信时我们会发现&#xff0c;首次进入微信的好友列表时&#xff0c;会加载好友头像&#xff0c;但是再次进入时&#xff0c;就不用重新加载了&#xff0c;而且其他页面都不用重新加载&#xff0c;说明微信的好友头像是缓存在本地的&#xff0c;然后好友修改头像后&…

JQuery 之 跳出循环

1、跳出each循环  return false 跳出循环 return true 进入下一个循环2、跳出for循环  break;直接退出for这个循环。这个循环将不再被执行&#xff01;  continue;直接跳出本次for循环。下次继续执行。  return语句就是用于指定函数返回的值。即使函数主体中还有其他语…

android包结构规范,【Android】Android产品-开发规范

前言为什么需要开发规范&#xff1f;编码规范对于程序员而言尤为重要&#xff0c;有以下几个原因&#xff1a;1)一个软件的生命周期中&#xff0c;80%的花费在于维护2)几乎没有任何一个软件&#xff0c;在其整个生命周期中&#xff0c;均由最初的开发人员来维护3)编码规范可以改…

JavaScript语法(二)

函数&#xff1a;完成某项特定的功能。 函数的四要素&#xff1a;名称、输入、返回值、加工。 定义函数:function&#xff08;定义&#xff09; 函数的名字&#xff08;形参&#xff09;{ 函数体&#xff08;加工&#xff09;} 文本框加 按钮&#xff08;调用&#xff09; …