Mybatis的Mapper映射文件中常用标签及作用

295 阅读3分钟

以下为xml文件中常用的标签:

SQL标签

<select> : 用于映射查询语句,resultType 属性定义了返回的结果集应该映射到哪种类型的对象。

<select id="selectByName" resultType="com.zzyl.vo.NursingProjectVo">
    select id,name from nursing_project where name=#{name}
</select>

<insert> : 用于映射插入语句,keyProperty 属性可以用来指定主键字段,以便 MyBatis 自动填充。

<insert id="addNursingPlan" >
    <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
        select 0
    </selectKey>
    insert into nursing_plan (plan_name,remark,sort_no,status,create_time,create_by,update_time,update_by)
        values (#{planName},#{remark},#{sortNo},#{status},#{createTime},#{createBy},#{updateTime},#{updateBy})
</insert>

<update> : 用于映射更新语句。

<update id="updateStatus">
    update nursing_project
    set status=#{status}
   where id=#{id}
</update>

<delete> : 用于映射删除语句。

<delete id="deleteById">
    delete from nursing_project
           where id=#{id}
</delete>

动态SQL标签

1、if

if:根据标签中test属性所对应的表达式决定标签中的内容是否需要拼接到SQL中

2、where

where: 当where标签中有内容时,会自动生成where关键字,并且将内容前多余的and 或 or 去掉。

注意 :where标签不能将其中内容后面多余的and或 or去掉

image.png

当where标签中没有内容时,此时where标签没有任何效果。

where和if一般结合使用:

a>若where标签中的if条件都不满足,则where标签没有任何功能,即不会添加where关键字

b>若where标签中的if条件满足,则where标签会自动添加where关键字,并将条件最前方多余的and去掉

注意:where标签不能去掉条件最后多余的and

3、trim

  • trim:

    • prefix|suffix:将trim标签中内容前面或后面添加指定内容
    • suffixOverrides|prefixOverrides:将trim标签中内容前面或后面去掉指定内容

示例:

image.png

4、choose、when、otherwise

相当于if...else if ...else...

choose 父标签 when 和 otherwise都需要写在choose标签中,相当于if else if else 的结构

when查询条件 至少有一个

otherwise 如果都不执行最终执行 最多只能有一个

​
    <!--List<Emp> getEmpListByChoose(Emp emp);-->
    <select id="getEmpListByChoose" resultType="Emp">
        select <include refid="empColumns"></include> from t_emp
        <where>
            <choose>
                <when test="ename != '' and ename != null">
                    ename = #{ename}
                </when>
                <when test="age != '' and age != null">
                    age = #{age}
                </when>
                <when test="sex != '' and sex != null">
                    sex = #{sex}
                </when>
                <when test="email != '' and email != null">
                    email = #{email}
                </when>
            </choose>
        </where>
    </select>

5、foreach

属性:

collection:设置要循环的数组或集合

item:表示集合或数组中的每一个数据

separator:设置循环体之间的分隔符

open:设置foreach标签中的内容的开始符

close:设置foreach标签中的内容的结束符

格式:

image.png

使用or分割, or前后不需要空格 ,分隔符前边和后边会自动加上空额

通过数组实现批量删除

image.png

通过list集合实现批量添加

这里不能添加open和close 。因为这两个是在循环外加开始符和结束符。如果使用就代表每一次循环都要在外面加上开始符和结束符。

image.png

6、sql、include标签

sql片段,可以记录一段公共sql片段,在使用的地方通过include标签进行引入

这个标签的作用是可以模块复用。

# 设置SQL片段
<sql id="empColumns">
    eid,ename,age,sex,did
</sql>
# 引用SQL片段
select <include refid="empColumns"></include> from t_emp

7、set标签

update 表 set 列

set标签是用来替换set关键字的,更新时自动拼接set,并去除多余逗号

示例:

image.png

8、ResultMap 标签

ResultMap 标签用于描述查询结果集与 Java 对象之间的映射关系。ResultMap 标签有以下属性:

  1. id:指定 ResultMap 的唯一标识符。
  2. type:指定映射的 Java 对象类型。
  3. extends:指定继承的 ResultMap。
  4. discriminator:用于多表关联查询时进行分组判断。
  5. constructor、id、result、association、collection:用于定义映射关系。
<resultMap id="userMap" type="User">
    <id property="id" column="id"/>
    <result property="name" column="name"/>
    <result property="age" column="age"/>
</resultMap>
 
<select id="selectUserById" resultMap="userMap">
    select * from user where id = #{id}
</select>