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

1.<sql>标签

定义重复使用的字段提高复用性
image

点击查看代码
<sql id="Base_Column_List">
        id, name, contract_no, pdf_url, member_phone, elder_id, start_time, end_time, status,
    sort, level_desc, create_time, create_by, update_time, update_by, remark, check_in_no,
    sign_date, release_submitter, release_date, release_pdf_url
    </sql>

2.<include>标签

通过<include refid=" " / >标签引用,refid的值就是的id属性的值。
image

点击查看代码
<select id="listAllContracts" parameterType="java.lang.Long" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List"/>
        from contract
    </select>

3.<select>标签

用于select映射
image

点击查看代码
    <select id="selectDevices" resultType="com.zzyl.vo.FloorVo">
        select id,remark from floor
    </select>

4.<update>标签

用于update映射
image

点击查看代码
<update id="updateBedByBedId">
        update bed
        set bed_number = #{bedNumber},
            sort = #{sort},
            update_time = NOW()
        where
            id = #{id}
    </update>

5.<insert>标签

用于insert映射

image

点击查看代码
    <insert id="insert" useGeneratedKeys="true" keyProperty="id">
        insert into member_elder(member_id,elder_id,create_time,create_by)
        values(#{memberId},#{elderId},#{createTime},#{createBy})
    </insert>

6.<delete>标签

用于delete映射

image

点击查看代码
<delete id="deleteById">
        delete from nursing_level where id = #{id}
    </delete>

7.<selectKey>标签

用于数据回显,keyProperty为回显的属性
image

点击查看代码
    <insert id="addUser" parameterType="com.zzyl.entity.Elder">
        <selectKey resultType="int" keyProperty="id" order="AFTER">
            SELECT LAST_INSERT_ID()
        </selectKey>
        INSERT INTO user (name, age) VALUES (#{name}, #{age})
    </insert>

8.<mapper>标签

用于定义一个 Mapper 接口的命名空间。属性 namespace 指定该 Mapper 接口的全限定名
image

点击查看代码
<mapper namespace="com.zzyl.mapper.ElderMapper">

</mapper>

9.<resultMap>标签

用于复杂的结果集映射场景。
image

image

10.<collection>标签

用于处理一对多关系
如:
image
可以看到我在对象里嵌套了一个对象集合

点击查看代码
public class Department {
    private Long id;
    private String name;
    private List<Employee> employees;

    // Getters and Setters
}

image

点击查看代码

    <!-- 定义结果映射 -->
    <resultMap id="DepartmentResultMap" type="com.example.model.Department">
        <id column="id" property="id" />
        <result column="name" property="name" />
        
        <!-- 处理一对多关系 -->
        <collection property="employees" ofType="com.example.model.Employee" select="com.example.mapper.EmployeeMapper.selectEmployeesByDepartmentId" column="id" />
    </resultMap>
处理映射

11.<foreach>标签

遍历标签,open为头,close为尾,separator为连接符,collection为返回的名字
image

点击查看代码
    <select id="selectByPostname" resultType="java.lang.String">
        select post_no from sys_post where post_name
        in
        <foreach collection="list" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>
    </select>

12.<where>标签

标签用于动态生成 where子句。它会自动处理第一个条件前的 and 或 or 关键字,避免生成多余的逻辑运算符。
image

点击查看代码
<select id="selctByPage" resultType="com.zzyl.vo.ApplicationVo">
        select
        c.check_in_code code,c.applicat_id,c.applicat,c.create_time applicationTime,
        c.update_time finishTime,c.flow_status,c.id,c.status,c.title,e.status type
        from check_in c
        left join elder e on c.elder_id=e.id
        <where>
            <if test="type!=null and type!=''" >
                and e.status=#{type}
            </if>
            <if test="status!=null and status != ''">
                and c.status=#{status}
            </if>
            <if test="startTime!=null and startTime != ''">
                and c.create_time &gt;= #{startTime}
            </if>
            <if test="endTime!=null and endTime != ''">
                and c.create_time &lt;= #{endTime}
            </if>
        </where>
    </select>

13.<set>标签

自动生成 SET 子句,确保每个条件前都有适当的逗号分隔。
image

点击查看代码
    <update id="updatePost" parameterType="com.zzyl.vo.ApplicationVo">
        UPDATE sys_post
        <set>
            <if test="postName != null">
                post_name = #{postName},
            </if>
            <if test="postNo != null">
                post_no = #{postNo},
            </if>
            <if test="status != null">
                status = #{status},
            </if>
        </set>
        WHERE post_id = #{postId}
    </update>

14.<if>标签

判断若test满足则拼接,不满足不拼接,上面演示过了这里不演示

15.<choose>标签

16.<when>标签

17.<otherwise>标签

三个标签相互联系放在一起说
<choose> 标签:
类似于 sql 中的 case 语句,用于在多个条件之间进行选择。只执行第一个匹配的条件块。
<when> 标签:
当..时满足则执行
<otherwise> 标签:
都不满足则执行
image

点击查看代码
<select id="selectByPostConditions" resultType="java.lang.String">
    SELECT post_no 
    FROM sys_post 
    <where>
        <choose>
            <when test="postName != null">
                post_name = #{postName}
            </when>
            <when test="postId != null">
                post_id = #{postId}
            </when>
            <otherwise>
                post_status = 'ACTIVE'
            </otherwise>
        </choose>
    </where>
</select>
posted @ 2024-10-14 20:51  码字的小猪  阅读(110)  评论(0编辑  收藏  举报
/*粒子线条,鼠标移动会以鼠标为中心吸附的特效*/