spring data jpa作成方法名を簡単に調べます.


spring data jpaはインタフェースの中で規定の文法によって一つの方法を作成して問い合わせることができます.spring data jpa基礎インターフェースの中で、Crude Repositoryの中でfindOne、save、deleteなど、自分でどのように必要に応じて一つの方法を作成して調べますか?
  • 最も一般的な方法は、声明の一つのインターフェースがCrudRepositoryまたはPaging AndSortingRepository、JpaRepository、Repository
  • に継承されています.
    public interface TaskDao extends JpaRepository<Task,Long>{
    
    }
    またはコメントを利用して、表名をJpaRepositoryに継承します.例えば、以下の2つは等価です.
    @RepositoryDefinition(domainClass = Task.class, idClass = Long.class) 
    public interface TaskDao{
    
    }
    public interface TaskDao extends JpaRepository<Task,Long>{
    
    }
    CrudRepositoryまたはPaging AndSortingRepositoryを継承して、JpaRepositoryはいくつかのよく使われている方法を抽出します.もしあなたがspring data jpaをカスタマイズしてくれたら、JpaRepositoryに継承して、いくつかの方法をあなたのインターフェースにコピーして、選択的にいくつかの方法を選ぶことができます.
    @NoRepositoryBean
    interface MyBaseRepository<T, ID extends Serializable> extends Repository<T, ID> {
    
      T findOne(ID id);
    
      T save(T entity);
    }
    
    interface TaskDao extends MyBaseRepository<Task, Long> {
    
    }
  • 規範に従ってクエリ方法を作成し、通常はJavaラクダ峰式の表記規範に従っていくつかの特定のキーワードを追加します.例えば、任務名来を通じてタスクエンティティ類リスト
  • を取得したいです.
    属性を使ってタスクリストを取得します.
    interface TaskDao extends MyBaseRepository<Task, Long> {
      List findByName(String name);
    }
    andとorを利用してタスクリストを取得します.
    interface TaskDao extends JpaRepository<Task, Long> {
      List findByNameAndProjectId(String name,Long projectId);
      List findByNameOrProjectId(String name,Long projectId);
    }
    Pagease、Sort、Sliceを利用して、改ページのタスクリストと並べ替えを取得します.
    interface TaskDao extends JpaRepository<Task, Long> {
      Page findByName(String name,Pageable pageable);
      Slice findByName(String name, Pageable pageable);
      List findByName(String name, Sort sort);
    }
    Dispinctを利用して重いものに行く.
    interface TaskDao extends JpaRepository<Task, Long> {
        List findDistinctTaskByNameOrProjectId(String name, Long projectId);
    }
    OrderByを利用して並べ替えを行います.
    interface TaskDao extends JpaRepository<Task, Long> {
        List findByNameOrderByProjectIdDesc(String name, Long projectId);
    }
    TopとFirstを利用して制限データを取得する.
    interface TaskDao extends JpaRepository<Task, Long> {
        User findFirstByOrderByLastnameAsc();
    
    Task findTopByOrderByNameDesc(String name);
    
    Page queryFirst10ByName(String name, Pageable pageable);
    
    Slice findTop3ByName(String name, Pageable pageable);
    
    List findFirst10ByName(String name, Sort sort);
    
    List findTop10ByName(String name, Pageable pageable);
    }
    では、spring data jpaはどうやってこれらの仕様で検索文に組み立てられますか?
    Spring Data JPAフレームは、メソッド名解析を行う際に、先にメソッド名の余分なプレフィックスを切り取ります.例えば、find、findBy、read、readBy、get、getByのように、残りの部分を解析します.
    もし次のようなクエリーを作成するならば、フレームワークはこの方法を解析する際に、まずfindByを外して、残りの属性を解析し、クエリエンティティがDocであると仮定する.
  • は、まずtaskyProject Name(POJO仕様によると、頭文字が小文字になる)が照会エンティティの属性であるかどうかを判断し、もしそうであれば、その属性に基づいて照会することを示す.属性がない場合は、ステップ2を続けます.
  • は、最初の大文字の先頭の文字列を右から左に切り取り、ここでNameとする.その後、残りの文字列が照会エンティティの属性であるかどうかを確認する.属性がない場合は、第二ステップを繰り返し、右から左へ切り取り続けます.最後に、taskが照会エンティティPersonの属性であると仮定する.
  • は次に、残りの部分を処理し、taskに対応するタイプがprojectName属性があるかどうかを判断し、ある場合は、この方法は最終的には「Person.task.projectName」の値に基づいて照会するという意味である.そうでなければ、引き続きステップ2の規則に従って右から左へ切り取り、最終的に「Person.sk.project.projectname.project.name.name.name.name.name.name.name.の値を検索します.
  • は、たとえばPersonがtaskの属性を含む場合もあります.プロジェクトNameの属性もあります.この場合、混淆があります.属性の間に「u」を加えて明示的に意図を表現することができます.例えば、「findByTask_uProject Name()」
  • .
    サポートされている標準表現は、ここでUserとして実体を持ち、first NameとlastName、ageがあります.
    表式

    hqlクエリ文
    And
    findByLastname AndFirstname
    …where x.lastname=?1 and x.firstname=?2
    Or
    findByLastname Or Firstname
    …where x.lastname=?1 or x.firstname=?2
    Is,Equals
    findByFirstname,findByFirstnameIs,findByFirstnamequal
    …where x.firstname=1?
    Between
    findByStartDateBetween
    …where x.startDate between 1?and?2
    LessThan
    findByAgeLessThan
    …where x.ageLessThanEqual
    findByAgeLessThanEqual
    …where x.age⇐?1
    グレア・ティーン
    findByAgeGreterThan
    …where x.age>?1
    Greter ThanEqual
    findByAgeGreter ThanEqual
    …where x.age>=?1
    After
    findByStartDateAfter
    …where x.startDate>?
    Before
    findByStartDateBefore
    …where x.startDateIsNull
    findByAgeIsNull
    …where x.age is null
    Is NotNull,NotNull
    findByAge(Is)NotNull
    …where x.age not null
    Like
    findBy FirstnameLike
    …where x.firstname like?1
    Not Like
    findBy Firstname NotLike
    …where x.firstname not like?1
    スターリングWith
    findBy Firstnament With
    …where x.firstname like?1(parameter bound with apended%)
    Ending With
    findBy Firstnamen With
    …where x.firstname like?1(parameter bound with prepended%)
    コンタニング
    findBy FirstnameContining
    …where x.firstname like?1(parameter bound wrapped in%)
    OrderBy
    findByAgeOrderByLastnameDesc
    …where x.age=?1 order by x.lastname desc
    Not
    findByLastname Not
    …where x.lastname<>?1
    In
    findByAgeIn(Collection agems)
    …where x.age in?1
    NotIn
    findByAgeNotIn(Collection age)
    …where x.age not in?1
    True
    findByActive True()
    …where x.active=true
    False
    findByActive False()
    …where x.active=false
    IgnoreCase
    findBy FirstnamegnoreCase
    …where UPER(x.firstame)=UPER(?1)
    これらの照会はすべて単一の表だけを調べています.複数の表の複雑な調べなら、まだ改ページはどうやって調べたらいいですか?今度もう一度検討してみます.