MyBatis动态SQL——if标签

本文记录Java学习过程中遇到的MyBatis动态SQL——if标签~

示例代码(UserMapper.xml):

<!-- 根据条件查询用户 -->
<select id="queryUserByWhere" parameterType="user" resultType="user">
	SELECT id, username, birthday, sex, address FROM `user`
	WHERE sex = #{sex} AND username LIKE
	'%${username}%'
</select>

示例代码(UserMapper.java):

List<User> queryUserByWhere(User user);

示例代码(UserMapperTest.java):

@Test
public void testQueryUserByWhere() {
	// mybatis和spring整合,整合之后,交给spring管理
	SqlSession sqlSession = this.sqlSessionFactory.openSession();
	// 创建Mapper接口的动态代理对象,整合之后,交给spring管理
	UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

	// 使用userMapper执行根据条件查询用户
	User user = new User();
	user.setSex("1");
	user.setUsername("张");

	List<User> list = userMapper.queryUserByWhere(user);

	for (User u : list) {
		System.out.println(u);
	}

	// mybatis和spring整合,整合之后,交给spring管理
	sqlSession.close();
}

但是,如果注释掉user.setSex("1"),结果就为0了,这肯定是不合理的。

按照之前所学的,要解决这个问题,需要编写多个SQL,查询条件越多,需要编写的SQL就更多了,显然这样是不靠谱的。

可以使用动态SQL的if标签来解决这个问题。

示例代码(UserMapper.xml):

<!-- 根据条件查询用户 -->
<select id="queryUserByWhere" parameterType="user" resultType="user">
	SELECT id, username, birthday, sex, address FROM `user`
	WHERE 1=1
	<if test="sex != null and sex != ''">
		AND sex = #{sex}
	</if>
	<if test="username != null and username != ''">
		AND username LIKE '%${username}%'
	</if>
</select>

注意:字符串类型的数据需要要做不等于空字符串校验。

标签: none