2017-01-22 20 views
2

私はCrudrepositoryについて読んでいました。これは、特定のタイプのリポジトリでの一般的なCRUD操作のインターフェイスです。CrudRepositoryカスタムメソッドの実装?

しかし、カスタムインターフェイスを作成してCrudRepositoryを拡張することができます。

私はこの例をオンラインで見て、どこにでも黙示を提供していないことを見ました。

Sample:

@Transactional 
public interface UserDao extends CrudRepository<User, Long> { 

    /** 
    * Return the user having the passed email or null if no user is found. 
    * 
    * @param email the user email. 
    */ 
    public User findByEmail(String email); 

} 

引数は、列名または「findBy」+ COLUMNNAMEのようなメソッド名と同じ名前にする必要がありますか?

+0

はい。そのdb列名で注釈を付けられたフィールド名でなければならないという訂正です。たとえば、db_column名をwork_emailとして持つことができますが、javaエンティティクラスでマッピングされるフィールドは電子メールになる可能性があります。その場合、メソッド名はfindByEmailでなく、findByWorkEmailでなければなりません。 –

答えて

1

Springでは、これらのインタフェースを動的に実装して注入します。 Springによって定義された命名標準を使用して独自のメソッドを定義することができます。自動的にそれらを実装し、クエリを実行します。ここに完全なリファレンスドキュメントがあります。あなたは基本的にこのリポジトリをautowireし、そのメソッドを使用します実装のために https://docs.spring.io/spring-data/jpa/docs/current/reference/html/

0

あなたが直接

@Service 
class ImplClass{ 

@Autowired 
UserDao userDao; 

public void method(){ 
---- 
userDao.findByEmail([email protected]); 
} 

} 
0

をそれらを使用することができるように...これらのメソッドは、内部実装を持っているあなたは、あなたのインターフェースのようなカスタムリポジトリのインターフェースを拡張することができますそう:

UserDao.java

public interface UserDao extends CrudRepository<User, Long>, YourCustomRepository<User, String> { 
} 

YourControllerClass.java

@Autowired 
private UserDao repo; 
         //An example method: 
@RequestMapping("/getbyName/{name}")  
public User getUserByName(@PathVariable("name") String name){ 
     User user = repo.findByName(name); //your custom method called here 
     return user; 
    } 

と命名conventiに注意してください:あなたはその後、例えばメソッドを使用することができます

YourCustomRepository.java

public interface YourCustomRepository<T, S>{ 
    public User findByName(String name); 
} 

カスタムメソッドの場合は "findBy ....();"

+0

メソッドYourCustomRepository.findByName()を実装する方法? – lonelyloner

+0

自分で実装しません。 Springは自動的にそれらを実装し、クエリを実行します。あなたがする必要があるのは、以下のメソッドを呼び出すことだけです:User user = repo.findByName(name);注:UserDoaレポ参照は@Autowiredです –

関連する問題