【问题标题】:apache metamodel queryConstraintsapache元模型查询约束
【发布时间】:2016-05-24 07:50:00
【问题描述】:
DataSet dataSet = datacontext.query()
    .from(table)
    .select(colNameArr)
    .where(frstCol).eq(dynamicval1).and("").eq("").or("").eq("")....etc
    .execute();

这可以实现吗?,我可以动态决定约束,从 and(), or() 开始吗?如果可以,我们该怎么做?

【问题讨论】:

  • 任何人都可以指导我做...!!

标签: java apache-metamodel


【解决方案1】:

动态 SELECT 和 WHERE 子句示例:

    // Prepare a data context based on plain old Java objects
    List<TableDataProvider<?>> tableDataProviders = new ArrayList<TableDataProvider<?>>();
    SimpleTableDef tableDef1 = new SimpleTableDef("snippetTableName1", new String[] {"id", "name"});
    tableDataProviders.add(new ArrayTableDataProvider(tableDef1,
            new ArrayList<Object[]>()));
    PojoDataContext dataContext = new PojoDataContext("snippetSchemaName", tableDataProviders);

    // Add some rows
    dataContext.executeUpdate(new UpdateScript() {

        public void run(UpdateCallback callback) {
            callback.insertInto("snippetTableName1").value("id", "id1").value("name", "name1").execute();
            callback.insertInto("snippetTableName1").value("id", "id2").value("name", "name2").execute();
        }
    });

    // Prepare dynamic query
    String[] selectArray = new String[2];
    selectArray[0] = "id";
    selectArray[1] = "name";

    Map<String, Object> whereClauses = new HashMap<String, Object>();
    whereClauses.put("id", "id1");
    whereClauses.put("name", "name1");

    SatisfiedSelectBuilder<?> queryBuilder = dataContext.query().from("snippetTableName1").select(selectArray);
    SatisfiedWhereBuilder<?> whereBuilder = null;

    int i = 0;
    for (Map.Entry<String, Object> whereClause: whereClauses.entrySet()) {
        if (i == 0) {
            whereBuilder = queryBuilder.where(whereClause.getKey()).eq(whereClause.getValue());
        } else {
            whereBuilder = whereBuilder.and(whereClause.getKey()).eq(whereClause.getValue());
        }
        i++;
    }

    DataSet dataSet = whereBuilder.execute();

    while (dataSet.next()) {
        Row row = dataSet.getRow();
        System.out.println("Row: " + row);
    }

【讨论】:

  • 嗨 Tomas,我的意思是动态的,无法控制 "sn-pTableName1", new String[] {"id", "name"}, String[] {.....} .在这种情况下!..
  • 抱歉,我不明白你的意思。也许展示一些用例,你想实现什么,是什么阻止你实现......
  • 今天我只有id和name,tmrw,可以换成100的列,怎么办……!我必须一直手动更改代码吗?..!!
  • 这不是 MetaModel 问题,而是一般的编程任务。 MetaModel 采用您想要选择的列数组,由您来准备这样的列表(动态地!硬编码的数组只是一个示例)。
  • 我知道了,它适用于列数组.. 但是如果出现约束怎么办.... 元模型,没有 WhereBuilder 接口的实现类...!!我想知道我是否可以作为程序员修复它..!
猜你喜欢
  • 1970-01-01
  • 2018-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多