首先在以前的user表中,肯定一下表中的數據先
java
在以前的User.xml中添加SQL語句
sql
<select id="selectUserChoose" resultType="User" parameterType="User"> select * from BSuser where 1=1 <choose> //判斷用戶名,若是爲空就判斷ID,最後判斷密碼不爲空 <when test="userName!=null"> and userName like #{userName} </when> <when test="id!=0"> and id =#{id} </when> <otherwise> and password is not null </otherwise> </choose> </select>
在測試類中的try內寫入代碼session
try{ //動態SQL之 choose 與where User oneUser=new User(); oneUser.setUserName("%k%"); List<User> ap=session.selectList("selectUserChoose",oneUser); for(User temp:ap) { System.out.println("用戶ID="+temp.getId()+"用戶名="+temp.getUserName()); }
運行,輸出結果是測試
用戶ID=2用戶名=kobe01spa
用戶ID=3用戶名=kobe02code
用戶ID=8用戶名=kobe03xml
執行的SQL代碼是select * from user where 1=1 and userName like ? get
//whereio
在User.xml中添加class
<select id="selectUserWhere" resultType="User" parameterType="User"> select * from user <where> <if test="userName!=null"> and userName like #{userName} </if> <if test="id!=null"> and id =#{id} </if> </where> </select>
在測試類中寫入
try{ //動態SQL之where User oneUser=new User(); oneUser.setId(10); //where標記 List<User> ap=session.selectList("selectUserWhere",oneUser); for(User temp:ap) { System.out.println("用戶ID="+temp.getId()+"用戶名="+temp.getUserName()); }
輸出的結果爲 用戶ID=10用戶名=1
執行的SQL語句爲 select * from jikeuser WHERE id =?
where智能的去掉了sql語句中id前的and
若在setId前加上 oneUser.setUserName("%k%"); 輸出爲空
若加上後把id設爲3,則輸出爲 用戶ID=3用戶名=kobe02
where又智能的去掉了username前的and
如此便利用了MyBais的where動態控制輸出了。
以上即是MyBatis動態SQL中的choose和where,歡迎指出不足之處,互相討論,謝謝。