MybatisのSelectBuilderを利用する際にSqlクラスでunion(union all)を利用する方法

IT

MybatisのSelectBuilderにて動的SQLを組み立てる際に、Sqlクラスを利用する方は多いかと思います。
なぜかSqlクラスでは、Union(Union All)メソッドが存在しないので、通常のやり方では実装できません。
ここでは、Union(Union All)を使うための簡単な方法を記載します。

1.作りたいSQLは下記とします。
※便宜上簡単なSQLとしております。

select user_id,user_name,sex
from A_USER_TBL
union
select user_id,user_name,sex
from B_USER_TBL;

2.union句を利用するためには、下記のように2度にわけて記載すればOKです。

class UserProvider{
public String selectUserList(){
//ひとつ目A_USER_TBLのSelect文を作成して、その結果をStringで取得
String sql = (new SQL(){{
{
SELECT(“user_id”);
SELECT(“user_name”);
SELECT(“sex”);
FROM(“A_USER_TBL”);
}
}}).toString();

//UNION句を付与 ※前後にスペースが必須
//実際には定数にしておく方が良いと思います

sql = sql + ” UNION “;
//ふたつ目B_USER_TBLのSelect文を作成して、その結果をStringで取得して追加する。
sql = sql + (new SQL(){{
{
SELECT(“user_id”);
SELECT(“user_name”);
SELECT(“sex”);
FROM(“B_USER_TBL”);
}
}}).toString();

//後は返却するだけです。
return sql;
}

結局のところ各種メソッド(SELECT()やFROM())で組み立てたSQL文をString型で返却しているだけですので、
2つのSelectの結果の間にUnion句を追加してあげるだけで大丈夫でした。

タイトルとURLをコピーしました