MyBatis | プログラムでSQLを動的に生成 | 各メソッドの使い方について

SELECT

new SQL() {{
    SELECT("foo");
    SELECT("bar");
    SELECT("fizz, buzz");
    FROM("foo_table");
}};
SELECT foo, bar, fizz, buzz FROM foo_table 
  • 連続して書くと、各項目は自動的にカンマで区切られる。
  • 明示的にカンマ区切りの文字列を渡すこともできる。
  • 末尾に不要なカンマがある場合、それは削除されない。

FROM

new SQL() {{
    SELECT("*");
    FROM("foo_table");
    FROM("bar_table");
}};
SELECT * FROM foo_table, bar_table 
  • FROMを連続して書くと、FROM句がカンマ区切りで列挙される。

WHERE

new SQL() {{
    SELECT("*");
    FROM("foo_table");
    WHERE("foo = ?");
    WHERE("bar = ?");
    AND();
    WHERE("fizz = ?");
    WHERE("buzz = ?");
    OR();
    WHERE("hoge = ?");
    WHERE("fuga = ?");
}};
SELECT *
  FROM foo_table
 WHERE (
       foo = ?
       AND bar = ?
 ) AND (
       fizz = ?
       AND buzz = ?
 )  OR (
       hoge = ?
       AND fuga = ?
 ) 
  • WHERE()メソッドでWHERE句を生成できる。
  • WHERE()メソッドを連続して書くとAND条件で接続される。
  • AND()およびOR()メソッドを使用すると、AND、ORで接続できる。

INNER_JOIN

new SQL() {{
    SELECT("*");
    FROM("foo_table");
    INNER_JOIN("bar_table on bar_table.id = foo_table.bar_id");
    INNER_JOIN("fizz_table on fizz_table.id = bar_table.fizz_id");
}};
    SELECT *
      FROM foo_table
INNER JOIN bar_table
        on bar_table.id = foo_table.bar_id
INNER JOIN fizz_table
        on fizz_table.id = bar_table.fizz_id 
  • INNER_JOIN()メソッドでINNER JOIN句を追加できる。
  • 結合条件の文字列(on~)を書く必要がある。

ORDER_BY

new SQL() {{
    SELECT("*");
    FROM("foo_table");
    ORDER_BY("foo");
    ORDER_BY("bar desc");
}};
SELECT * FROM foo_table ORDER BY foo, bar desc 
  • ORDER_BY()メソッドでORDER BY句を生成できる。
  • 連続して書くと自動的にカンマで区切られる。

GROUP_BY

new SQL() {{
    SELECT("foo, bar");
    FROM("foo_table");
    GROUP_BY("foo");
    GROUP_BY("bar");
}};
SELECT foo, bar FROM foo_table GROUP BY foo, bar 
  • GROUP_BY()メソッドでGROUP BY句を生成できる。
  • 連続して書くと自動的にカンマで区切られる。

HAVING

new SQL() {{
    SELECT("foo, count(*)");
    FROM("foo_table");
    GROUP_BY("foo");
    HAVING("0 < count(*)");
    HAVING("count(*) < 100");
}};
  SELECT foo
        ,count(*)
    FROM foo_table
GROUP BY foo
  HAVING (
         0 < count(foo)
         AND count(foo) < 100
  )
  • HAVING()メソッドでHAVING句を生成できる。
  • WHERE()と同じ動作をする。連続して書くとANDで接続される。

INSERT_INTO, VALUES

new SQL() {{
    INSERT_INTO("foo_table");
    VALUES("foo_value", "#{foo_value}");
    VALUES("fizz_value, buzz_value", "#{fizz_value}, #{buzz_value}");
}};
INSERT INTO foo_table (foo_value, fizz_value, buzz_value) VALUES (?, ?, ?) 
  • INSERT_INTO()メソッドでINSERT文を生成できる。
  • VALUES()メソッドで登録する項目を定義できる。
    • 1つ目の引数には設定する項目名を書く。
    • 2つ目の引数にはVALUES句で指定する値を渡す。
    • 複数記述すると自動的にカンマで区切られる。

UPDATE, SET

new SQL() {{
    UPDATE("foo_table");
    SET("foo_value = #{foo_value}");
    SET("bar_value = #{bar_value}");
    WHERE("id = #{id}");
}};
UPDATE foo_table SET foo_value = ?, bar_value = ? WHERE (id = ?)
  • UPDATE()メソッドでUPDATE文を生成できる。
  • SET()メソッドでSET句を生成できる。
  • 連続して書くと自動的にカンマで区切られる。

DELETE_FROM

new SQL() {{
    DELETE_FROM("foo_table");
    WHERE("id = #{id}");
}};
DELETE FROM foo_table WHERE (id = ?) 
  • DELETE_FROM()メソッドでDELETE文を生成できる。