春・データ・リポジトリJPA方式のカスタムルール

ときにメソッドの名前解決を行うための春のデータJPAフレームワークは、最初のメソッド名の接頭辞は、findByを見つける読んで、readBy、取得、getBy、その解決のために休むように、過剰をオフに傍受されます。
次のクエリ作成する場合:findByUserDepUuid()のメソッドを解析する際、フレームは、まずfindByを除去し、その後、残りの属性を分析し、照会エンティティは、ドキュメントを想定しています
1:最初のエンティティの属性かどうかを照会するuserDepUuid(仕様に従ってPOJO、最初の文字の小文字)を決定し、もしそうであれば、属性クエリに応じて、この属性がないと、第二のステップは続きます。
2:左から右へ、最初の大文字の文字列ここでUUID)の最初に取られ、その後、エンティティのクエリ文字列の属性の残りの部分かどうかをチェックし、もしそうであれば、その属性のクエリに応じて、そうでない場合そして最後に、エンティティの属性を照会するためにユーザを想定し、このプロパティは、第二段階は、右から左に取られ続けるために繰り返されます。
3:もしあれば残りの部分は、その後、(DepUuid)処理された第一のタイプの属性に対応するユーザがdepUuidを有するかどうかを判定する、クエリに係る方法は、最終的に「Doc.user.depUuid」値であることを示し、そうでない場合はステップに従って続行しますルール2は右から左へと取られ、値「Doc.user.dep.uuid」に基づいて最終的なクエリを表します。
4:userDepも特性を有し、そのようなユーザ属性ドキュメントであって、特殊なケースがあるかもしれない、そこに混合されるであろう。こうした「)findByUser_DepUuid」として明示的な表現という意味で、「_」との間に明確なプラスのプロパティ、または「findByUserDep_uuid()」
关键词    样品    JPQL片段
IsNotNull    findByAgeNotNull    ...其中x.age 不为空【年龄不为空】
喜欢    findByNameLike    ...其中x.name是什么样的?【模糊查找是......】
不喜欢    findByNameNotLike    ...其中x.name不喜欢?【模糊查找不是......】
从...开始    findByNameStartingWith    ...其中x.name类似?(参数绑定附加%)【模糊匹配,类似使用%结尾】
EndingWith    findByNameEndingWith    ...其中x.name类似于?(参数与预置%绑定)【模糊匹配,类似使用%开始】
含    findByNameContaining    ...其中x.name like?(参数绑定在%中)[模糊匹配,类似使用%开头和结尾]
排序依据    findByAgeOrderByName    ...其中x.age =?order by x.name desc 【查找后排序】
不    findByNameNot    ...其中x.name <>?【查找列不是...的】
在    findByAgeIn    ...哪里x.age在?
NotIn    findByAgeNotIn    ...其中x.age不在?
真正    findByActiveTrue    ...其中x.avtive = true
产品嫁接    findByActiveFalse    ...其中x.active = false
和     findByNameAndAge    ...其中x.name =?和x.age =?2
要么    findByNameOrAge    ...其中x.name =?或x.age =?2
之间    findBtAgeBetween    ...其中x.age之间?和?2
少于    findByAgeLessThan    ...其中x.age <?
比...更棒    findByAgeGreaterThan    ...其中x.age>?
在那之后    ...    ...
一片空白    findByAgeIsNull    ...其中x.age为空

自定义查找实例:

    /**
     * 根据id查用户
     **/
    List<User> findByIdOrName(Long id,String name);
 
    /**
     * 根据id查用户
     **/
    User queryXXXXByName(String name);
 
    /**
     * 根据id查name
     **/
    User readNameById(Long id);
 
    /**
     * 查年龄为10岁的学生
     **/
    List<User> getByAge(int age);

三,Spring Data JPA分页查询:

    /**
     * 分页查询左右用户
     * @param pageable
     * @return
     */
    Page<User> findAll(Pageable pageable);
 
    /**
     * 分页查询id不是传入id的用户
     * @param id
     * @param pageable
     * @return
     */
    Page<User> findByIdNot(Long id,Pageable pageable);

【注意】分页查询,的结果页,,页接口继承自切片,这个接口有以下方法

public interface Slice<T> extends Iterable<T> {
    int getNumber();//返回当前页码
 
    int getSize();//返回当前页大小(可能不是一整页)
 
    int getNumberOfElements();//返回当前的元素数量
 
    List<T> getContent();//返回当前页的内容(查询结果)
 
    boolean hasContent();//判断是否有内容存在
 
    Sort getSort();//返回排序方式
 
    boolean isFirst();//判断是不是第一页
 
    boolean isLast();//判断是不是最后一页
 
    boolean hasNext();//判断是否还有下一页
 
    boolean hasPrevious();//判断是否上一页
 
    Pageable nextPageable();//返回下一页
 
    Pageable previousPageable();//返回上一页,如果当前已经是第一个,则返回,请求前一个可以是【null】。在调用此方法之前,客户端应该检查是否收到一个非值。
 
    <S> Slice<S> map(Converter<? super T, ? extends S> var1);//用给定的映射,映射当前的内容,为Slice
}
方法名    关键字    SQL
findById         其中id =?
findByIdIs    是    其中id =?
findByIdEquals    等于    其中id =?
findByNameAndAge    和    where name =?和年龄=?
findByNameOrAge    要么    where name =?或年龄=?
findByNameOrderByAgeDesc    按顺序排列    where name =?按年龄顺序排列
findByAgeNotIn    不在    年龄不在(?)
findByStatusTrue    真正    where status = true
findByStatusFalse    假    其中status = false
findByAgeBetween    之间    年龄在哪?和?
findByNameNot    不    名称<>?
findByAgeLessThan    少于    年龄<?
findByAgeLessThanEqual    LessThanEqual    年龄<=?
findByAgeGreaterThan    比...更棒    年龄>?
findByAgeGreaterThanEqual    GreaterThanEqual    年龄> =?
findByAgeAfter    后    年龄>?
findByAgeBefore    之前    年龄<?
findByNameIsNull    一片空白    其中名称为空
findByNameNotNull    不为空    其中名称不为空
findByNameLike    喜欢    哪里的名字像?
findByNameNotLike    不喜欢    哪里的名字不像?
findByNameStartingWith    从...开始    名称如'?%'
findByNameEndingWith    EndingWith    名称如'%?'
findByNameContaining    含    名称如'%?%'

代码中几个复杂的。 
findByNameAndAgeAndSex:表示where name =?和年龄=?和性=? 
findByNameInAndAgeIsNull:表示(?)中的名称和年龄为null  
findByNameAndAgeInAndSexIn:表示where name =?年龄(?)和性别(?)

可以看出关键字是可以连用的,查找都是用findBy +表中列名,表的列名还有关键字等等拼接时,它们的首字母要大写。  


 

 

おすすめ

転載: www.cnblogs.com/h-c-g/p/10980469.html