É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.
Page
viewed times
5 Comments
János Háber
Csak kar hogy Java 8 meg nagyon nincs elterjedve... ugyhogy addig marad QueryDSL scalaval JPA-val az is popec (bar pont most probalok leszokni JPA-rol es atterni Activate Frameworkre)
Amugy vicces latni hogy scala funkcionalitasok (okok, tudom hogy mas nyelvekben is van) hogy szivarognak be java-ba...
Bence Erős
János Háber
Nem, nem azt csinalja. Ez egy queryt parsol belole es azt futtatja az adatbazison (tehat ilyesmi lesz:
)
Bence Erős
(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
János Háber
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();