Mybatis的映射文件中,前面我们的SQL都是**比较简单**的,有些时候业务逻辑复杂时,我们的SQL是动态变化的,此时在前面的学习中我们的SQL就不能满足要求了。
通过Mybatis提供的各种标签方法实现动态拼接Sql。
功能需求:根据性别和名字查询用户
Sql语句:
SELECT id, username, birthday, sex, address FROM user
WHERE sex = 1 AND username LIKE ‘%张%’
UserMapper.xml配置Sql,如下:
SELECT id, username, birthday, sex, address FROM `user` WHERE sex = #{sex} AND username LIKE #{username}Mapper接口
测试代码
@Test
public void testQueryUserByWhere() {
SqlSession sqlSession = this.sqlSessionFactory.openSession();
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);
}
sqlSession.close();
}
测试结果
如果注释掉 user.setSex(“1”),测试结果如下图:
测试结果二很显然不合理。
按照之前所学的,要解决这个问题,需要编写多个Sql,查询条件越多,需要编写的Sql就更多了,显然这样是不靠谱的。
解决方案,使用动态Sql的if标签