MyBatis動態SQL之choose和where的使用示例

首先在以前的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,歡迎指出不足之處,互相討論,謝謝。

相關文章
相關標籤/搜索