Donc, spring-data
fait un peu de magie en plus qui aide avec des requêtes complexes. C'est étrange au premier abord et vous totalement l'ignorer dans les docs, mais il est vraiment puissant et utile.
Elle implique la création d'une coutume Repository
et personnalisé `RepositoryImpl " et disant Printemps où le trouver. Voici un exemple:
La Configuration de la classe point à votre besoin de configuration xml avec l'annotation pointant vers votre référentiels de paquet (il regarde *Impl
classes automatiquement maintenant):
@Configuration
@EnableJpaRepositories(basePackages = {"com.examples.repositories"})
@EnableTransactionManagement
public class MyConfiguration {
}
jpa-repositories.xml - dites - Spring
où trouver vos dépôts. Aussi dites - Spring
chercher personnalisé des référentiels avec l' CustomImpl
nom de fichier:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<jpa:repositories base-package="com.example.repositories" repository-impl-postfix="CustomImpl" />
</beans>
MyObjectRepository
- c'est là que vous pouvez mettre commentés et annotés méthodes de requête. Notez comment ce référentiel interface étend l' Custom
d'un:
@Transactional
public interface MyObjectRepository extends JpaRepository<MyObject, Integer>, MyObjectRepositoryCustom {
List<MyObject> findByName(String name);
@Query("select * from my_object where name = ?0 or middle_name = ?0")
List<MyObject> findByFirstNameOrMiddleName(String name);
}
MyObjectRepositoryCustom
- référentiel des méthodes qui sont plus complexes et ne peuvent pas être traitées avec une simple requête ou une annotation:
public interface MyObjectRepositoryCustom {
List<MyObject> findByNameWithWeirdOrdering(String name);
}
MyObjectRepositoryCustomImpl
- où vous avez réellement mettre en œuvre ces méthodes avec une autocâblés EntityManager
:
public class MyObjectRepositoryCustomImpl implements MyObjectRepositoryCustom {
@Autowired
private EntityManager entityManager;
public final List<MyObject> findByNameWithWeirdOrdering(String name) {
Query query = query(where("name").is(name);
query.sort().on("whatever", Order.ASC);
return entityManager.find(query, MyObject.class);
}
}
Étonnamment, ce tout vient ensemble et les méthodes des deux interfaces (et l'interface CRUD vous mettre en œuvre) tous affichent lorsque vous effectuez:
myObjectRepository.
Vous verrez:
myObjectRepository.save()
myObjectRepository.findAll()
myObjectRepository.findByName()
myObjectRepository.findByFirstNameOrMiddleName()
myObjectRepository.findByNameWithWeirdOrdering()
Il fonctionne vraiment. Et vous obtenez une interface d'interrogation. spring-data
est vraiment prêt pour une grande application. Et le plus de requêtes que vous pouvez pousser en simple ou annotation uniquement le mieux vous vous trouvez.
Tout cela est documenté à l' Spring Data Jpa site.
Bonne chance.