動的SQLは、SQLの動的生成です。
タグの場合
要件があると仮定します。ユーザーをクエリする場合、ユーザー名が「管理者」に等しくない場合、123456のパスワードも必要です。
データベースのデータは次のとおりです。
mybatisconfig.xml
<?xml version = "1.0" encoding = "utf-8"?> <!doctype configurationpublic " - // mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd" - > <typealiase> <typealias type = "jike.book.pojo.jikeuser" alias = "jikeuser"/> <typealias type = "jike.book.pojo.author" airas = "著者"/>> </typealiase> <環境= "環境=" development id = "> <transactionmanager type = "jdbc"> </transactionManager> <dataSource Type = "Pooled"> <プロパティ名= "ドライバー"値= "com.mysql.jdbc.driver"/> <プロパティ名= "url"値= " value = "****"/> </dataSource> </Environment> </environments> <mappers> <mapper resource = "jike/book/map/jikeuser.xml"/> </mappers> </configuration>
jikeuser.xml
<?xml version = "1.0" encoding = "UTF-8"?> < resultType = "jikeuser" parametertype = "jikeuser"> select * from jikebook.jikeuserwhere 1 = 1 <if test = "username!= 'admin'"> and#{password} </select> </mapper>テストクラス:
パッケージjike.book.test; import jike.book.pojo.jikeuser; Import org.apache.ibatis.io.resources; import org.apache.ibatis.session.sqlsession; import org.apache.ibatis.session.sclsessionfactory; import org.apache.ibatis.session.session.session.session.session. org.apache.ibatis.session.sqlsessionfactorybuilder; Import java.io.io.ioexception; Import java.io.reader; Import java.util.list;/*** datetime:2016/9/6 13:36* function:* Idea:*/public class testsql {public Static void main(args [] boid(args) resource = "Jike/book/map/mybatisconfig.xml"; reader reader = null; sqlsession session; try {reader = resources.getResourceasReader(resource);} catch(ioException e){e.printstacktrace();} sqlsessionfactory sqlmapper = new new sqlSessionFactoryBuilder()。build(reader); session = sqlmapper.opensession(); jikeuser jikeuser = new jikeuser(); jikeuser.setpassword( "123456"); list <jikeuser> userlist = session.selectlist( "secretsql"、jikeuser); {system.out.println( "username:"+user.getusername());} session.close();}}}実行中の結果は次のとおりです。
タグを選択します
現在、要件があるとします。ユーザーのクエリ、ユーザー名が空でない場合は、ユーザー名の条件を追加します。IDが空になっていない場合は、ID条件を追加します。
mybatisconfig.xmlは変更されません、追加してください。
<選択id = "selectjikeuserchoose" resulttype = "jikeuser" parametertype = "jikeuser"> select * from jikeuser where 1 = 1 <choice> <w test = "username!= null"> null </それ以外の場合> </chood> </select>
テストクラス:ユーザー名が空でないと仮定します。
パッケージjike.book.test; import jike.book.pojo.jikeuser; Import org.apache.ibatis.io.resources; import org.apache.ibatis.session.sqlsession; import org.apache.ibatis.session.sclsessionfactory; import org.apache.ibatis.session.session.session.session.session. org.apache.ibatis.session.sqlsessionfactorybuilder; Import java.io.io.ioexception; Import java.io.reader; Import java.util.list;/*** datetime:2016/9/6 13:36* function:* Idea:*/public class testsql {public Static void main(args [] boid(args) resource = "Jike/book/map/mybatisconfig.xml"; reader reader = null; sqlsession session; try {reader = resources.getResourceasReader(resource);} catch(ioException e){e.printstacktrace();} sqlsessionfactory sqlmapper = new new sqlSessionFactoryBuilder()。build(reader); session = sqlmapper.opensession(); jikeuser jikeuser = new jikeuser(); jikeuser.setUsername( "yen"); list <jikeuser> userlist = session.selectlist( "selectjikeuserchoose"、jikeuser); {system.out.println( "username:"+user.getusername());} session.close();}}}結果は次のとおりです。
ユーザー名の条件が設定されていないと仮定すると、つまり、jikeuser.setusername( "yen");:コメントをコメントしてください
ここで、マーカー、マーカーを設定します
選択の上記のクエリは、サブ接続条件が書かれているかどうかを判断できないことです。したがって、1 = 1を追加します。そして、それを追加すべきかどうかを判断できる場合。
<select id = "selectjikeuserwhere" resulttype = "jikeuser" parametertype = "jikeuser"> select * from jikeuser <where> <if> "username!= null"> and {username} {username} </if> <if> <if> <"id!= null"> iid =#=#=#= </</<セットタグインテリジェントな割り当ては、過剰を自動的に削除します "、"
<update id = "updateJikeUserset" parametertype = "jikeuser"> update jikeuser <set> <if test = "username!= null"> username =#{username}、</if> <"password!= null"> password =#{password}、</> </> <操作前のデータ:
操作:
操作結果:
<update id = "updateusertrim" parametertype = "jikeuser"> update jikeuser <trim refix = "set" suffixoverrides = "、" suffix = " "> password =#{password}、</if> </trim> </update>foreachタグ
通常、ループクエリまたはループ割り当てに使用されます
<選択id = "selectjikeuserforeach" resulttype = "jikeuser" parametertype = "list"> select * from jikeuser <where <where> id in <foreach "index =" index "collection =" open = "(" separtator = "、" close = ")">#{item}テスト:
上記は、MyBatis Dynamic SQLの詳細な説明であり、編集者が紹介したタグの例を選択、where、set、trim、foreachタグの例です。それがあなたに役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!