Ich muss Raw-SQL in einem Spring Data Repository verwenden. Ist dies möglich? Alles, was ich sehe, @Query
basiert immer auf Entitäten.
java
hibernate
spring-data-jpa
Webnet
quelle
quelle
Antworten:
Zitat aus Spring Data JPA- Referenzdokumenten .
In diesem Abschnitt erfahren Sie auch, wie Sie dies mit einer benannten nativen Abfrage tun.
quelle
@Query(value = "SELECT * FROM USERS WHERE EMAIL_ADDRESS = ?1", nativeQuery = true)
JA, Sie können dies auf folgende Weise tun:
1. Durch CrudRepository (Projektion)
Spring Data Repositories geben normalerweise das Domänenmodell zurück, wenn Abfragemethoden verwendet werden. Manchmal müssen Sie jedoch aus verschiedenen Gründen die Ansicht dieses Modells ändern.
Angenommen, Ihre Entität sieht folgendermaßen aus:
Jetzt ist Ihre Projektionsklasse wie unten. Es können die Felder, die Sie benötigt.
Und
Your Data Access Object(Dao) is like bellow
:Jetzt erhalten
ArrayList<IUserProjection> findUserUsingRollNo(String rollNo)
Sie die Liste der Benutzer.2. Verwenden von EntityManager
Angenommen, Ihre Abfrage lautet " ID auswählen, Name von Benutzern mit roll_no = 1001 ".
Hier gibt die Abfrage ein Objekt mit der ID- und Namensspalte zurück. Ihre Antwortklasse ist wie folgt:
Ihre Antwortklasse lautet wie folgt:
Hier erhält der UserObject-Konstruktor ein Objektarray und legt Daten mit dem Objekt fest.
Ihre Funktion zum Ausführen von Abfragen ist wie folgt:
Hier müssen Sie folgende Pakete importieren:
Jetzt, in Ihrer Hauptklasse, müssen Sie diese Funktion aufrufen. Holen Sie sich zuerst EntityManager und rufen Sie diese
getUserByRoll(EntityManager entityManager,String rollNo)
Funktion auf. Das Anrufverfahren ist unten angegeben:Hier sind die Importe
erhalten
EntityManager
von dieser Art und Weise:Jetzt haben Sie Daten in diesem userObject.
Hinweis:
query.getSingleResult () gibt ein Objektarray zurück. Sie müssen die Spaltenposition und den Datentyp mit der Abfragespaltenposition pflegen.
Abfrage ein Array zurückgeben und es ist
[0] --> id and [1] -> name
.Weitere Infos finden Sie in diesem Thread und in diesem Thread
Vielen Dank :)
quelle
Es ist auch möglich, das Spring Data JDBC-Repository zu verwenden , ein Community-Projekt, das auf Spring Data Commons aufbaut, um ohne Verwendung von JPA auf Datenbanken mit unformatiertem SQL zuzugreifen.
Es ist weniger leistungsfähig als Spring Data JPA, aber wenn Sie eine einfache Lösung für einfache Projekte ohne Verwendung eines ORM wie Hibernate wünschen, ist diese Lösung einen Versuch wert.
quelle
wir können createNativeQuery ("Here Nagitive SQL Query") verwenden;
zum Beispiel :
quelle
em
Variable erstellt wird.Es ist möglich, eine Rohabfrage in einem Spring Repository zu verwenden.
quelle