目录
1.Mybatis动态SQL
MyBatis 的一个强大的特性之一通常是它的动态 SQL 能力。如果你有使用 JDBC 或其他相似框架的经验,你就明白条件地串联 SQL 字符串在一起是多么的痛苦,确保不能忘了空格或在列表的最后省略逗号,动态SQL可以彻底处理这种痛苦。
2.MyBatis 中用于实现动态 SQL 的元素
If
where
trim
set
choose (when, otherwise)
foreach
3.查所有
数据库student表中的数据如下!!!
在StudentDao类中写该方法
//查所有
List<Student> findStudents();
在StudentMapper.xml文件中写相应的SQL语句
<select id="findStudents" resultType="student">
select * from student
</select>
在测试类的main方法中调用该方法
查询结果如下!
4.If 元素
在StudentDao类中写该方法
List<Student> findStudents1(Student student);
mybatis动态sql——if标签:
if 标签可以对传入的条件进行判断
<if test="条件表达式"></if>
<where>
判断内部if标签如果有一个返回true,
会自动添加一个where关键字,
还会去除where后面多余的关键字,如果标签返回的内容是以 AND 或 OR 开头,它会剔除掉 AND 或 OR。
</where>
在StudentMapper.xml文件中写相应的SQL语句
<select id="findStudents1" resultType="student">
select * from student
<where>
<if test="name!=null">
and name = #{name}
</if>
<if test="num!=0">
and num = #{num}
</if>
<if test="gender!=null">
and gender = #{gender}
</if>
</where>
</select>
在测试类的main方法中调用该方法
查询结果如下!
5.trim 元素
在StudentDao类中写该方法
List<Student> findStudents2(Student student);
trim 让我们添加一个指定的前级关键字
让我们去除一个指定的关键字
在StudentMapper.xml文件中写相应的SQL语句
<select id="findStudents2" parameterType="student" resultType="student">
select * from student
<trim prefix="where" prefixOverrides="and|or">
<if test="name!=null">
or name = #{name}
</if>
<if test="num!=0">
and num = #{num}
</if>
<if test="gender!=null">
and gender = #{gender}
</if>
</trim>
</select>
在测试类的main方法中调用该方法
查询结果如下!
6.Choose 元素
在StudentDao类中写该方法
List<Student> findStudents3(Student student);
在StudentMapper.xml文件中写相应的SQL语句
在该方法中,when和otherwise相当于if,else。当when中的条件不成立时,会走otherwise这条路
<select id="findStudents3" parameterType="student" resultType="student">
select * from student
<where>
<choose>
<when test="name!=null">
name = #{name}
</when>
<otherwise>
name = "王五"
</otherwise>
</choose>
</where>
</select>
在测试类的main方法中调用该方法
当在测试类的main方法中set了name,那么就会查询此时传入的name
查询结果如下!
要是在测试类的main方法中没有set了name或者是set了数据库表里没有的name,那么查询此时就会走otherwise这条路,查询otherwise中传入的name
查询结果如下!
7.set 元素
数据库student表中的数据如下!!!
在StudentDao类中写该方法
void updateStudent(Student student);
在StudentMapper.xml文件中写相应的SQL语句
<set></set>
动态添加set关键字,还可以去掉最后的逗号
<update id="updateStudent" parameterType="student">
update student
<!-- <trim prefix="set" prefixOverrides=",">
</trim>-->
<set>
<if test="name!=null">
name = #{name},
</if>
<if test="num!=0">
num = #{num},
</if>
<if test="gender!=null">
gender = #{gender}
</if>
</set>
where id = #{id}
</update>
在测试类的main方法中调用该方法
修改结果如下!
8.foreach 元素
主要用在构建 in 条件中,它可以在 SQL 语句中进行迭代一个集合,foreach 元素的属性主要有 item,index,collection,open,separator,close
item 表示集合中每一个元素进行迭代时的别名
index 指定一个名字,用于表示在迭代过程中,每次迭代到的位置
open 表示该语句以什么开始
separator 表示在每次进行迭代之间以什么符号作为分隔符
close 表示以什么结束,在使用 foreach 的时候最关键的也是最容易出错的就是 collection 属性,该属性是必须指定的,但是在不同情况下,该属性的值是不一样的
根据传入id删除学生信息
在StudentDao类中写该方法
void deleteStudent(List<Integer> list);
在StudentMapper.xml文件中写相应的SQL语句
<delete id="deleteStudent">
delete from student where id in
<foreach item="a" collection="list" open="(" close=")" separator=",">
#{a}
</foreach>
</delete>
在测试类的main方法中调用该方法
删除结果如下!
根据传入列名查询学生相关信息
在StudentDao类中写该方法
List<Student> findStudentsByColumn(List<String> list);
在StudentMapper.xml文件中写相应的SQL语句
<select id="findStudentsByColumn" resultType="Student">
select
<foreach item="c" collection="list" separator=",">
${c}
</foreach>
from student
</select>
在测试类的main方法中调用该方法
查询结果如下!