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文を生成できる。