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

167 阅读1分钟

Mapper映射文件是MyBatis框架中的一个核心组件,它定义了数据库表和Java对象之间的映射关系。映射文件通常使用XML格式编写,并包含了SQL语句和映射规则。

常用的标签及其作用如下:

  1. <mapper>:根标签,用于定义一个Mapper映射文件。
  2. <select>:用于定义查询操作的SQL语句。
  3. <insert>:用于定义插入操作的SQL语句。
  4. <update>:用于定义更新操作的SQL语句。
  5. <delete>:用于定义删除操作的SQL语句。
  6. <resultType>:指定返回结果的类型。
  7. <resultMap>:用于定义结果映射规则,以便将数据库列映射到Java对象的属性。
  8. <if>:条件判断标签,用于动态SQL。
  9. <choose><when><otherwise>:类似于Java中的switch语句,用于编写复杂的动态SQL。
  10. <foreach>:用于遍历集合,通常用于编写IN查询的SQL语句。
  11. <sql>标签:用来封装sql语句或复用语句的,然后用<include>标签来调用。
  12. <keyProperty><useGeneratedKeys>标签:用于实现主键回显,useGeneratedKeys 属性表示是否需要获取自增主键, 默认是 false ;keyProperty 属性表示获取到的自增主键放到个字段里。

示例代码:

<?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="com.zzzz.mapper.DeviceMapper">

    <resultMap type="com.zzzz.entity.Device" id="DeviceMap">
        <result property="id" column="id" jdbcType="INTEGER"/>
        <result property="deviceId" column="device_id" jdbcType="VARCHAR"/>
        <result property="deviceName" column="device_name" jdbcType="VARCHAR"/>
        <result property="noteName" column="note_name" jdbcType="VARCHAR"/>
        <result property="productId" column="product_id" jdbcType="VARCHAR"/>
    </resultMap>


    <!--统计总行数-->
    <select id="count" resultType="java.lang.Long">
            select count(1) from device
    </select>

    <!--查询设备信息-->
    <select id="queryByIotIds" resultType="com.zzzz.vo.DeviceVo">
        select d.*,
               d.note_name  nickname,
               d.produce_name productName,
               su.real_name creator
        from device d
               left join sys_user su on d.create_by = su.id where device_id in
           <foreach collection="iotIds" item="item" open="(" close=")" separator=",">
                 #{item}
           </foreach>
    </select>

    <!--注册设备-->
    <insert id="insert" keyProperty="id" useGeneratedKeys="true">
        insert into device(device_id,  device_name, note_name,product_id)
        values (#{deviceId}, #{deviceName}, #{noteName},#{productId})
    </insert>


    <!--通过主键修改数据-->
    <update id="update">
        update device
        <set>
            <if test="deviceId != null and deviceId != ''">
                device_id = #{deviceId},
            </if>
            <if test="deviceName != null and deviceName != ''">
                device_name = #{deviceName},
            </if>
            <if test="noteName != null and noteName != ''">
                note_name = #{noteName},
            </if>
            <if test="productId != null and productId != ''">
                product_id = #{productId},
            </if>
        </set>
        where id = #{id}
    </update>

    <!--删除设备-->
    <delete id="deleteDevice">
        delete from device where device_id = #{iotId}
    </delete>

</mapper>