MyBatis 动态元素 where元素

< where > 标签的作用:
  < where >标签会自动判断sql语句,当自己身体里存在sql语句时,会在原sql语句的基准上拼接一个where 然后加上身体里的sql语句。并且会自动去除where关键字身后的第一个and或者or。
  where标签的出现,使我们拼接sql时不用以前那样写成“…… where 1=1”这样让人费解的语句,简化了我们的sql语句,提高了效率。
  
实践一下:

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="W" parameterType="com.itheima.po.Account"
		resultType="com.itheima.po.Account">
		select * from account
		<where>
			<if test="username != null and username != '' ">
				and username like concat('%',#{username},'%')
			</if>
			<if test="balance != null and balance > 0">
				and balance > #{balance}
			</if>
		</where>

	</select>

</mapper>

拼接手法:

我们来拼接下where标签身体里的sql语句

基础的SQL语句:

select * from account

当where标签下的if标签的条件都为真时:

拼接:原sql语句+where+and username like concat(’%’,#{username},’%’) and balance > #{balance}

select * from account where username like concat('%',#{username},'%') and balance > #{balance}

where身体里存在了sql语句,于是它自动为原sql语句添加了where关键字,并且去除了where身后的第一个and。

当where标签下的第一个if标签的条件为真时:

拼接:原sql语句+where+and username like concat(’%’,#{username},’%’)

select * from account where username like concat('%',#{username},'%')

当where标签下的第二个if标签的条件为真时:

拼接:原sql语句+where+and balance > #{balance}

select * from account where balance > #{balance}

当where标签下的所有if标签的条件为假时:

拼接:原sql语句+

select * from account

是的,没加东西,where标签看到自己身体里没有任何东西,于是就没有做任何拼接动作

开始实际测试一下吧:

第一步:把这个映射器配置到Mybatis的主要配置文件中去
这里不演示了
 
  
   
    
    
第二步:数据库数据
在这里插入图片描述
第三步:测试方法

//select where测试
	@Test
	public void whereTest() throws Exception {
		SqlSession session = MyBatisUtils.getSqlSession();// 获取会话

		Account account = new Account();
		account.setUsername("小明");
		account.setBalance(7000);

		List<Account> users = session.selectList("com.itheima.mapper.CM1.T5", account);
		session.close();// 关闭会话

		for (Account a : users) {
			System.out.println(a.toString());
		}
	}

测试结果:
在这里插入图片描述
通过实践表明,where子标签的确如我们上文所讲的那样拼接sql语句

注释掉用户名的结果

//account.setUsername("小明");
account.setBalance(7000);

在这里插入图片描述

注释掉所有数据的结果

//account.setUsername("小明");
//account.setBalance(7000);

在这里插入图片描述

好了,水平有限,where的实践到此结束!

MyBatis动态SQL中的一些元素 if、set、trim、choose、foreach、bind

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值