任何人都知道一些优秀的SQL构建器库,如Squiggle(似乎不再维护)。优选地,正在积极开发的项目。
最好使用类似Zend_Db_Select的语法,允许进行类似
的查询String query = db.select().from('products').order('product_id');
答案 0 :(得分:47)
答案 1 :(得分:6)
我可以推荐jOOQ。它提供了许多出色的功能,还有一个直观的SQL for SQL和极其可靠的逆向工程方法。
jOOQ在流畅,直观的DSL中有效地结合了复杂的SQL,类型安全,源代码生成,活动记录,存储过程,高级数据类型和Java。
答案 2 :(得分:6)
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
答案 3 :(得分:2)
Hibernate Criteria API(虽然不是普通的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();
答案 4 :(得分:0)
您可以使用以下库:
https://github.com/pnowy/NativeCriteria
该库建立在Hibernate的顶部"创建sql查询"所以它支持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")));