持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第14天,点击查看活动详情
动态SQL
Mybatis框架的动态SQL技术是一种根据特定条件动态拼装SQL语句的功能
,它存在的意义是为了解决 拼接SQL语句字符串的痛点问题
if和where标签
<select id="getEmpByCondition1" resultType="Emp">
select * from t_emp where 1=1
<if test="empName !=null and empName != '' "> and emp_name=#{empName}
</if><if test="age !=null and age != '' ">and age=#{age}</if>
<if test="gender !=null and gender != '' ">and gender=#{gender}</if>
</select>
<!-- if通过test属性中的表达式判断标签中的内容是否邮箱 是否会拼接到sql中
2.where
a.若where标签中有条件成立 会自动生成where关键字
b.会自动将where标签中内容前多余的and去掉,但是内容后多余的and无法去掉
c.若where标签中没有任何一个条件成立,则where没有任何功能-->
<select id="getEmpByCondition" resultType="Emp">
select * from t_emp
<where>
<if test="empName !=null and empName != '' ">
and emp_name=#{empName}
</if>
<if test="age !=null and age != '' ">
and age=#{age}
</if>
<if test="gender !=null and gender != '' ">
and gender=#{gender}
</if>
</where>
</select>
在使用 if拼接查询出现条件都对却查不出数据的情况
上网查找资料最后发现应该是数据库的编码问题更改jdbc.properties中的jdbc.url=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=UTF-8
再次查询出现数据
trim标签
<!-- 3.trim prefix,suffix 在标签中内容前面或后面添加指定内容
perfixOverrides,suffixOverrides:在标签中内容前面或后面去掉指定内容-->
<select id="getEmpByCondition" resultType="Emp">
select * from t_emp
<trim prefix="where" suffixOverrides="and">
<if test="empName !=null and empName != '' ">
emp_name=#{empName} and
</if>
<if test="age !=null and age != '' ">
age=#{age} and
</if>
<if test="gender !=null and gender != '' ">
gender=#{gender}
</if>
</trim>
</select>
#### foreach批量处理
<!-- void insertMoreEmp(@Param("emps") List<Emp> emps);-->
<insert id="insertMoreEmp" >
insert into t_emp values
<foreach collection="emps" item="emp" separator=",">
(null,#{emp.empName},#{emp.age},#{emp.gender},null)
</foreach>
</insert>
<!-- void deleteMoreEmp(@Param("empIds") Integer empIds);-->
<delete id="deleteMoreEmp1">
delete from t_emp where emp_id in
<foreach collection="empIds" item="empId" separator="," open="(" close=")">
#{empId}
</foreach>
</delete>
<delete id="deleteMoreEmp">
delete from t_emp where
<foreach collection="empIds" item="empId" separator="or">
emp_id = #{empId}
</foreach>
</delete>
<!-- foreach
collection设置要循环的数组或集合
item 用一个字符串表示数组或集合中的每一个数据
separator 设置每次循环的数据之间的分隔符
open 循环的所有内容以什么开始
close 循环的所有内容以什么结束-->
插入的格式
删除的第一种格式
删除的第二种格式
sql标签
<!--sql片段
可以记录一段sql,在需要用的地方使用include标签进行引用
<sql id="empColumns">
emp_id,emp_name,age,gender,dept_id
</sql>
<include refid="empColumns"></include>-->
引入效果