头图

一、常用标签

  1. <mapper>
    根元素,每个<mapper>标签代表一个接口,需要通过namespace属性指定对应的接口全限定名。
    例如:
    <mapper namespace="com.zzyl.mapper.SysUserMapper">
  2. <select>
    用于定义查询语句,执行后返回数据。属性id定义了这个SQL语句的唯一标识符,对应接口中的方法名。
    parameterType定义了传入参数的类型,resultType或resultMap定义了返回结果的类型或映射规则。
    例如:

    <select id="findById" parameterType="java.lang.Long" resultType="com.zzyl.entity.Visit">
      select *
      from visit
      where id = #{id}
    </select>
    
  3. <insert>
    定义插入语句,使用方式与<select>类似,但通常会使用keyProperty来指定主键字段,以便MyBatis自动设置返回的对象属性。
    例如:

     <insert id="insert" parameterType="com.zzyl.entity.Floor">
           insert into floor(name, code, create_by, update_by, remark, create_time, update_time)
          values (#{name}, #{code}, #{createBy}, #{updateBy}, #{remark}, #{createTime}, #{updateTime})
    </insert>
    
    
  4. <update>
    定义更新语句,类似于<insert>,用于修改数据库中的记录。
    例如:

    <update id="updateById" parameterType="com.zzyl.entity.Floor">
         update floor
         set name        = #{name},
             code        = #{code},
             update_by   = #{updateBy},
             update_time = #{updateTime}
         where id = #{id}
    </update>
    
  5. <delete>
    定义删除语句,用于从数据库中移除记录。
    例如:

     <delete id="deleteById">
         delete from member where id = #{id}
     </delete>
    
  6. <resultMap>
    用于复杂的结果集映射场景,当resultType不足以表达复杂的对象关系时使用,可以定义一对一(<association>), 一对多 (<collection>) 的关系映射。
    例如:

    <resultMap id="floorResultMap" type="com.zzyl.entity.Floor">
            <id column="id" property="id"/>
            <result column="name" property="name"/>
            <result column="code" property="code"/>
            <result column="create_by" property="createBy"/>
            <result column="update_by" property="updateBy"/>
            <result column="remark" property="remark"/>
            <result column="create_time" property="createTime"/>
     <result column="update_time" property="updateTime"/>
    </resultMap>
    
  7. <include>
    引用其他SQL片段,避免重复书写相同的SQL代码。
    例如:

    <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
     select
    <include refid="Base_Column_List"/>
     from elder
     where id = #{id,jdbcType=BIGINT}
    </select>
    
  8. <sql>
    定义可重用的SQL代码片段。
    例如:

    <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>
    

二、常用动态标签

  1. <if> 和 <set>
    <if>:根据条件判断是否包含某个SQL片段。
    <set>:自动处理SET关键字,并且只在有有效条件时添加SET。
    例如:

    <update id="update">
     update member
    <set>
      <if test="phone != null and phone != ''">
             phone = #{phone},
     </if>
     </set>
     where id = #{id}
    </update>
    
  2. <choose> / <when> / <otherwise>
    多条件选择,类似于Java中的switch语句。<when>: 条件表达式;<otherwise>: 默认情况。
    例如:

    <select id="findUsers" resultType="com.example.model.User">
        SELECT * FROM user
       <where>
     <choose>
         <when test="name != null">AND name = #{name}</when>
         <when test="age != null">AND age = #{age}</when>
         <when test="gender != null">AND gender = #{gender}</when>
         <otherwise>AND 1 = 1</otherwise>
            </choose>
        </where>
    </select>
    
  3. <where>
    自动处理WHERE关键字,并且只在有有效条件时添加WHERE。
    例如:

    <where>
      <if test="name != null">AND name = #{name}</if>
      <if test="age != null">AND age = #{age}</if>
    </where>
    
  4. <foreach>
    遍历集合或数组。其中item: 当前迭代项的变量名;index: 当前索引的变量名;open: 开始符号;close: 结束符号;separator: 分隔符。
    例如:

    <select id="countRoomByTypeName" parameterType="java.lang.String" resultType="map">
            SELECT type_name, count(*) as 'count' FROM room WHERE type_name in
           <foreach collection="list" item="name" open="(" separator="," close=")">
         #{name}
         </foreach>
            group by type_name
    </select>
    

以上,就是mybatis中常用的Mapper映射文件标签。


玉喵
1 声望2 粉丝

学习成长的鸡肋 好好好不积累要鸡肋


引用和评论

0 条评论