MyBatisは、プレーンSQLクエリ、ストアドプロシージャ、高度なマッピングをサポートする優れた永続レイヤーフレームワークです。 MyBatisは、ほぼすべてのJDBCコードとパラメーターの手動設定と、結果セットの検索カプセル化を排除します。 MyBatisは、構成とオリジナルマッピング、マッピングインターフェイス、JavaのPOJO(プレーンオールドJavaオブジェクト)に、データベース内のレコードに簡単なXMLまたはアノテーションを使用できます。
Mybatisがますます人気が高まっているので、誰もがその利点を知っているので、重要な点について話すだけではありません。
MyBatisは動的なSQL関数を提供します。 <if> <when> <where> <それ以外の場合<foreach>などを使用できるため、条件に応じて生成された動的なSQLを記述できます。ただし、真ん中には、頻繁に使用する<if>タグの小さな誤解があります。通常の例を挙げましょう:
<select id = "findactiveblogwithtitlike" parametertype = "blog" resulttype = "blog"> select * from blog = 'active' <if test = "title!= null"> and#{title} </if> </select>上記の例では、タイトルがnullに等しくない場合、<if>タグの条件がスプライスされるため、SQLステートメントが動的になります。
しかし、私たちがすべての条件を判断するとき、あなたはこのように書きますか:
<select id = "findactiveblogwithtitlike" parametertype = "blog" resulttype = "blog"> select * from blog where <if est = "userid!= null"> state = 'active' </if> <if> <if> "
問題ありませんよね?少なくとも構文的に優れていますが、少なくとも正常にSQLを生成できます。
しかし、すべての条件がnullであるとき、何が起こるかに気づいたかどうかはわかりません。
[ブログから]を選択します
見たことがありますか?そのようなSQLは正常に実行できますか?
答えはもちろんノーです。
それで、私は何をすべきですか?次に、動的なSQLを記述するときに、すべての条件が真実でない場合にすべての条件が発生するかどうか、および条件が1つしかないかどうかを考慮してください。そうしなければならないのは、すべての条件をラップするために<where>タグを追加することです。
<select id = "findactiveblogwithtitlelike" parametertype = "blog" resulttype = "blog"> select * from blog <where> <where> <"userid!= null"> state = 'active' </if> <if> "if>" if> "if>" null "> and title like#{title}このようにして、すべての条件が真でない場合、ここで綴られません。
この時点で、賢い友人は、最初の条件が真実ではなく、2番目の条件が真である場合、SQLがこのようになることを発見しました。
[#{title}のようにブログからselect * honeand titleのようにタイトル心配しないでください。<if>タグを使用して条件を囲むと、自動的に削除されます。
上記は、編集者による動的SQLタグを使用してMyBatisが紹介するという小さなtrapです。それがあなたに役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!