Tout le monde connaît une bonne bibliothèque de construction SQL pour Java comme Squiggle (non maintenu, semble-t-il.). De préférence, un projet en développement actif.
De préférence avec une syntaxe comme Zend_Db_Select , quelque chose qui permettra de faire une requête comme
String query = db.select().from('products').order('product_id');
ddlutils est mon meilleur choix: http://db.Apache.org/ddlutils/api/org/Apache/ddlutils/platform/SqlBuilder.html
voici create example (groovy):
Platform platform = PlatformFactory.createNewPlatformInstance("Oracle");//db2,...
//create schema
def db = new Database();
def t = new Table(name:"t1",description:"XXX");
def col1 = new Column(primaryKey:true,name:"id",type:"bigint",required:true);
t.addColumn(col1);
t.addColumn(new Column(name:"c2",type:"DECIMAL",size:"8,2"));
t.addColumn( new Column(name:"c3",type:"varchar"));
t.addColumn(new Column(name:"c4",type:"TIMESTAMP",description:"date"));
db.addTable(t);
println platform.getCreateModelSql(db, false, false)
//you can read Table Object from platform.readModelFromDatabase(....)
def sqlbuilder = platform.getSqlBuilder();
println "insert:"+sqlbuilder.getInsertSql(t,["id":1,c2:3],false);
println "update:"+sqlbuilder.getUpdateSql(t,["id":1,c2:3],false);
println "delete:"+sqlbuilder.getDeleteSql(t,["id":1,c2:3],false);
//http://db.Apache.org/ddlutils/database-support.html
Je peux recommander jOOQ . Il fournit de nombreuses fonctionnalités, un DSL intuitif pour SQL et une approche de rétroingénierie extrêmement personnalisable.
jOOQ combine efficacement SQL, sécurité de types, génération de code source, enregistrements actifs, procédures stockées, types de données avancés et Java dans un DSL intuitif et fluide).
API Hibernate Criteria (pas un langage SQL simple, mais très puissant et en développement actif):
List sales = session.createCriteria(Sale.class)
.add(Expression.ge("date",startDate);
.add(Expression.le("date",endDate);
.addOrder( Order.asc("date") )
.setFirstResult(0)
.setMaxResults(10)
.list();
Vous pouvez utiliser la bibliothèque suivante:
https://github.com/pnowy/NativeCriteria
La bibliothèque est construite au sommet de la "requête SQL" de Hibernate afin de prendre en charge toutes les bases de données prises en charge par Hibernate (la session Hibernate et les fournisseurs JPA sont pris en charge). Le modèle de générateur est disponible, etc. (mappeurs d'objets, mappeurs de résultats).
Vous pouvez trouver les exemples sur la page github, la bibliothèque est bien sûr disponible sur Maven central.
NativeCriteria c = new NativeCriteria(new HibernateQueryProvider(hibernateSession), "table_name", "alias");
c.addJoin(NativeExps.innerJoin("table_name_to_join", "alias2", "alias.left_column", "alias2.right_column"));
c.setProjection(NativeExps.projection().addProjection(Lists.newArrayList("alias.table_column","alias2.table_column")));