MyBatis常用标签
1. 定义SQL语句
1.1. select
标签
- id: 唯一的标识符
- parameterType: 入参的全路径名或别名
- resultType: 返回值类型或别名(resultType 与resultMap 不能并用)
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="Object">
select * from student where id=#{id}
</select>
1.2. insert
标签
- id: 唯一的标识符
- parameterType: 入参的全路径名或别名
1.3. update
标签
- id: 唯一的标识符
- parameterType: 入参的全路径名或别名
1.4. delete
标签
- id: 唯一的标识符
- parameterType: 入参的全路径名或别名
2. 动态SQL拼接
2.1. if
标签
<if test="name != null and name != ''">
and NAME = #{name}
</if>
2.2. foreach
标签
- collection: collection属性的值有三个分别是list、array、map三种,分别对应的参数类型为: List、数组、map集合。
- item: 表示在迭代过程中每一个元素的别名
- index: 表示在迭代过程中每次迭代到的位置(下标)
- open: 前缀
- close: 后缀
- separator: 分隔符,表示迭代时每个元素之间以什么分隔
<select id="select" resultMap="BaseResultMap">
select name,hobby
from student where id in
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
</select>
2.3. choose
标签
<select id="getStudentListChoose" parameterType="Student" resultMap="BaseResultMap">
select * from student
<where>
<choose>
<when test="Name!=null and student!='' ">
and name like CONCAT(CONCAT('%', #{student}),'%')
</when>
<when test="hobby!= null and hobby!= '' ">
and hobby = #{hobby}
</when>
<otherwise>
and age = 15
</otherwise>
</choose>
</where>
</select>
3. 格式化输出
3.1. where
标签
当name值为null时,查询语句会出现
where and
的情况,
解决该情况除了将where
改为“where 1=1
之外,还可以利用where
标签
这个where
标签会知道如果它包含的标签中有返回值的话,它就插入一个where
此外,如果标签返回的内容是以and
或or
开头的,则它会剔除掉
<select id="getStudentListWhere" parameterType="Object" resultMap="BaseResultMap">
select * from student
<where>
<if test="name!=null and name!='' ">
name like CONCAT(CONCAT('%', #{name}),'%')
</if>
<if test="hobby!= null and hobby!= '' ">
and hobby = #{hobby}
</if>
</where>
</select>
3.2. set
标签
没有使用
if
标签时,如果有一个参数为null,都会导致错误
当在update
语句中使用if
标签时,如果最后的if
没有执行,则或导致逗号多余错误
使用set
标签可以将动态的配置set
关键字,和剔除追加到条件末尾的任何不相关的逗号
<update id="updateStudent" parameterType="Object">
update student
<set>
<if test="name!=null and name!='' ">
name = #{name},
</if>
<if test="hobby!=null and hobby!='' ">
major = #{major},
</if>
<if test="hobby!=null and hobby!='' ">
hobby = #{hobby}
</if>
</set>
where id = #{id};
</update>
3.3. trim
标签
格式化输出,也可以通过trim标签设定或忽略前后缀来实现
- prefix: 前缀覆盖并增加其内容
- suffix: 后缀覆盖并增加其内容
- prefixOverrides: 前缀判断的条件
- suffixOverrides: 后缀判断的条件
4. 配置关联关系
4.1. collection
标签
4.2. association
标签
5. 定义常量及引用
5.1. sql
标签
<sql id="Base_Column_List">
ID,MAJOR,BIRTHDAY,AGE,NAME,HOBBY
</sql>
5.2. include
标签
<select id="selectAll" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List" />
FROM
student
<include refid="Example_Where_Clause" />
</select>