Mybatis动态SQL(where元素、set元素、if元素)
- where 元素只会在至少有一个子元素的条件返回 SQL 子句的情况下才去插入“WHERE”子句。而且,若语句的开头为“AND”或“OR”,where 元素也会将它们去除。
(也就是说where用在有多条if的条件的查询中,同时会过滤掉语句开头的AND、OR)
- if 元素可以对给予的对象再进行一次判断
- set元素可以用于动态包含需要更新的列,而舍去其它的。
1、创建一个用于搜索的动态SQl
(1)、在表对应的配置文件的mapping中加入以下select标签(那么它再查找的时候就会先对其元素判空)
1 <select id="search" resultMap="userMap"> 2 select * from usr1 3 <where> 4 <if test="username!=null"> 5 and username=#{username} 6 </if> 7 <if test="password!=null"> 8 and password=#{password} 9 </if> 10 </where> 11 </select>
(2)、在主方法中加入以下代码,(加载相应的配置文件,查询用户名为getchar、密码为1234的用户是否存在,这种判断在用户登录中往往比较有用)
1 config = Resources.getResourceAsStream("mybatis-config.xml"); 2 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(config); 3 4 SqlSession session = factory.openSession(); 5 UserDAO userDAO = session.getMapper(UserDAO.class); 6 User u = new User(); 7 u.setPassword("1234"); 8 u.setUsername("getchar"); 9 List<User> users = userDAO.search(u); 10 System.out.println(users.size()); 11 System.out.println(users);
(3)、这样实现查询的时候,就可以实现判断密码和账号是否为空