MyBatisのONLチュートリアル

8461 ワード

MyBatisのONLチュートリアル
一部の人はMyBatisにONLが使われていることを知らないかもしれませんが、ONLが使われていることを知っていますが、MyBatisではどうやって使うか分かりません.
ONL関連のコンテンツを検索すれば、通常の結果はStrutsと関係があります.MyBatisに関するものはきっと見つけられません.Strutsの使い方と似ていますが、別の方法で理解するのは難しいです.
MyBatis常用ONL表現
  • e1 or e2
  • e1 and e2
  • e1 == e2e1 eq e2
  • e1 != e2e1 neq e2
  • e1 lt e2:小
  • e1 lte e2:以下イコール、その他gt(大)、gte(大なり)
  • e1 in e2
  • e1 not in e2
  • e1 + e2e1 * e2e1/e2e1 - e2e1%e2
  • !enot e:いいえ、逆
  • e.method(args)呼び出し方法
  • e.property対象属性値
  • e1[ e2 ]インデックスで値を取るList配列とMap
  • @class@method(args)呼び出し系の静的方法
  • @class@field呼び出し系の静的フィールド値
  • 上記の内容はMyBatisで使用するONL表式だけです.完全な表現はここをクリックしてください.
    MyBatisの中でOGALはどこで使えますか?
    MyBatisパラメータを深く理解すると、このブログでONLといくつかの特殊な使い方が言及されているという印象があるかもしれません.
    もし見ていないなら、時間を見つけてみてください.上記のブログは分かりにくいですが、理解したら役に立ちます.
    MyBatisでONLが使えるところは二つあります.
  • ダイナミックSQL表現
  • $paramパラメータの中
  • 上の二つのところは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('