Mybatis——mapper.xml中的SQL标签

54 阅读3分钟

前言​

今天写mapper.xml文件时使用了一些不常用的SQL标签,上网发现还有好多,就想着把SQL标签全部总结一下。 文章如果有错误或者不规范的地方请指出来,一起加油,感谢大家观看!!!


select标签

用于执行查询操作。

属性:

  • id:命名空间中的唯一标识符,用于在 Java 代码中调用该查询语句。
  • resultType或resultMap:指定查询结果的返回类型。如果使用resultType,直接指定返回的 Java 对象类型;如果使用resultMap,则引用一个自定义的结果映射配置。
  • parameterType:指定传入参数的类型。

示例:

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

insert标签

用于执行插入操作。

属性:

  • id:命名空间中的唯一标识符。
  • parameterType:传入参数的类型。

示例:

<insert id="insertUser" parameterType="com.example.User">
    INSERT INTO users (name, age) VALUES (#{name}, #{age})
</insert>

update标签

用于执行更新操作。

属性:

  • id:命名空间中的唯一标识符。
  • parameterType:传入参数的类型。

示例:

<update id="updateUser" parameterType="com.example.User">
    UPDATE users SET name = #{name}, age = #{age} WHERE id = #{id}
</update>

delete标签

用于执行删除操作。

属性:

  • id:命名空间中的唯一标识符。
  • parameterType:传入参数的类型。

示例:

<delete id="deleteUserById" parameterType="int">
    DELETE FROM users WHERE id = #{id}
</delete>

resultMap标签

用于自定义结果映射,将数据库查询结果映射到 Java 对象。

属性:

  • id:命名空间中的唯一标识符。
  • type:要映射的 Java 对象类型。

示例:

<resultMap id="userResultMap" type="com.example.User">
    <id property="id" column="user_id"/>
    <result property="name" column="user_name"/>
    <result property="age" column="user_age"/>
</resultMap>

if标签

用于在 SQL 语句中添加条件判断。

属性无特定要求。

示例:

<select id="findUsersByAge" parameterType="int" resultType="com.example.User">
    SELECT * FROM users WHERE 1 = 1
    <if test="age!= null">
        AND age = #{age}
    </if>
</select>

trim标签

在 MyBatis 的 mapper.xml 文件中,trim标签用于对 SQL 语句进行裁剪和拼接操作。

属性:

  • prefix:在 SQL 片段的前面添加指定的内容。
  • prefixOverrides:去除 SQL 片段前面的关键字或者字符,该关键字或者字符由prefixOverrides属性指定,假设该属性指定为"AND",当sql语句的开头为"AND",trim标签将会去除该"AND"。
  • suffix:在 SQL 片段的后面添加指定的内容。
  • suffixOverrides:去除SQL片段后面的关键字或者字符,该关键字或者字符由prefixOverrides属性指定,假设该属性指定为"AND",当sql语句的结尾为"AND",trim标签将会去除该"AND"

示例:

<select id="findUsersByConditions" resultType="com.example.User">
    SELECT * FROM users
    <trim prefix="WHERE" prefixOverrides="AND |OR">
        <if test="name!= null">name = #{name}</if>
        <if test="age!= null">AND age = #{age}</if>
    </trim>
</select>

set标签

用于在更新语句中动态地构建 SET 子句。只有当对应的字段值不为空时,才会将该字段加入到 SET 子句中。 示例:

<update id="updateUserPartial" parameterType="com.example.User">
    UPDATE users
    <set>
        <if test="name!= null">name = #{name},</if>
        <if test="age!= null">age = #{age},</if>
    </set>
    WHERE id = #{id}
</update>

foreach标签

用于循环遍历集合参数,并在 SQL 语句中构建动态的 IN 条件等。

属性:

  • collection:要遍历的集合参数名。
  • item:遍历过程中的临时变量名。
  • open、close、separator:分别用于指定循环开始、结束和元素之间的分隔符。

示例:

<select id="findUsersByIds" parameterType="java.util.List" resultType="com.example.User">
    SELECT * FROM users WHERE id IN
    <foreach collection="list" item="id" open="(" close=")" separator=",">
        #{id}
    </foreach>
</select>

sql标签

用于定义可复用的 SQL 片段。可以将一些公共的 SQL 片段抽取出来,然后在其他地方通过 include 标签引用。

属性:

  • id:命名空间中的唯一标识符。

示例:

<sql id="userColumns">
    id, name, age
</sql>

<select id="findUsersWithColumns" resultType="com.example.User">
    SELECT <include refid="userColumns"/> FROM users
</select>

bind标签

可以用于在 SQL 语句中创建一个新的变量,并进行一些字符串处理操作。

属性:

  • name:新变量的名称。
  • value:变量的值,可以是一个 OGNL 表达式。

示例:

<select id="findUsersByNameLike" parameterType="java.lang.String" resultType="com.example.User">
    <bind name="nameLikeValue" value="'%' + _parameter + '%'"/>
    SELECT * FROM users WHERE name LIKE #{nameLikeValue}
</select>

choose,when,otherwise标签

类似于 Java 中的 switch-case-default 语句,用于实现多条件判断。 示例:

<select id="findUsersByCondition" parameterType="com.example.UserCondition" resultType="com.example.User">
    SELECT * FROM users WHERE 1 = 1
    <choose>
        <when test="age!= null">
            AND age = #{age}
        </when>
        <when test="name!= null">
            AND name = #{name}
        </when>
        <otherwise>
            AND gender = 'male'
        </otherwise>
    </choose>
</select>

微信图片_20241011223609.jpg