Mybatis动态SQL(where元素set元素if元素)

Posted GetcharZp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis动态SQL(where元素set元素if元素)相关的知识,希望对你有一定的参考价值。

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)、这样实现查询的时候,就可以实现判断密码和账号是否为空

以上是关于Mybatis动态SQL(where元素set元素if元素)的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis超强大的动态SQL大全

Mybatis超强大的动态SQL大全

MyBatis框架动态SQL

mybatis 动态 SQL

MyBatis基础:MyBatis动态SQL

Mybatis框架之动态SQL书写方式小结