SQL組み立て時に条件によってWHERE句が変化する場合のTips

SQLをプログラムで組み立てて実行するときで、条件によってWHERE句が変化する場合、ANDがつくかどうかでとても煩雑なコードになることがある。
以下の例のような感じだ。

StringBuilder sql = new StringBuilder();
sql.append("SELECT xxx, ... FROM xxx");
boolean where = false;
if (条件1) {
     sql.appned(" WHERE hoge = ?");
     where = true;
}
if (条件2) {
     if (where) {
          sql.append(" AND foo = ?");
     } else {
          sql.appned(" WHERE foo = ?");
          where = true;
     }
}
if (条件3) {
     if (where) {
          sql.append(" AND bar = ?");
     } else {
          sql.appned(" WHERE bar = ?");
          where = true;
     }
}

こんな場合は、以下のように「WHERE 1 = 1」を最初に書いておけば、常に AND をつけることができ、コードがスッキリする。

StringBuilder sql = new StringBuilder();
sql.append("SELECT xxx, ... FROM xxx WHERE 1 = 1");
if (条件1) {
     sql.appned(" AND hoge = ?");
}
if (条件2) {
     sql.append(" AND foo = ?");
}
if (条件3) {
     sql.append(" AND bar = ?");
}