1:首先说一下#{}和${}和区别:
(1)#{}:
- mybatis在处理的时候会将#{username} 处理成?,用于参数传递时占位
- 当传入的参数是字符串时,会自动加上’'将传递的值括起来
- mapper接口方法中的参数与xml文件中是按照参数位置索引对应的,不是根据参数的名称,但是建议最好一致。
(2)¥{}:
${}:
- 字符串拼接
mapper接口方法中的参数与xml文件中是按照参数位置索引对应的,不是根据参数的名称,但是建议最好一致。
- mybatis在处理的时候会直接拼接在传递的sql上,不会生成占位的?符号
- 可以用于创建统一的方法,比如对所有表按照id查询。
- select * from ${tableName} where id = #{id} -----> mybatis操作后:select * from student where id = ‘7dsj’
分支结构: 如果只需要一个条件有效,则使用分支结构用法.
<!
如果只需要一个条件有效,则使用分支结构用法.
<select id="findChoose" resultType="User">
select * from demo_user
<where>
<choose>
<when test="name !=null">
name =
</when>
<when test="age !=null">
age =
</when>
<otherwise>
sex =
</otherwise>
</choose>
</where>
</select>
实现用户数据修改, 根据对象中不为null的数据完成修改操作:一般都用到,否则你在修改操作的时候会直接将没有修改的值变为null:
<!
set标签用法: 去除set条件中多余的,号
<update id="updateSqlSet">
update demo_user
<set>
<if test="name !=null"> name=
<if test="age !=null"> age =
<if test="sex !=null"> sex =
</set>
where id =
</update>
where-if:
<!
核心思想: 自动判断是否为null,
如果为null,该字段不参与sql
动态Sql规则:
1. <if test="写判断条件,可以直接获取属性值"></if>
true: 会拼接 字段条件
false: 不会拼接字段条件
2. 多余的关键字
由于动态sql拼接必然会导致多余的and 或者 or
3. where标签说明 可以去除 where后边多余的and 或者 or
<select id="findSqlWhere" resultType="User">
select * from demo_user
<where>
<if test="id != null"> id =
<if test="name != null">and name =
<if test="age != null ">and age =
<if test="sex != null ">and sex =
</where>
</select>
|