<if>元素是比较常用的判断语句
在实际应用中,可能会通过多个条件来查询某个数据。通过if元素可以实现多个条件查询某个数据。
CM1.xml(一个mapper)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace表示命名空间-->
<mapper namespace="com.itheima.mapper.CM1">
<!-- parameterType 传入的参数类型 -->
<!-- resultType 接收的参数类型 -->
<select id="A" parameterType="com.itheima.po.Account" resultType="com.itheima.po.Account">
select * from account where 1=1
<if test="username != null and username != '' ">
and username like concat('%',#{username},'%')
</if>
<if test="balance != null and balance >= 0">
and balance > #{balance}
</if>
<!--i f标签的test属性为判断的条件-->
</select>
</mapper>
拼接手法:
基础的SQL语句:
select * from account where 1=1
< if test="username != null and username != ‘’ " >
如果用户名(username)不为空的话,SQL语句为:
select * from account where 1=1 and username like concat('%',#{username},'%')
< if test=“balance != null and balance >= 0”>
如果balance(余额)也不为空且大于0的话,SQL语句为:
select * from account where 1=1 and username like concat('%',#{username},'%') and balance > #{balance}
如果前一个if条件不成立,后一个条件成立的话,SQL语句为:
select * from account where 1=1 and balance > #{balance}
小小的贴段代码
@Test
public void findTest() {
SqlSession session=MyBatisUtils.getSqlSession();
Account account=new Account();
account.setUsername("王");
account.setBalance(700);
List<Account> users=session.selectList("com.itheima.mapper.CM1.A", account);
session.close();
for(Account a:users) {
System.out.println(a.toString());
}
}
结果