一、if 元素
如果什么 …..那么什么…….. ——->通常用于判断参数,进行sql语句的动态拼接
1、 传入的参数是一个 实体对象 :
<select id="selectUserLike" resultType="entity.User" parameterType="entity.User">
select * from user where 1=1
<!-- parameterType指传入的参数类型 这里传入的是一个实体类 -->
<!-- if判断时需要保证你 test="loginName!=null and loginName!=''" 中判断的条件一定是实体类的属性-->
<!-- 即loginName 是 实体entity.User 中的一个属性 -->
<if test="loginName!=null and loginName!=''">
and loginName =#{loginName}
</if>
<if test="userId!=null">
<!--1.处理特殊字符 CDATA节中的内容不会做特殊处理 -->
<!--2.处理特殊字符(<是< 号的意思) and userid<#{userId} -->
<![CDATA[and userid<#{userId}]]>
</if>
</select>
2、 传入的参数是一个或多个 参数(参数注解 @param) :
<!-- 根据id 查询一个用户 -->
<select id="selectUserById" resultType="entity.User">
select * from user where 1=1
<if test="id!=null">
and userid=#{id}
</if>
</select>
转换成使用接口的方式——->接口( UserMapper.xml 对应的接口 ) 中的方法为
/**
*根据用户id 查询用户
*/
public User selectUserById(@param("id") int userId);
//映射的sql 语句中并未表明入参类型 且 判断的变量是 id , 此时接口中的变量使用的是 userId(语义化更强)
//为了避免出现异常情况 此时应当使用注解 (@param("id"))---->注解的变量名和sql映射中判断的变量名要相同
//注解相当于 为接口中的参数设置了一个key 这个key和对应sql映射中的if 判断的变量(id)相同
//当然多个参数也可使用 注解(@param(" ")) 的方式