Je lisais à propos de Crudrepository, une interface pour les opérations CRUD génériques sur un référentiel pour un type spécifique.
Mais nous pouvons créer notre interface personnalisée et étendre CrudRepository.
J'ai consulté l'exemple en ligne et constaté qu'ils n'avaient fourni aucune implémentation.
@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);
}
L'argument doit-il avoir le même nom que le nom de la colonne ou le nom de la méthode, comme "findBy" + columnName?
Spring fournit l'implémentation dynamique de ces interfaces et les injecte. vous pouvez définir vos propres méthodes à l'aide des normes de dénomination définies par Spring. Ces dernières seront automatiquement implémentées et exécutées. Voici la documentation de référence complète. https://docs.spring.io/spring-data/jpa/docs/current/reference/html/
Vous pouvez avoir votre interface étendre une interface de référentiel personnalisé comme ceci:
UserDao.Java
public interface UserDao extends CrudRepository<User, Long>, YourCustomRepository<User, String> {
}
YourCustomRepository.Java
public interface YourCustomRepository<T, S>{
public User findByName(String name);
}
Vous pouvez ensuite utiliser la méthode par exemple:
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;
}
Notez également que la convention de dénomination des méthodes personnalisées est "findBy .... ();"
Pour l'implémentation, vous allez essentiellement autoriser le transfert de ce référentiel et utiliser sa méthode ... Ces méthodes ont une implémentation interne afin que vous puissiez les utiliser directement
@Service
class ImplClass{
@Autowired
UserDao userDao;
public void method(){
----
userDao.findByEmail([email protected]);
}
}