前言
今天写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>