choose会从上到下选择一个when标签的test为true的sql执行。安全考虑,我们使用where将choose包起来,放置关键字多于错误。
<select id="findBySqlChoose" parameterType="com.heima.domain.User" resultMap="userMap"> select * from user <where> <choose> <when test="userName !=null and userName !='' "> username like #{userName} </when> <when test="userSex !=null and userSex !='' "> and sex = #{userSex} </when> <otherwise> and address like #{userAddress} </otherwise> </choose> </where> </select>
Test代码:
@Test public void findBySqlChooseTest(){ User u=new User(); u.setUserName(""); u.setUserSex("男"); u.setUserAddress("北京"); List<User>users=userDao.findBySqlChoose(u); for(User user : users){ System.out.println(user); } }