Érdekes kezdeményezés a JINQ, amely kombinálja a Lambda expression technológiát az adatbázis lekérdezésekkel.

Nézzük például az alábbi JDBC lekérdezést:

PreparedStatement s = con.prepareStatement("SELECT * "
+ "FROM Customer C "
+ "WHERE C.Name = ? ");
s.setString(1, "Alice");
ResultSet rs = s.executeQuery();

 

E Helyett JINQ használatával az alábbi "lekérdezést" kell megejtenünk:

database.getCustomers().where(
customer -> customer.getName().equals("Alice"));

 

A leírás szerint teljes stream támogatása is van, tehát működnek a filter, a map és a reduce megoldások is:

customers.stream()
   .filter( c -> c.getName().equals("Alice") )
   .map( c -> c.getAddress() );

 

Egy próbát megér... JPA-val kombinálva nagyon jó eszköznek néz ki. (smile)

Labels (0)

  • No labels

Comments  (5)

5 Comments

  1. Csak kar hogy Java 8 meg nagyon nincs elterjedve... ugyhogy addig marad QueryDSL scalaval (smile) JPA-val az is popec (bar pont most probalok leszokni JPA-rol es atterni Activate Frameworkre) (big grin)

    Amugy vicces latni hogy scala funkcionalitasok (okok, tudom hogy mas nyelvekben is van) hogy szivarognak be java-ba...

     

  2. database.getCustomers().where(
    customer -> customer.getName().equals("Alice"));
    ha jól értem doksi alapján, ez azt csinálja, hogy lekérdezi az összes customert adatbázisból, aztán utána szűri őket? Mert ha igen, akkor ez mehet a kukába (smile)
    1. Nem, nem azt csinalja. Ez egy queryt parsol belole es azt futtatja az adatbazison (tehat ilyesmi lesz:

      select c from Customers c where c.name='Alive'

      )

  3. The code

    1. Gets a stream of all the customers from a database
    2. Visits each customer object and filters them using a function
    3. Only customers named "Alice" are returned

    (forrás: http://www.jinq.org/ )

     

    A "filters them using a function" kifejezésből nekem nem éppen az jön le, hogy lefordítja a kifejezést SQL-re

  4. Ne ragadjunk ki részeket a doksiból....

    The code
    Gets a stream of all the customers from a database
    Visits each customer object and filters them using a function
    Only customers named "Alice" are returned

    És ezután jön a lényeg....


    When the code is executed in Java, Jinq will automatically convert the code into SQL queries that a database can understand.
    PreparedStatement s = con.prepareStatement("SELECT * "
    + "FROM Customer C "
    + "WHERE C.Name = ? ");
    s.setString(1, "Alice");
    ResultSet rs = s.executeQuery();

Attachments  (0)

Add Attachment
No files shared here yet.