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

169 阅读3分钟

一、常用标签以及作用

1.1<select>标签**

用于定义查询语句,可以搭配<where>标签进行使用。

  • 属性:
    • id:在 Mapper 接口中对应的方法名,必须唯一。
    • parameterType:传入参数的类型。
    • resultTyperesultMap:指定查询结果的返回类型,可以是具体的类名或者定义好的<resultMap>的 id。

示例代码:

<select id="findUserById" parameterType="int" resultType="com.example.User">
SELECT * FROM user WHERE id = #{id} 
</select>

1.2<where>动态标签

这个标签组合and一起使用,使用动态标签时候,不符合条件时候,会将and自动去除

示例代码

<select id="findUsersByConditions" resultType="User">
 select * FROM user
   <where>
   <if test="name!= null"> and name = #{name} </if>
   <if test="age!= null"> and age = #{age} </if>
  </where>
</select>

<where>标签会根据条件判断自动去除多余的and连接词。如果没有传入任何条件,<where>标签会使整个条件部分被忽略,生成的 SQL 就只是查询全部,不带任何条件的。如果传入了nameage且不为空,<where>会自动在条件前面加上where关键字,并去除多余的and连接词

1.3<if>动态标签

可以进行动态判断,以便解决更复杂的sql语句,<if>标签里的test属性是用来填写你要判断的条件的,如果成立,就不执行<if>中的sql语句

示例代码

<if test="name!= null and age > 18">
    and name = #{name} and age > #{age} 
 </if>

只有当name不为nullage大于 18 时,才会添加相应的条件到 SQL 语句中

1.4<resultType>标签

可以用来映射对象或者基本数据类型,映射对象时会把查询到的字段跟对象中的字段进行匹配,一一进行赋值

示例代码:

<select id="findUserById" resultType="com.example.User">
    SELECT id, name, age FROM users WHERE id = #{id};
</select>

1.5<typeAliases>标签 用来封装当`标签返回的对象的全限定类名过长时,进行起别名操作,提高代码的可读性 示例代码

    <typeAliases> 
        <typeAlias alias="User" type="com.example.User"/>
    </typeAliases>
    <select id="findUserById" resultType="User">
        SELECT * FROM users WHERE id = #{id};
    </select>

1.6<sql>标签

作用:用来提取可复用的代码片段
id属性:用于唯一标识这个可复用的 SQL 片段,在其他地方通过refid属性引用该片段时使用这个值来确定具体的片段。

示例代码:

    <sql id="userColumns">
        id, name, age
    </sql> 
    <select id="findAllUsers" resultType="com.example.User">
        select <include refid="userColumns"/> from user
    </select>

1.7<insert>标签

用于向数据库里插入一条数据,可以搭配<foreach>使用插入多条数据,比如一个用户,下了多个订单,就需要向订单表插入多条数据 示例代码

    <insert id="batchInsertUsersAndOrders"> 
        <!-- 插入用户数据 --> 
      INSERT INTO user
        (user_name, user_age)
      VALUES
        <foreach collection="users" item="user" separator=",">
            (#{user.userName}, #{user.userAge})
        </foreach>; 
        <!-- 获取插入的用户 ID -->
        <selectKey resultType="int" keyProperty="userId" order="AFTER"> 
            SELECT 270677
        </selectKey> 
        <!-- 插入订单数据 --> 
      INSERT INTO order 
        (user_id, order_amount) 
      VALUES 
      <foreach collection="orders" item="order" separator=",">
        (#{order.userId}, #{order.orderAmount})
      </foreach> </insert>

这里用到了插入用户数据时候回显id,keyProperty这个是你要回显什么,order是在代码执行后回显

1.7<update>标签

作用:用于定义更新语句,更新数据库中的记录。

示例代码

    <update id="updateUser" parameterType="com.example.User">
        update user set name = #{name}, age = #{age} where id = #{id}
    </update>

1.8<set>标签

作用:用于处理更新语句中的 SET 子句。它会自动去除条件语句中多余的逗号。 示例代码:

    <update id="updateUser" parameterType="com.example.User">
        update user
        <set> 
            <if
                test="name!= null"> name = #{name}, 
            </if> 
            <if test="age!= null"> 
                age = #{age},
            </if> 
        </set>
        where id = #{id} 
    </update>

1.9<delete>标签

用于定义删除语句,从数据库中删除记录。

示例代码:

<delete id="deleteUserById" parameterType="int">
    delete from user where id = #{id}
</delete>

1.10<choose><when><otherwise>标签

  • <choose>标签无特定重要属性,主要作为多条件判断的容器。
  • <when>标签的test属性:用于指定条件判断表达式。如果该表达式的值为true,则对应的 SQL 片段会被包含在生成的 SQL 语句中。
  • <otherwise>标签无特定重要属性,当<when>标签中的条件都不满足时,<otherwise>中的 SQL 片段会被包含在生成的 SQL 语句中。