MyBatisのONLチュートリアル
8461 ワード
MyBatisのONLチュートリアル
一部の人はMyBatisにONLが使われていることを知らないかもしれませんが、ONLが使われていることを知っていますが、MyBatisではどうやって使うか分かりません.
ONL関連のコンテンツを検索すれば、通常の結果はStrutsと関係があります.MyBatisに関するものはきっと見つけられません.Strutsの使い方と似ていますが、別の方法で理解するのは難しいです.
MyBatis常用ONL表現 上記の内容はMyBatisで使用するONL表式だけです.完全な表現はここをクリックしてください.
MyBatisの中でOGALはどこで使えますか?
MyBatisパラメータを深く理解すると、このブログでONLといくつかの特殊な使い方が言及されているという印象があるかもしれません.
もし見ていないなら、時間を見つけてみてください.上記のブログは分かりにくいですが、理解したら役に立ちます.
MyBatisでONLが使えるところは二つあります.ダイナミックSQL表現 $paramパラメータの中 上の二つのところはMyBatisで処理する時は全部ONLで処理します.
これら2つの場合の使い方を例に挙げて説明します.
1.動的SQL表現における
例1:
例二:
注:対
一部の人はMyBatisにONLが使われていることを知らないかもしれませんが、ONLが使われていることを知っていますが、MyBatisではどうやって使うか分かりません.
ONL関連のコンテンツを検索すれば、通常の結果はStrutsと関係があります.MyBatisに関するものはきっと見つけられません.Strutsの使い方と似ていますが、別の方法で理解するのは難しいです.
MyBatis常用ONL表現
e1 or e2
e1 and e2
e1 == e2
、e1 eq e2
e1 != e2
、e1 neq e2
e1 lt e2
:小e1 lte e2
:以下イコール、その他gt(大)、gte(大なり)e1 in e2
e1 not in e2
e1 + e2
、e1 * e2
、e1/e2
、e1 - e2
、e1%e2
・!e
、not e
:いいえ、逆e.method(args)
呼び出し方法e.property
対象属性値e1[ e2 ]
インデックスで値を取るList
配列とMap
@class@method(args)
呼び出し系の静的方法@class@field
呼び出し系の静的フィールド値MyBatisの中でOGALはどこで使えますか?
MyBatisパラメータを深く理解すると、このブログでONLといくつかの特殊な使い方が言及されているという印象があるかもしれません.
もし見ていないなら、時間を見つけてみてください.上記のブログは分かりにくいですが、理解したら役に立ちます.
MyBatisでONLが使えるところは二つあります.
これら2つの場合の使い方を例に挙げて説明します.
1.動的SQL表現における
例1:
<select id="xxx" ...>
select id,name,... from country
<where>
<if test="name != null and name != ''">
name like concat('%', #{name}, '%')
if>
where>
select>
上のコードのtestの値はONLで計算します.例二:
<select id="xxx" ...>
select id,name,... from country
<bind name="nameLike" value="'%' + name + '%'"/>
<where>
<if test="name != null and name != ''">
name like '${nameLike}'
if>
where>
select>
ここ
のvalue
値はONLで計算されます.注:対
${}
、 えば${nameLike}
.
ユニバーサルMapperでUUIDのキーをサポートしていますが、 Mapperでの には
ラベルが されています.このラベルは な を び しています.<bind name="username_bind"
value='@java.util.UUID@randomUUID().toString().replace("-", "")' />
このような は を に び すことができますが、 する を き すことができませんので、 が です.
2.${param}パラメータの
のlikeの では、 のような を うのが です.<select id="xxx" ...>
select id,name,... from country
<where>
<if test="name != null and name != ''">
name like '${'%' + name + '%'}'
if>
where>
select>
ここで して いているのは${'%' + name + '%'}
ではなく、%${name}%
この2つの の は じですが、 の は っています.
MyBatisで ${}
の 、ONLを ってこの を し、SQLで する${xxx}
、ONLで するのは${ }
だけです.
ここでの は、ONLがサポートするすべての であり、 き みが であり、 の り を び すことができ、 な を び すこともできる.
:ONLを って の を する.
で ったのはONLの な い です.ここでONLを げて、データベースの を する を します.
この は Mapperの で、 にテーブル を し、 されたテーブル でテーブルを することができます.この が したのはOGALを ったことです.
まず、すべてのテーブルがこの を としているわけではないので、パラメータ(インターフェース はエンティティクラスのパラメータしかない)オブジェクトがこのインターフェースを する 、ダイナミックなテーブル を することができるインターフェースを した.public interface IDynamicTableName {
/**
* - , null '',
*
* @return
*/
String getDynamicTableName();
}
XMLに を く に します.<if test="@tk.mybatis.mapper.util.OGNL@isDynamicParameter(_parameter)
and dynamicTableName != null
and dynamicTableName != ''">
${dynamicTableName}
if>
<if test="@tk.mybatis.mapper.util.OGNL@isNotDynamicParameter(_parameter)
or dynamicTableName == null
or dynamicTableName == ''">
defaultTableName
if>
_parameter
されているかどうかIDynamicTableName
インターフェースの な き ができなくなりましたので、 な を いました./**
*
*
* @param parameter
* @return true ,false
*/
public static boolean isDynamicParameter(Object parameter) {
if (parameter != null && parameter instanceof IDynamicTableName) {
return true;
}
return false;
}
/**
* b
*
* @param parameter
* @return true ,false
*/
public static boolean isNotDynamicParameter(Object parameter) {
return !isDynamicParameter(parameter);
}
その は
の によって される.
また、XML の つdynamicTableName
このパラメータはgetDynamicTableName
によって られたものであり、MyBatisは に するgetter
を いて を しており、field
によるものではない.
に
にMyBatisのONLの い を りたいなら、 でいくつかの を いてテストして んでみて、 を かしてテストするのはいい です.
(''pre.prettyprettyprint code').each(function(){var lins=$(this).text().split('