参考資料: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>