本文最后更新于 162 天前,其中的信息可能已经有所发展或是发生改变。
数据库
假设有如下数据库:
是一个简单的学生表(Students)的数据库表结构示例,包括一些基本的字段:
- StudentID(学生ID):唯一标识每个学生的编号。
- Name(姓名):学生的姓名。
- Age(年龄):学生的年龄。
- Gender(性别):学生的性别。
- Email(电子邮件):学生的电子邮件地址。
- PhoneNumber(电话号码):学生的电话号码。
- Address(地址):学生的居住地址。
- EnrollmentDate(入学日期):学生入学的日期。
sql语句
CREATE TABLE Students (
StudentID INT PRIMARY KEY,
Name VARCHAR(100),
Age INT,
Gender VARCHAR(10),
Email VARCHAR(100),
PhoneNumber VARCHAR(20),
Address VARCHAR(255),
EnrollmentDate DATE
);
动态SQL
动态SQL-if
假设有如下需求:
1.通过输入的学生姓名模糊查询同时会根据年龄和性别筛选,然后根据入学日期降序排序
使用<where>标签和<if>标签,<if>标签中的test属性会根据条件来决定是否拼接标签内的sql语句,<where>标签当内部没有任何语句时,不会拼接where,并且会主动去除and,or等。
如下是xml文件示例:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.example.StudentMapper">
<select id="SearchStudentList" resultType="Student">
select * from student
<where>
<if test="name != null">
name like concat("%",#{name}+,%")
</if>
<if test="age != null">
and age = #{age}
</if>
<if test="gender!=null">
and gender=#{gender}
</if>
</where>
order by enrollmentdate desc
</select>
</mapper>
同理用于更新的set也有<set>标签
动态sql-foreach
假设有如下需求:
1.前段发过来一个包含id的列表,根据这个列表批量删除学生信息
<foreach>标签可以遍历可迭代对象(如 List、Set 等)、Map 对象或者数组对象。
属性说明:
- collection:所要迭代的对象
- item:是当前迭代的对象
- index: 是当前迭代的序号
- separator:分隔符
- open:起始位置拼接字符
- close:结束位置拼接字符
xml文件示例:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.example.StudentMapper">
<delete id="DeleteByIdList">
delete from student where studentid in
<foreach collection="list" item="id" separator="," open="(",close=")">
#{id}
</foreach>
</delete>
</mapper>