A more convenient alternative to the criteria API

Criteria have some advantages over using JPQL or raw SQL, as described in this answer : enter security; refactoring; less string dependency (but still there are some). And one very big drawback: they are less readable and just plain ugly. Is there a (non-JPA) Java API for accessing relational databases that are typical and readable?

+5
source share
3 answers

Timo Westkämper did a good job with QueryDSL . This library provides DSL for querying various persistence providers (JPA, MongoDB, Lucene ...).

, ( , ), . API .

+6

MyBatis.

MyBatis - SQL, . MyBatis JDBC . MyBatis XML , POJO Java ( Java) .

, nobeh : jOOQ.

+2

"" JPA : DynamicQueryBuilder

  • , , .

  • pojo!!! , !

  • , !

    = (); bank.setId(12L); bank.setAchCode( "1213" ); bank.setCbeCode( "1234" ); bank.setStatus( (1L)); bank.setAchShortName( "121" );

    ids = ArrayList(); ids.add(1); ids.add(2); ids.add(3); ids.add(4); ids.add(5);

    cbeCodes = new ArrayList(); cbeCodes.add( "1111" ); cbeCodes.add( "2222" );

    DynamicQueryBuilder queryDyncBuilder1 =    DynamicQueryBuilder.Builder(null).select(bank).withOperType(Operator.OperType.AND).   withAdvancedParam ( "cbeCode", LIKE, PERCENT_AROUND).withAdvancedParam( "id", IN, ids)   .withAdvancedParam( "achCode", BETWEEN, cbeCodes).withAdvancedParam( "achShortName", GT)   .orderBy( "id" ). orderBy ( "cbeCode", true).orderBy( "status.code", true).build();

    System.out.println(queryDyncBuilder1.getQueryString());

, JPQL:

SELECT b 
FROM Bank b 
WHERE b.status = :status 
AND b.cbeCode LIKE :cbeCode 
AND b.achShortName > :achShortName 
AND b.id IN :id 
AND (b.achCode BETWEEN :achCodeFrom AND :achCodeTo) 
ORDER BY b.status.code DESC, b.id ASC, b.cbeCode DESC
0

All Articles