Spring Data JPA 简单查询--方法定义规则(详解)

一、常用规则速查

关键词 意思
And 并且
Or
Is,Equals 等于
Between 两者之间
LessThan 小于
LessThanEqual 小于等于
GreaterThan 大于
GreaterThanEqual 大于等于
After 之后(时间) >
Before 之前(时间) <
IsNull 等于Null
IsNotNull,NotNull 不等于Null
Like 模糊查询。查询件中需要自己加 %
NotLike 不在模糊范围内。查询件中需要自己加 %
StartingWith 以某开头
EndingWith 以某结束
Containing 包含某
OrderBy 排序
Not 不等于
In 某范围内
NotIn 某范围外
True
False
IgnoreCase 忽略大小写

二、Spring Data 解析方法名--规则说明

1、规则描述

按照Spring data 定义的规则,查询方法以find|read|get开头(比如 findfindByreadreadBygetgetBy),涉及条件查询时,条件的属性用条件关键字连接,要注意的是:条件属性首字母需大写。框架在进行方法名解析时,会先把方法名多余的前缀截取掉,然后对剩下部分进行解析。

如果方法的最后一个参数是 Sort 或者 Pageable 类型,也会提取相关的信息,以便按规则进行排序或者分页查询。

2、举例说明

比如 findByUserAddressZip()。框架在解析该方法时,首先剔除 findBy,然后对剩下的属性进行解析,详细规则如下(此处假设该方法针对的域对象为 AccountInfo 类型):

先判断 userAddressZip (根据 POJO 规范,首字母变为小写,下同)是否为 AccountInfo 的一个属性,如果是,则表示根据该属性进行查询;如果没有该属性,继续第二步;

从右往左截取第一个大写字母开头的字符串(此处为 Zip),然后检查剩下的字符串是否为 AccountInfo 的一个属性,如果是,则表示根据该属性进行查询;如果没有该属性,则重复第二步,继续从右往左截取;最后假设 userAccountInfo 的一个属性;

接着处理剩下部分(AddressZip),先判断 user 所对应的类型是否有 addressZip 属性,如果有,则表示该方法最终是根据 "AccountInfo.user.addressZip" 的取值进行查询;否则继续按照步骤 2 的规则从右往左截取,最终表示根据 "AccountInfo.user.address.zip" 的值进行查询。

可能会存在一种特殊情况,比如 AccountInfo 包含一个 user 的属性,也有一个 userAddress 属性,此时会存在混淆。读者可以明确在属性之间加上 "_" 以显式表达意图,比如 "findByUser_AddressZip()" 或者 "findByUserAddress_Zip()"。(强烈建议:无论是否存在混淆,都要在不同类层级之间加上"_" ,增加代码可读性)

三、一些情况

1、当查询条件为null时。

举例说明如下:

实体定义:

对于一个客户实体Cus,包含有name和sex,均是String类型。

查询方法定义:

List<Cus> findByNameAndSex(String name,String sex);

使用时:

dao.findByNameAndSex(null, "男");

后台生成sql片断:

where (cus0_.name is null) and cus0_.sex=?

结论:当查询时传值是null时,数据库中只有该字段是null的记录才符合条件,并不是说忽略这个条件。也就是说,这种查询方式,只适合于明确查询条件必须传的业务,对于动态查询(条件多少是动态的,例如一般的查询列表,由最终用户使用时决定输入那些查询条件),这种简单查询是不能满足要求的。

2、排序

List<Cus> findBySexOrderByName(String sex); //名称正序(正序时,推荐此方式,简单)
List<Cus> findBySexOrderByNameAsc(String sex); //名称正序(效果同上)
List<Cus> findBySexOrderByNameDesc(String sex); //名称倒序

MAC JDK版本切换

通过命令'jdk7', 'jdk8'轻松切换到对应的Java版本:

  • 1.首先安装所有的JDk



    • Mac自带了的JDK6,安装在目录:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/下。
    • JDK7,JDK8,JDK9则需要自己到Oracle官网下载安装对应的版本。自己安装的JDK默认路径为:/Library/Java/JavaVirtualMachines/jdk1.8.0.jdk
  • 2.配置
    编辑~/.zshrc文件(我是zsh的shell,所有配置该文件,如果是bash,则配置.bash_profile)

在最下面加入下面的代码

#设置jdk版本
export JAVA_7_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home
export JAVA_8_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home


#alias命令动态切换JAVA_HOME的配置
alias jdk7='export JAVA_HOME=$JAVA_7_HOME'
alias jdk8='export JAVA_HOME=$JAVA_8_HOME'


export JAVA_HOME=$JAVA_7_HOME

输入完成后保存,然后执行下面命令

source ~/.zshrc
  • 3.验证

使用:jdk7、jdk8即可切换jdk版本

java反编译

jad.exe文件,将它设置到环境变量path,(复制到 %JAVA_HOME%\BIN的目录下)
或者拷到其他已经了环境变量path的地方,或者在cmd中转到此文件目录下。

简单的方法是

jad -o -r -d F:\src -s java F:\classes\**\*.class 

-o - overwrite output files without confirmation (default: no) 无需确定覆写文件

-r - restore package directory structrure 恢复包目录结构

-s - output file extension (by default '.jad') 如果不设置为-s java,则默认扩展名为.jad

其他的,F:\classes***.class 中的两颗接连的星,表示任意层次的子目录

osquery -Facebook开源的一款基于SQL的操作系统检测和监控框架

官网:https://osquery.io/

osquery是一款面向OSX和Linux的操作系统检测框架。它将操作系统暴露为一个高性能的关系型数据库,允许用户编写SQL查询查看操作系统数据。在osquery中,SQL表代表像下面这样的抽象概念:

  • 正在运行的进程
  • 已加载的内核模块
  • 打开的网络连接

osqueryi是osquery中的交互式查询控制台。通过它,用户可以执行像下面这样的语句,从SQL表中获取操作系统中正在监听所有端口的进程的pid、名称和端口:

osquery> SELECT DISTINCT
    ...>   process.name,
    ...>   listening.port,
    ...>   process.pid
    ...> FROM processes AS process
    ...> JOIN listening_ports AS listening
    ...> ON process.pid = listening.pid
...> WHERE listening.address = '0.0.0.0';

osquery中已经存在许多表,用户可以在osquery命令行中使用“.table”命令列出所有表,而且还可以根据需要创建新表。有了这些表,用户可以:

  • 根据需要执行查询以查看操作系统的状态
  • 通过调度器执行查询以监控分布式主机操作系统
  • 使用osquery API从自定义应用程序中发起查询

除了上文提及的特性及易于安装外,osquery还具有如下特性:

osqueryd——这是osquery中的一个分布式主机监控守护进程,它性能高,内存占用小,允许用户在整个基础设施上执行查询。
跨平台——虽然osquery利用了非常底层的操作系统API,但它允许用户在Ubuntu、Cent OS和Mac OS X上构建并使用它。
详细的内部部署文档
此外,osquery代码库是由高性能的模块化组件构成,并且其公共API有清楚的文档记录。这些组件可以组合出新的、有趣的应用程序和工具。

安装以后可以使用sql语法去查询系统的信息,感觉以后可能会用的到,备份一下

phpstorm 配置

<p>一些技巧<br/>
http://phpstorm.tips/tips</p>

<h2 id="toc_0">修改 editor 主题</h2>

<p>默认的主题不太多,可以自己添加自定义的主题。</p>

<p>网站 Daylerees 有许多主题的预览,选择自己喜欢的主题;</p>

<p>所有的主题可以在 Github 上找到,选择 jetbrains 文件夹,查看自己喜欢的主题;</p>

<p>查看该主题的 raw,复制浏览器中的地址,比如:https://raw.githubusercontent.com/daylerees/colour-schemes/master/jetbrains/peacock.icls;</p>

<p>在 mac 中,打开 ~/Library/Preferences/PhpStorm2016.3/colors 文件夹,使用 wget 下载该主题;</p>

<p>Windows 中的目录好像是 Users/用户名/PhpStorm2016.3/config/colors;</p>

<p>重启 PhpStrom,在 Preferences>Editor>Color&Fonts 中选择指定的主题;</p>

<h2 id="toc_1">修改 Project 栏的颜色</h2>

<p>在修改了 editor 的主题之后,左边的 Project 栏的颜色跟 editor 不一致,可以使用 color 插件来实现一致的主题。</p>

<p>打开 Preferences,选择 Plugin,打开 Browse repositories;</p>

<p>搜索 Color ide 插件,安装;</p>

<p>重启 PhpStorm,这样 Project 栏和 Editor 的主题颜色已经一致;</p>

<h2 id="toc_2">修改 Phpstorm 默认的文件类型图标</h2>

<p>打开 Preferences>Plugin,点击 Browse repositories 然后搜索 Material Theme UI;</p>

<p>配置清单:</p>

<p>主题-material default 【默认自带】</p>

<p>字号:12</p>

<h1 id="toc_3">phpstorm 配置</h1>

<p>一些技巧<br/>
http://phpstorm.tips/tips</p>

<h2 id="toc_4">修改 editor 主题</h2>

<p>默认的主题不太多,可以自己添加自定义的主题。</p>

<p>网站 Daylerees 有许多主题的预览,选择自己喜欢的主题;</p>

<p>所有的主题可以在 Github 上找到,选择 jetbrains 文件夹,查看自己喜欢的主题;</p>

<p>查看该主题的 raw,复制浏览器中的地址,比如:https://raw.githubusercontent.com/daylerees/colour-schemes/master/jetbrains/peacock.icls;</p>

<p>在 mac 中,打开 ~/Library/Preferences/PhpStorm2016.3/colors 文件夹,使用 wget 下载该主题;</p>

<p>Windows 中的目录好像是 Users/用户名/PhpStorm2016.3/config/colors;</p>

<p>重启 PhpStrom,在 Preferences>Editor>Color&Fonts 中选择指定的主题;</p>

<h2 id="toc_5">修改 Project 栏的颜色</h2>

<p>在修改了 editor 的主题之后,左边的 Project 栏的颜色跟 editor 不一致,可以使用 color 插件来实现一致的主题。</p>

<p>打开 Preferences,选择 Plugin,打开 Browse repositories;</p>

<p>搜索 Color ide 插件,安装;</p>

<p>重启 PhpStorm,这样 Project 栏和 Editor 的主题颜色已经一致;</p>

<h2 id="toc_6">修改 Phpstorm 默认的文件类型图标</h2>

<p>打开 Preferences>Plugin,点击 Browse repositories 然后搜索 Material Theme UI;</p>

<p>配置清单:</p>

<p>主题-material default 【默认自带】</p>

<p>字号:12</p>

<p>View菜单<br/>
<br/>
</p>

<p>window菜单<br/>
</p>

<p>运行配置<br/>
</p>

phpstorm配置.zip