有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java中有好的动态SQL builder库吗?

任何人都知道一些好的SQL builder Java库,比如Squiggle(似乎不再维护)。最好是积极开发的项目

最好使用Zend_Db_Select这样的语法,这将允许进行如下查询

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

共 (5) 个答案

  1. # 1 楼答案

    我可以推荐jOOQ。它提供了很多优秀的特性,还提供了一个直观的SQL DSL和一个可定制的反向工程方法

    jOOQ effectively combines complex SQL, typesafety, source code generation, active records, stored procedures, advanced data types, and Java in a fluent, intuitive DSL.

  2. # 2 楼答案

    Hibernate标准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();
    
  3. # 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. # 4 楼答案

    您可以使用以下库:

    https://github.com/pnowy/NativeCriteria

    该库构建在Hibernate“创建sql查询”的顶部,因此它支持Hibernate支持的所有数据库(支持Hibernate会话和JPA提供程序)。生成器模式可用,等等(对象映射器、结果映射器)

    您可以在github页面上找到这些示例,当然可以在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")));