Есть ли хорошая хорошая библиотека SQL Builder в Java?

Кто-нибудь знает хорошую библиотеку SQL Builder для Java, например Squiggle (она больше не поддерживается). Предпочтительно, проект в активном развитии.

Предпочтительно с синтаксисом, например Zend_Db_Select, то, что позволит сделать запрос типа

String query = db.select().from('products').order('product_id');

Ответ 1

Querydsl и jOOQ - два популярный выбор.

Ответ 2

Я могу порекомендовать jOOQ. Он предоставляет множество замечательных функций, а также интуитивно понятный DSL для SQL и чрезвычайно настраиваемый обратный подход.

jOOQ эффективно сочетает в себе сложные SQL, типы безопасности, генерации исходного кода, активные записи, хранимые процедуры, расширенные типы данных и Java в беглой, интуитивно понятной DSL.

Ответ 3

ddlutils - мой лучший выбор: http://db.apache.org/ddlutils/api/org/apache/ddlutils/platform/SqlBuilder.html

вот пример создания (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

Ответ 4

API-интерфейс Hibernate Criteria (не простой SQL, но очень мощный и в активной разработке):

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();

Ответ 5

Вы можете использовать следующую библиотеку:

https://github.com/pnowy/NativeCriteria

Библиотека построена на вершине Hibernate "create sql query", поэтому поддерживает все базы данных, поддерживаемые Hibernate (поддерживаются сеансы Hibernate и JPA-провайдеры). Доступен шаблончик строителя и т.д. (Объектные карты, получатели результатов).

Вы можете найти примеры на странице github, библиотека, конечно, доступна в Maven.

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")));