⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 criteriacondition.java

📁 根据Scott W. Ambler在1998年写的关于ORM Persistence Layer的详细设计论文的设计思路,Artem Rudoy 开发了一个开源的ORM实现 -- PL(Persist
💻 JAVA
字号:
package pl.criteria;

import java.util.*;


/**
 * PersistenceCriteria 条件
 * 代表sql语句中的WHERE子句
 */
public class CriteriaCondition  implements CriteriaPart {
  private Vector parts = new Vector();
  private pl.map.ClassMap classMap = null;

  /**
   * Creates CreteriaCondition.
   */
  public  CriteriaCondition(pl.map.ClassMap classMap) {
    super();
    this.classMap = classMap;
  }

  /**
   * 以OR形式加入一个条件部分类
   *
   */
  public void addOrCriteria(CriteriaPart orCriteria) {

    parts.add(new Part(orCriteria, Part.OR_PART));
  }

  /**
   *  以AND形式加入一个条件部分类
   *
   */
  public void addAndCriteria(CriteriaPart andCriteria) {

    parts.add(new Part(andCriteria, Part.AND_PART));
  }

  /**
   * 将条件类转换为sql语句的where子句,生成完整的pl.sql.SqlStatement
   *
   */
  public void fillSqlStatement(pl.sql.SqlStatement statement,
                               java.util.Iterator parameters) throws pl.
      PlException {
    if (parts.size() > 0) {
      statement.addSqlClause("(");//where 子句用括号"()"括起来
      for (int i = 0; i < getSize(); i++) {
        Part part = (Part) parts.get(i);
        if (i != 0) {
          switch (part.kind) {//增加 AND 或 OR
            case Part.AND_PART:
              statement.addSqlClause(" " +
                                     classMap.getRelationalDatabase().getClauseStringAnd() +
                                     " ");
              break;

            case Part.OR_PART:
              statement.addSqlClause(" " +
                                     classMap.getRelationalDatabase().getClauseStringOr() +
                                     " ");
              break;
          }
        }
        //匹配 一个完整的 条件部分, 如 person.id=2
        part.part.fillSqlStatement(statement, parameters);
      }
      statement.addSqlClause(")");
    }
  }

  /**
   * 获取条件的数量
   *
   *
   * @return int
   */
  public int getSize() {
    return parts.size();
  }
}

class Part {
  public final static int OR_PART = 0;
  public final static int AND_PART = 1;

  public CriteriaPart part = null;
  public int kind = AND_PART;

  public Part(CriteriaPart part, int kind) {
    this.part = part;
    this.kind = kind;
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -