您当前的位置: 首页 >  sql

杨林伟

暂无认证

  • 3浏览

    0关注

    3337博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

28MyBatis - 动态SQL的 if标签

杨林伟 发布时间:2019-04-03 17:24:34 ,浏览量:3

MyBatis动态SQL的if标签 引出问题

1)UserMapper.xml配置sql,如下:



	SELECT id, username, birthday, sex, address FROM `user`
	WHERE sex = #{sex} AND username LIKE
	'%${username}%'

2)Mapper接口 编写Mapper接口,如下图: 在这里插入图片描述 3)测试方法 在UserMapperTest添加测试方法,如下:

@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 list = userMapper.queryUserByWhere(user);

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

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

4)运行结果 在这里插入图片描述 如果注释掉 user.setSex(“1”),测试结果如下图: 在这里插入图片描述 测试结果二很显然不合理。

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

解决方案,使用动态sql的if标签。

使用if标签

改造UserMapper.xml,如下:



	SELECT id, username, birthday, sex, address FROM `user`
	WHERE 1=1
	
		AND sex = #{sex}
	
	
		AND username LIKE
		'%${username}%'
	

注意字符串类型的数据需要做不等于空字符串校验。 在这里插入图片描述

关注
打赏
1662376985
查看更多评论
立即登录/注册

微信扫码登录

0.1199s