Versions Compared

Key

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

RapidClipse bietet mit dem The JPA-SQL Editor ein mächtiges Tool für die Formulierung Ihrer Datenbankabfrageneditor is a powerful tool that facilitates the formulation of your database queries in RapidClipse. JPA-SQL ist eine domänenspezifische, datenbankunabhängige Sprache is a domain-specific, database-independent language (DSL). Die Syntax wurde gezielt an SQL angelehnt, sodass JPA-SQL leicht erlernbar ist. JPA-SQL ist nicht zu verwechseln mit nativem SQL. In JPA-SQL formulierte Abfragen werden 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 aus dem generierten JPA Criteria Code von Hibernate native SQL-Statements passend für die entsprechend angebundene Datenbank erzeugt und an die Datenbank versendet. JPA-SQL kombiniert somit die Einfachheit von SQL mit den zahlreichen Vorteilen der JPA Criteria API. 

Vorteile von JPA-SQL im Vergleich zur Verwendung von SQL-Strings:

...

Formatter

...

The syntax is deliberately similar to SQL so that JPA-SQL is easy to learn. However, JPA-SQL is not to be confused with native SQL. Queries formulated in JPA-SQL are never sent to a database. Instead, they are converted to Java code based on the JPA Criteria API. Thus, you can access all the benefits of the JPA Criteria API without having to write the JPA Criteria code.

At runtime, Hibernate generates the native SQL statements from the generated JPA Criteria code to match the connected database, and these are sent to the database. Thus JPA-SQL combines the simplicity of SQL with the numerous advantages of JPA Criteria API.


Benefits of JPA-SQL compared to the use of SQL strings:

  • Clearer code structure
  • Type safe
  • Any order of statements
  • IDE support
    • Code Completion - detection of keywords, operators, and entities
    • Syntax highlighting
    • Code folding
    • Formatter

    • Inline refactoring and refactoring participants for JDT member renames and moves

    • Hovers

    • Linking (Ctrl+Click)

    • Outline Viewview

    • Error/Warning-Markers with Quick Fixeswarning markers with quick fixes

    • Code Templatestemplates

    • Integration in Eclipse build process

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

...

  • method is automatically generated in DAO
  • Database independent

Benefits of JPA-SQL in comparison to the JPA Criteria API:

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

...

  • like syntax and code structure
  • Significantly lower complexity
  • Cleaner code
  • Easy to learn


  1. Under Project Management > Data Access click the DAO with which you want to perform a database query, e.g. CustomerDAO.java.
  2. Drücken Sie Press Strg + Space und wählen Sie in der folgenden Autovervollständigung query -  Space and select query: create new query aus in the following autocomplete window.
  3. Geben Sie bei der generierten Methode einen geeigneten Methodennamen an, z.BEnter an appropriate method name for the generated method, e.g. findAllCustomer.

    Code Block
    languagesql
    themeConfluence
    findAllCustomer()
    {
    	select * from 
    }
  4. Geben Sie nach dem Schlüsselwort from > C ein, drücken Sie Strg + Space und wählen Sie Customer ausAfter the keyword from, enter C, press Strg + Space and select Customer.
  5. Klicken Sie auf SpeichernClick Save.

...



Result:
  • Queries - JPA-SQL Codecode.

    Code Block
    languagesql
    themeConfluence
    import com.company.test.entities.Customer
    
    findAllCustomer()
    {
    	select * from Customer
    }
  • Java - Generierte Java Code auf Basis der Generated Java code based on JPA Criteria API. Zu der Query-Methode werden auch die notwendigen Imports generiertThe necessary imports are generated based on the query method

    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();
    }
Examples:
  • Find all 

    Code Block
    languagesql
    themeConfluence
    findAllCustomer()
    {
    	select * from Customer
    }
    

    Alternativ erlaubte SchreibweiseAlternative spelling:

    Code Block
    languagesql
    themeConfluence
    findAllCustomer()
    {
    	from Customer
    }
  • Where Conditioncondition

    Code Block
    languagesql
    themeConfluence
    findAllCustomerWhere()
    {
    	select * from Customer where city = "London"
    }
  • Where Condition mit Parametercondition with parameter

    Code Block
    languagesql
    themeConfluence
    findAllCustomerWhere(String city)
    {
    	select * from Customer where city = :city
    }

    Als Parameter können auch Objekte übergeben werdenIt is also possible to pass objects as parameters:

    Code Block
    languagesql
    themeConfluence
    findAllCustomerWhere(Customer customer)
    {
    	select * from Customer where customer = :customer
    }
  • Like Operatoroperator

    Code Block
    languagesql
    themeConfluence
    findAllCustomerLike()
    {
    	select * from Customer where city like "%L"
    }
  • Concat Funktionfunction

    Code Block
    languagesql
    themeConfluence
    findAllCustomerLike(String city)
    {
    	select * from Customer where city like concat("%", :city)
    }
  • Rückgabe bestimmter SpaltenReturns specific columns

    Code Block
    languagesql
    themeConfluence
    findAllCustomerColumn()
    {
    	select customerid, city, address from Customer
    }
  • Speichert das Abfrageergebnis in einem benutzerdefiniertem Objekt Saves the query result in a custom object

    Code Block
    languagesql
    themeConfluence
    findAllCustomer()
    {
    	select * from Customer
        into myCustomObject
    }
  • Alias

    Code Block
    languagesql
    themeConfluence
    findAllCustomerAs()
    {
    	select * from Customer as c
        where c.city = "London"
    }
  • Logisch Logical AND

    Code Block
    languagesql
    themeConfluence
    findAllCustomerAnd()
    {
    	select * from Customer where city = "London" and country = "UK"
    }
  • Logisch Logical OR

    Code Block
    languagesql
    themeConfluence
    findAllCustomerOr()
    {
    	select * from Customer where city = "London" or city = "Berlin"
    }
  • MAX Funktion - Gibt den höchsten Unitprice zurückfunction - Returns the highest unit price

    Code Block
    languagesql
    themeConfluence
    getOrderDetailMaxPrice()
    {
    	select max(unitprice) from Orderdetail result single
    }
    
    
  • MIN Funktion - Gibt den niedrigsten Unitprice zurück function - Returns the lowest unit price

    Code Block
    languagesql
    themeConfluence
    getOrderDetailMinPrice()
    {
    	select min(unitprice) from Orderdetail result single
    }
  • AVG Funktion - Gruppiert nach dem Produktnamen und berechnet den durchschnittlichen Bestellwert der Orderdetails function - Grouped by product name. Calculates the average order price of the orders within a group of products

    Code Block
    languagesql
    themeConfluence
    getOrderDetailAvgPrice()
    {
    	select avg(unitprice) from Orderdetail
    	group by product.productname
    }
    Code Block
    languagesql
    themeConfluence
    getOrderDetailAvgPrice()
    {
    	select avg(unitprice) as price, product.productname from Orderdetail
    	group by product.productname
    }
  • ORDER BY Funktion 

    Absteigende Sortierung

    function 

    • Descending order

      Code Block
      languagesql
      themeConfluence
      getAllCustomerWithOrderByDesc()
      {
      	select * from Customer order by city desc
      }
    • Aufsteigende SortierungAscending order

      Code Block
      languagesql
      themeConfluence
      getAllCustomerWithOrderByAsc()
      {
      	select * from Customer order by city asc
      }
  • Count FunktionCount function

    Code Block
    languagesql
    themeConfluence
    getCountFromCustomerByCountry()
    {
    	select count(customerid) from Customer group by country
    }
  • Subselects

    Code Block
    languagesql
    themeConfluence
    getOrderDetailsFromLondon()
    {
    	select * from Orderdetail as detail
    	where detail.`order`.orderid in (select orderid from Order where customer.city = "London")
    }

    Alternative zu to Subselects:

    Code Block
    languagesql
    themeConfluence
    getOrderDetailsFromLondon()
    {
    	select * from Orderdetail
    	where `order`.customer.city = "London"
    }
    Komplexe QueriesGibt alle Bestellungen aus London zurück und Gruppiert diese um die Summe aller Bestellungen aus London
  • Complex queries
    • Returns all orders from London grouped by the sum of those orders

      Code Block
      languagesql
      themeConfluence
      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 KurzformPossible short form

      Code Block
      languagesql
      themeConfluence
      getOrderDetailsSumFromLondon()
      {
      	select sum(unitprice) from Orderdetail
      	where `order`.customer.city = "London"
      	group by `order`.customer.city
      	result single
      }

...

Note:
  • JPA-SQL Funktionsumfang  functions - JPA-SQL wurde entwickelt, um den Einsatz der  JPA-SQL has been developed to simplify the use of the JPA Criteria API zu vereinfachen. Der Funktionsumfang von . The range of JPA-SQL ist dadurch auf den Funktionsumfang der functions is limited by the range of the JPA Criteria API begrenztfunctions.
  • Generierten Code editieren - Die Generierung des Edit generated code - The generation of the Java JPA Criteria Codes erfolgt unidirektional. D.h., Änderungen dürfen nur im codes is unidirectional. This means that changes are possible only in the JPA-SQL Code vorgenommen werden. Der generierte code. The generated Java JPA Criteria Code darf nicht editiert werden.Mehrere Query-Methoden - In einer DAO Klasse können sich beliebig viele Query-Methoden befindencode cannot be edited.
  • Multiple query methods - Any number of query methods can be located in a DAO class.

    Code Block
    languagesql
    themeConfluence
    import com.company.test.entities.Customer
    findAllCustomer()
    {
    	select * from Customer 
    }
    
    
    findCustomerByID()
    {
    	select * from Customer where customerid = "BOLID"
    }

JPA-SQL Sprach-SpezifikationLanguage Specification