Also, spring-data
macht etwas mehr Magie, die bei komplexen Abfragen hilft. Es ist zunächst seltsam und Sie überspringen es vollständig in den Dokumenten, aber es ist wirklich mächtig und nützlich.
Dazu müssen Sie ein benutzerdefiniertes Repository
und ein benutzerdefiniertes RepositoryImpl erstellen und Spring mitteilen, wo es zu finden ist. Hier ist ein Beispiel:
Konfigurationsklasse - Zeigen Sie auf Ihre noch benötigte XML-Konfiguration mit Anmerkungen, die auf Ihr Repositorys-Paket verweisen (es sucht *Impl
jetzt automatisch nach Klassen):
@Configuration
@EnableJpaRepositories(basePackages = {"com.examples.repositories"})
@EnableTransactionManagement
public class MyConfiguration {
}
jpa-repositories.xml - Geben Sie an, Spring
wo sich Ihre Repositorys befinden. Weisen Sie außerdem Spring
an, nach benutzerdefinierten Repositorys mit dem CustomImpl
Dateinamen zu suchen :
<?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
- Hier können Sie kommentierte und nicht kommentierte Abfragemethoden einfügen. Beachten Sie, wie diese Repository-Schnittstelle die Custom
eine erweitert:
@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
- Repository-Methoden, die komplexer sind und nicht mit einer einfachen Abfrage oder Anmerkung behandelt werden können:
public interface MyObjectRepositoryCustom {
List<MyObject> findByNameWithWeirdOrdering(String name);
}
MyObjectRepositoryCustomImpl
- wo Sie diese Methoden tatsächlich mit einem Autowired implementieren 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);
}
}
Erstaunlicherweise kommt dies alles zusammen und Methoden von beiden Schnittstellen (und der von Ihnen implementierten CRUD-Schnittstelle) werden angezeigt, wenn Sie Folgendes tun:
myObjectRepository.
Du wirst sehen:
myObjectRepository.save()
myObjectRepository.findAll()
myObjectRepository.findByName()
myObjectRepository.findByFirstNameOrMiddleName()
myObjectRepository.findByNameWithWeirdOrdering()
Es funktioniert wirklich. Und Sie erhalten eine Schnittstelle zum Abfragen. spring-data
ist wirklich bereit für eine große Anwendung. Und je mehr Abfragen Sie in einfache oder nur Anmerkungen verschieben können, desto besser geht es Ihnen.
All dies ist auf der Spring Data Jpa-Website dokumentiert .
Viel Glück.