Ejemplo n.º 1
0
  /**
   * 根据未持久化的注解对象创建 Insert SQL 语句
   *
   * @param bean 注解对象
   * @return object[0] -- 带占位符 ? 的 Insert SQL; <br>
   *     object[1] -- 占位符对应的参数值
   */
  public static Object[] createInsertSQL(Object bean) {
    if (bean == null) {
      return null;
    }

    // 采用新的解析方式,用于支持注解继承
    Persistence p = parsePersistence(bean, false);

    if (null == p || null == p.getTableName()) {
      return null;
    }

    Object[] oo = new Object[2];

    StringBuilder sql_buf_1 = new StringBuilder();
    StringBuilder sql_buf_2 = new StringBuilder();
    sql_buf_1.append("INSERT INTO ");
    sql_buf_1.append(p.getTableName());
    sql_buf_1.append("(");
    sql_buf_2.append(" VALUES(");

    List<Object> valList = new LinkedList<Object>();

    List<ColumnField> col_fields = p.getColumnFields();

    // 主键列
    for (ColumnField pf : col_fields) {
      if (!pf.isPrimaryKey()) {
        continue;
      }

      if (pf.getGeneratorType() == GeneratorType.SEQUENCE) {
        sql_buf_1.append(pf.getName());
        sql_buf_1.append(", ");

        sql_buf_2.append(pf.getValue());
        sql_buf_2.append(", ");
      } else if (pf.getGeneratorType() == GeneratorType.ASSIGN) {
        sql_buf_1.append(pf.getName());
        sql_buf_1.append(", ");

        sql_buf_2.append("?, ");

        valList.add(pf.getValue());
      }
    }

    // 普通列
    for (ColumnField cf : col_fields) {
      if (cf.isPrimaryKey()) {
        continue;
      }

      sql_buf_1.append(cf.getName());
      sql_buf_1.append(", ");

      sql_buf_2.append("?, ");

      valList.add(cf.getValue());
    }

    String sql1 = sql_buf_1.toString();
    String sql2 = sql_buf_2.toString();

    if (sql1.lastIndexOf(",") != -1) {
      sql1 = sql1.substring(0, sql1.lastIndexOf(",")) + ")";
    }
    if (sql2.lastIndexOf(",") != -1) {
      sql2 = sql2.substring(0, sql2.lastIndexOf(",")) + ")";
    }

    oo[0] = sql1 + sql2;
    oo[1] = valList.toArray();

    sql_buf_1 = null;
    sql_buf_2 = null;
    valList.clear();
    valList = null;
    p.clear();
    p = null;

    return oo;
  }