目录
1.Mybatis动态SQL
2.MyBatis 中用于实现动态 SQL 的元素
3.查所有
4.If 元素
5.trim 元素
6.Choose 元素
7.set 元素
8.foreach 元素
根据传入id删除学生信息
根据传入列名查询学生相关信息
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方法中调用该方法
查询结果如下!