微服务 教程
1085个小节阅读:196.6k
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
一个查询的方法的Sql语句不一定是固定的。比如电商网站的查询商品,用户使用不同条件查询,Sql语句就会添加不同的查询条件。此时就需要在方法中使用动态Sql语句。
<if>
标签内的Sql片段在满足条件后才会添加,用法为:<if test="条件">
。例如:根据不同条件查询用户:
持久层接口添加方法
xxxxxxxxxx
// 用户通用查询
List<User> findByCondition(User user);
映射文件添加标签
xxxxxxxxxx
<select id="findByCondition" parameterType="com.itbaizhan.pojo.User" resultType="com.itbaizhan.pojo.User">
select * from user where 1 = 1
<if test="username != null and username.length() != 0">
and username like #{username}
</if>
<if test="sex != null and sex.length() != 0">
and sex = #{sex}
</if>
<if test="address != null and address.length() != 0">
and address = #{address}
</if>
</select>
编写测试方法
xxxxxxxxxx
public void testFindByCondition(){
User user = new User();
List<User> users1 = userMapper2.findByCondition(user);
//users1.forEach(System.out::println);
user.setUsername("%尚学堂%");
List<User> users2 = userMapper2.findByCondition(user);
users2.forEach(System.out::println);
user.setAddress("北京");
List<User> users3 = userMapper2.findByCondition(user);
users3.forEach(System.out::println);
}
if中的条件不能使用&&/||,而应该使用and/or
if中的条件可以直接通过属性名获取参数POJO的属性值,并且该值可以调用方法。
where后为什么要加1=1?
任意条件都可能拼接到Sql中。如果有多个条件,从第二个条件开始前都需要加And关键字。加上1=1这个永久成立的条件,就不需要考虑后面的条件哪个是第一个条件,后面的条件前都加And关键字即可。
1. MyBaits的<if>
使用什么属性添加条件:
A test
B open
C close
D iter
2. MyBaits的<if>
中,多个条件同时满足需要用连接:
A ||
B &&
C &
D and
1=>A 2=>D