Doma mysql_Doma

条件コメント

ifとend

条件分岐を示す式コメントを条件コメントと呼びます。

構文は、次のとおりです。

/*%if 条件式*/ ~ /*%end*/

条件式は、結果がbooleanもしくはjava.lang.Boolean型と評価される式でなければいけません。

例を示します。

select * from employee where

/*%if employeeId != null */

employee_id = /* employeeId */99

/*%end*/

上記のSQL文は、 employeeIdが nullでない場合 次のような準備された文に変換されます。

select * from employee where employee_id = ?

このSQL文は、 employeeIdがnullの場合に次のような準備された文に変換されます。

select * from employee

ifの条件が成り立たない場合にifの外にあるWHERE句が出力されないのは、WHEREや HAVINGの自動除去機能が働いているためです。

条件コメントにおけるWHEREやHAVINGの自動除去

条件コメントを使用した場合、条件の前にあるWHEREやHAVINGについて、自動で出力の要/不要を判定します。

たとえば、次のようなSQLでemployeeIdが nullの場合、

select * from employee where

/*%if employeeId != null */

employee_id = /* employeeId */99

/*%end*/

/*%if ~*/の前の whereは自動で除去され、次のSQLが生成されます。

select * from employee

条件コメントにおけるANDやORの自動除去

条件コメントを使用した場合、条件の後ろにつづくANDやORについて、自動で出力の要/不要を判定します。

たとえば、次のようなSQLでemployeeIdが nullの場合、

select * from employee where

/*%if employeeId != null */

employee_id = /* employeeId */99

/*%end*/

and employeeName like 's%'

/*%end*/の後ろの and は自動で除去され、次のSQLが生成されます。

select * from employee where employeeName like 's%'

elseifとelse

/*%if 条件式*/ と /*%end*/ の間では、

elseifやelseを表す次の構文も使用できます。

/*%elseif 条件式*/

/*%else*/

例を示します。

select

*

from

employee

where

/*%if employeeId != null */

employee_id = /* employeeId */9999

/*%elseif department_id != null */

and

department_id = /* departmentId */99

/*%else*/

and

department_id is null

/*%end*/

上のSQLは、employeeId != null が成立するとき実際は次のSQLに変換されます。

select

*

from

employee

where

employee_id = ?

employeeId == null && department_id != null が成立するとき、実際は次のSQLに変換されます。

department_idの直前のANDは自動で除去されるため出力されません。

select

*

from

employee

where

department_id = ?

employeeId == null && department_id == null が成立するとき、実際は次のSQLに変換されます。

department_idの直前のANDは自動で除去されるため出力されません。

select

*

from

employee

where

department_id is null

過去との互換性のため、/*%if 条件式*/ と /*%end*/ の間では、

行コメントを使用した次の構文も使用できます。

特に理由がない限り、ブロックコメントの /*%elseif 条件式*/ や /*%else*/ を使用してください。

--elseif 条件式--

--else

elseifやelseを行コメントで表した場合の例を示します。

select

*

from

employee

where

/*%if employeeId != null */

employee_id = /* employeeId */9999

--elseif department_id != null -- department_id = /* departmentId */99

--else department_id is null

/*%end */

ネストした条件コメント

条件コメントはネストさせることができます。

select * from employee where

/*%if employeeId != null */

employee_id = /* employeeId */99

/*%if employeeName != null */

and

employee_name = /* employeeName */'hoge'

/*%else*/

and

employee_name is null

/*%end*/

/*%end*/

条件コメントにおける制約

条件コメントのifとendはSQLの同じ節に含まれなければいけません。

節とは、SELECT節、FROM節、WHERE節、GROUP BY節、HAVING節、ORDER BY節などです。

次の例では、ifがFROM節にありendがWHERE節にあるため不正です。

select * from employee /*%if employeeId != null */

where employee_id = /* employeeId */99 /*%end*/

また、ifとendは同じレベルの文に含まれなければいけません。

次の例では、ifが括弧の外にありendが括弧の内側にあるので不正です。

select * from employee

where employee_id in /*%if departmentId != null */(... /*%end*/ ...)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值