RapidClipse bietet mit dem JPA-SQL Editor ein mächtiges Tool für die Formulierung Ihrer Datenbankabfragen. JPA-SQL ist eine domänenspezifische, datenbankunabhängige Sprache (DSL). Die Syntax lehnt sich an SQL an und ist somit leicht erlernbarwurde gezielt an SQL angelehnt, sodass JPA-SQL leicht erlernbar ist. JPA-SQL ist nicht zu verwechseln mit nativem SQL. In JPA-SQL formulierte SQL formulierte Abfragen werden nicht direkt niemals an eine Datenbank versendet, sondern in Javacode umgewandelt, der auf der JPA Criteria API basiert. Damit erhalten Sie sämtliche Vorteile der JPA Criteria API, ohne jedoch JPA Criteria Code schreiben zu müssen.
Erst zur Laufzeit werden die nativen aus dem generierten JPA Criteria Code von Hibernate native SQL-Statements passend für die entsprechend angebundene Datenbank von Hibernate (oder einem anderen JPA-Provider Ihrer Wahl) dynamisch erzeugt und an die Datenbank versendet. JPA-SQL kombiniert somit die Einfachheit von SQL mit den zahlreichen Vorteilen der als sehr komplex geltenden JPA Criteria API.
Vorteile von JPA-SQL im Vergleich zur Verwendung von SQL-Strings:
...
Vorteile von JPA-SQL im Vergleich zur direkten Verwendung der JPA Criteria API:
- SQL-ähnliche Syntax und Codestruktur
- Deutlich geringere Komplexität
- Übersichtlicherer Code
- Leicht erlernbar
...
- Klicken Sie im Project Management > Data Access das DAO an, über das Sie eine Datenbankabfrage durchführen möchten, z.B. CustomerDAO.java.
- Drücken Sie Strg + Shift und Space und wählen Sie in der folgenden Autovervollständigung query - create new query aus.
Geben Sie bei der generierten Methode einen geeigneten Methodennamen an, z.B. findAllCustomer.
Code Block language sql theme Confluence findAllCustomer() { select * from }
- Geben Sie nach dem Schlüsselwort from > C ein, drücken Sie Strg + Shift und Space und wählen Sie Customer aus.
- Klicken Sie auf Speichern.
...
Find all
Code Block language sql theme Confluence findAllCustomer() { select * from Customer }
Alternativ erlaubte Schreibweise:
Code Block language sql theme Confluence findAllCustomer() { from Customer }
Where Condition
Code Block language sql theme Confluence findAllCustomerWhere() { select * from Customer where city = "London" }
Where Condition mit Parameter
Code Block language sql theme Confluence findAllCustomerWhere(String city) { select * from Customer where city = :city }
Als Parameter können auch Objekte übergeben werden:
Code Block language sql theme Confluence findAllCustomerWhere(Customer customer) { select * from Customer where customer = :customer }
Like Operator
Code Block language sql theme Confluence findAllCustomerLike() { select * from Customer where city like "%L" }
Concat Funktion
Code Block language sql theme Confluence findAllCustomerLike(String city) { select * from Customer where city like concat("%", :city) }
Rückgabe bestimmter Spalten
Code Block language sql theme Confluence findAllCustomerColumn() { select customerid, city, address from Customer }
Speichert das Abfrageergebnis in eine andere Klasse
Code Block language sql theme Confluence findAllCustomer() { select customerid, city, address from Customer into FlatCustomer }
Alias
Code Block language sql theme Confluence findAllCustomerAs() { select * from Customer as c where c.city = "London" }
Logisch AND
Code Block language sql theme Confluence findAllCustomerAnd() { select * from Customer where city = "London" and country = "UK" }
Logisch OR
Code Block language sql theme Confluence findAllCustomerOr() { select * from Customer where city = "London" or city = "Berlin" }
MAX Funktion - Gibt den höchsten Unitprice zurück
Code Block language sql theme Confluence getOrderDetailMaxPrice() { select max(unitprice) from Orderdetail result single }
MIN Funktion - Gibt den niedrigsten Unitprice zurück
Code Block language sql theme Confluence getOrderDetailMinPrice() { select min(unitprice) from Orderdetail result single }
AVG Funktion - Gruppiert nach dem Produktnamen und berechnet den durchschnittlichen Bestellwert der Orderdetails
Code Block language sql theme Confluence getOrderDetailAvgPrice() { select avg(unitprice) from Orderdetail group by product.productname }
Code Block language sql theme Confluence getOrderDetailAvgPrice() { select avg(unitprice) as price, product.productname from Orderdetail group by product.productname }
ORDER BY Funktion
Absteigende Sortierung
Code Block language sql theme Confluence getAllCustomerWithOrderByDesc() { select * from Customer order by city desc }
Aufsteigende Sortierung
Code Block language sql theme Confluence getAllCustomerWithOrderByAsc() { select * from Customer order by city asc }
Count Funktion
Code Block language sql theme Confluence getCountFromCustomerByCountry() { select count(customerid) from Customer group by country }
Subselects
Code Block language sql theme Confluence getOrderDetailsFromLondon() { select * from Orderdetail as detail where detail.`order`.orderid in (select orderid from Order where customer.city = "London") }
Alternative zu Subselects:
asdfasfCode Block language sql theme Confluence getOrderDetailsFromLondon() { select * from Orderdetail where `order`.customer.city = "London" }
- Komplexe Queries
Gibt alle Bestellungen aus London zurück und Gruppiert diese um die Summe aller Bestellungen aus London
Code Block language sql theme Confluence getOrderDetailsSumFromLondon() { select sum(detail.unitprice) from Orderdetail as detail where detail.`order`.orderid in (select orderid from Order where customer.city = "London") group by detail.`order`.customer.city result single }
Mögliche Kurzform
Code Block language sql theme Confluence getOrderDetailsSumFromLondon() { select sum(unitprice) from Orderdetail where `order`.customer.city = "London" group by `order`.customer.city result single }
Hinweis:
- JPA-SQL Funktionsumfang - JPA-SQL wurde entwickelt, um den Einsatz der JPA Criteria API zu vereinfachen. Der Funktionsumfang von JPA-SQL ist dadurch auf den Funktionsumfang der JPA Criteria API begrenzt.
- Generierten Code editieren - Die Generierung des Java JPA Criteria Codes erfolgt unidirektional. D.h., Änderungen dürfen nur im JPA-SQL Code vorgenommen werden. Der generierte Java JPA Criteria Code darf nicht editiert werden.
Mehrere Query-Methoden - In einer DAO Klasse können sich beliebig viele Query-Methoden befinden.
Code Block language sql theme Confluence import com.company.test.entities.Customer findAllCustomer() { select * from Customer } findCustomerByID() { select * from Customer where customerid = "BOLID" }