Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

RapidClipse bietet mit dem JPA-SQL Editor ein mächtiges Tool für die Erstellung von benutzerdefinierten Abfragen auf Basis von JPAFormulierung Ihrer Datenbankabfragen. JPA-SQL ist eine domänenspezifische Sprache (DSL). Die Syntax von JPA-SQL lehnt sich an SQL an und ist somit leicht erlernbar. In JPA-SQL ist eine reine Metasprache. D.h., die in JPA-SQL formulierten formulierte Abfragen werden nicht direkt an eine Datenbank versendet, sondern in Javacode umgewandelt, der auf Basis der JPA Criteria API umgewandeltbasiert. Erst zur Laufzeit werden die nativen SQL-Statements passend für die entsprechend angebundene Datenbank erzeugt und abgesetztvon 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 plain SQL-Strings:

  • SQL-ähnliche Syntax und Übersichtlichere Codestruktur
  • Übersichtlicher
  • Typsicher
  • Beliebige Reihenfolge der Statements
  • IDE-Unterstützung
    • Code Completion - Erkennung von Schlüsselwörter, Operatoren und Entities 
    • Syntax-Highlighting
    • Code-Folding
    • Formatter

    • Inline Refactoring and Refactoring Participants for JDT Member Renames and Moves

    • Hovers

    • Linking (Ctrl+Click)

    • Outline View

    • Error/Warning-Markers with Quick Fixes

    • Code Templates

    • Integration in Eclipse build process

    • debuggbar (generierter JPA Criteria Code)
  • Query-Methode im DAO wird automatisch generiert
  • Datenbankunabhängig

Vorteile von JPA-SQL im Vergleich zur direkten Verwendung der JPA Criteria API:

  • SQL-ähnliche Syntax und CodestrukturÜbersichtlicher
  • Deutlich geringere Komplexität
  • Übersichtlicherer Code
  • Leicht erlernbar


  1. Klicken Sie im Project Management > Data Access das DAO an, über das Sie eine Datenbankabfrage durchführen möchten, z.B. CustomerDAO.java.
  2. Drücken Sie Strg + Shift und wählen Sie in der folgenden Autovervollständigung query - create new query aus.
  3. Geben Sie bei der generierten Methode einen geeigneten Methodennamen an, z.B. findAllCustomer.

    Code Block
    languagejava
    themeConfluence
    findAllCustomer()
    {
    	select * from 
    }
  4. Geben Sie nach dem Schlüsselwort from > C ein, drücken Sie Strg + Shift und wählen Sie Customer aus.
  5. Klicken Sie auf Speichern.


...

  • Queries

    Code Block
    languagejava
    themeConfluence
    import com.company.test.entities.Customer
    
    findAllCustomer()
    {
    	select * from Customer
    }
  • Java - Generierte Java Code auf Basis der JPA Criteria API. Zu der Query-Methode werden auch die notwendigen Imports generiert. 

    Code Block
    languagejava
    themeConfluence
    /**
     * @queryMethod Do not edit, method is generated by editor!
     */
    public List<Customer> findAllCustomer() {
    	EntityManager entityManager = em();
    
    	CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
    
    	CriteriaQuery<Customer> criteriaQuery = criteriaBuilder.createQuery(Customer.class);
    
    	Root<Customer> root = criteriaQuery.from(Customer.class);
    
    	TypedQuery<Customer> query = entityManager.createQuery(criteriaQuery);
    	return query.getResultList();
    }
Hinweis:
  • Sprachumfang - JPA-SQL lehnt sich an SQL an.
  • 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
    languagejava
    themeConfluence
    import com.company.test.entities.Customer
    findAllCustomer()
    {
    	select * from Customer 
    }
    
    
    findCustomerByID()
    {
    	select * from Customer where customerid = "BOLID"
    }

...