Mapper映射文件是MyBatis框架中的一个核心组件,它定义了数据库表和Java对象之间的映射关系。映射文件通常使用XML格式编写,并包含了SQL语句和映射规则。
常用的标签及其作用如下:
<mapper>:根标签,用于定义一个Mapper映射文件。<select>:用于定义查询操作的SQL语句。<insert>:用于定义插入操作的SQL语句。<update>:用于定义更新操作的SQL语句。<delete>:用于定义删除操作的SQL语句。<resultType>:指定返回结果的类型。<resultMap>:用于定义结果映射规则,以便将数据库列映射到Java对象的属性。<if>:条件判断标签,用于动态SQL。<choose>、<when>、<otherwise>:类似于Java中的switch语句,用于编写复杂的动态SQL。<foreach>:用于遍历集合,通常用于编写IN查询的SQL语句。<sql>标签:用来封装sql语句或复用语句的,然后用<include>标签来调用。<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>