一、常用标签以及作用
1.1<select>标签**
用于定义查询语句,可以搭配<where>标签进行使用。
- 属性:
id:在 Mapper 接口中对应的方法名,必须唯一。parameterType:传入参数的类型。resultType或resultMap:指定查询结果的返回类型,可以是具体的类名或者定义好的<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 就只是查询全部,不带任何条件的。如果传入了name或age且不为空,<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不为null且age大于 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 语句中。