2017-01-22 870 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列名稱作爲work_email,但在java實體類中映射的字段可以是電子郵件。在這種情況下,方法名稱應該是findByEmail而不是findByWorkEmail。 –

回答

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> { 
} 

YourCustomRepository.java

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

然後可以使用例如方法:

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對於自定義方法是「findBy ....();」

+0

如何實現YourCustomRepository.findByName()方法? – lonelyloner

+0

你不要自己實現它們。 Spring爲你自動實現它們並執行查詢。所有你需要做的就是調用方法:User user = repo.findByName(name);注意:UserDoa回購引用是@Autowired –