mybatisの動的タグ

参考資料:1。mybatis動的SQLの動的タグ
2. MyBatis動的SQL(詳しく見てみると、将来的にSQLを作成する方がはるかに良いでしょう)

1つは、mybatisの動的ラベルです。

1.1、タグの場合

多くの場合、条件付きクエリの後にいくつかの条件に配置されます。

1.1.1、空でない判断を下すことができます(属性テストには1つのフィールドしかありません)

    <select id="selectByAll" resultType="com.xuecheng.domain.Tab1">
        SELECT * FROM tab1
        where size = 11
        <if test="id != null">
            and id = #{id}
        </if>
    </select>

エラーが報告される場合が
あります:org.apache.ibatis.reflection.ReflectionException2つの解決策があります:
1。パラメーターの前にコメントを追加します

    public List<Tab1> selectByAll(@Param("id") int id);

2.ラベルテスト属性で、_parameterを使用します

        <if test="_parameter != null">
            and id = #{id}
        </if>

1.1.2、空でない判断を実行できます(属性テストには2つのフィールドしかありません)

    <select id= "findActiveBlogLike"
            resultType= "Blog" >
        SELECT * FROM BLOG WHERE state = 'ACTIVE'
        <if test= "title != null" >
            AND title like #{title}
        </ if >
        
        <if test= "author != null and author.name != null" >
            AND author_name like #{author.name}
        </ if >
    </select>

2.2、タグを含める<include id =" ">

このタグは、SQLステートメントが複数回使用された後に使用できます。属性refidの<sql id=" ">値は、タグの属性ID値です。

2.3、タグを選択

「whenelse」タグを選択すると、ifelseのロジックを実現するのに役立ちます。選択タグには、少なくとも1つ、それ以外の場合は最大で1つあります。


    <select id="selectByIdOrName" resultType="xuecheng.domain.Student" parameterType="xuecheng.domain.Student">
        select
        *
        from student
        where 1=1
        <choose>
            <when test="studentId != null">
                and student_id=#{studentId}
            </when>
            <when test="name != null and name != ''">
                and name=#{name}
            </when>
            <otherwise>
                and 1=2
            </otherwise>
        </choose>
    </select>

2.4、トリムタグ

whereタグとsetタグはどちらもトリムタグの1つのタイプにすぎません

2.4.1、トリムタグの属性

プレフィックス:トリム要素にコンテンツが含まれている場合、プレフィックスで指定されたプレフィックスを追加します

prefixOverrides:トリム要素にコンテンツが含まれている場合、prefixOverridesで指定されたプレフィックスを削除します

接尾辞:トリム要素にコンテンツが含まれている場合は、接尾辞で指定された接尾辞を追加します

SupplementOverrides:トリム要素にコンテンツが含まれている場合、suffixOverridesで指定されたサフィックスを削除します

2.5、foreachタグ

2.5.1foreachタグのいくつかの属性

ollection:必須、コレクション/配列/マップの名前。

アイテム:変数名。つまり、反復オブジェクトから取得されたすべての値

index:インデックスの属性名。反復オブジェクトがマップの場合、値はマップのキーです。

open:ループの最初の文字列

close:ループの最後の文字列

セパレーター:各ループのセパレーター

2.5.2、バッチで挿入できます

挿入されるデータは次のとおりです。同じタイプのコレクション/配列

2.5.3、どこの後ろで使用することができます

2.6、バインドタグ

bindタグは、OGNL式を使用してコンテキスト変数を定義します。これは、私たちが使用するのに便利です。
注:MySQLでは、この関数は複数のパラメーターをサポートしますが、Oracleでは2つのパラメーターのみがサポートされます。次に、bindを使用して、SQLが2つのデータベースをサポートするようにします。

<if test="name != null and name !=''">
     <bind name="nameLike" value="'%'+name+'%'"/>
     and name like #{nameLike}
</if>

おすすめ

転載: blog.csdn.net/weixin_43983411/article/details/109440967