<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--<mapper> 标签用于定义 Mapper XML 文件。-->
<!--namespace 属性指定了该 Mapper XML 文件对应的 Mapper 接口的类路径。-->
<mapper namespace="com.mindskip.xzs.repository.UserTokenMapper">
<resultMap id="BaseResultMap" type="com.mindskip.xzs.domain.UserToken">
<!-- 这里的column指的是数据库字段名称, jdbcType指的是数据库类型type,property指的是映射到result中的属性名-->
<id column="id" jdbcType="INTEGER" property="id" />
<result column="token" jdbcType="VARCHAR" property="token" />
<result column="user_id" jdbcType="INTEGER" property="userId" />
<result column="wx_open_id" jdbcType="VARCHAR" property="wxOpenId" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
<result column="end_time" jdbcType="TIMESTAMP" property="endTime" />
<result column="user_name" jdbcType="VARCHAR" property="userName" />
</resultMap>
<!--使用-->
<select id="selectUserById" resultMap="UserToken">
SELECT token, create_time, user_name
FROM users
WHERE user_id = #{id}
</select>
<!--<sql> 标签在 MyBatis 中用于定义可重用的 SQL 片段,可以在多个 SQL 映射文件中引用。它通常与<include>标签一起使用 -->
<sql id="userColumns">
id, username, password
</sql>
<!--在insert标签中同时插入多条数据-->\
<!--
id 属性指定了这个 SQL 语句的唯一标识符。
parameterType 属性指定了传递给 SQL 语句的参数类型,这里是一个 java.util.List,表示要插入的多个用户对象的集合。
<foreach> 标签用于迭代传入的用户对象列表。
collection: 指定要迭代的集合或数组的属性名。这个属性的值通常是一个 OGNL 表达式,用于指定传入 SQL 语句的参数中的集合对象。例如,collection="list" 就表示要迭代传入的 list 对象。
item: 指定在迭代过程中每个元素的别名。这个属性的值是一个字符串,用于在迭代过程中代表集合中的每个元素。例如,item="user" 就表示在迭代过程中每个元素都可以使用 user 这个别名来引用。
index: 可选属性,指定在迭代过程中的索引值。如果集合是列表或数组,则可以使用 index 属性获取当前元素的索引值。这个属性的值通常是一个字符串,用于在迭代过程中代表索引值。例如,index="index" 就表示在迭代过程中可以使用 index 这个别名来引用当前元素的索引值
open: 可选属性,指定迭代的开始字符串。这个属性的值通常是一个字符串,在迭代开始之前会先输出这个字符串。例如,open="(" 就表示在迭代开始之前会输出 (。
close: 可选属性,指定迭代的结束字符串。这个属性的值通常是一个字符串,在迭代结束之后会输出这个字符串。例如,close=")" 就表示在迭代结束之后会输出 )。
separator: 可选属性,指定每次迭代之间的分隔符。这个属性的值通常是一个字符串,在每次迭代之间会输出这个字符串。例如,separator="," 就表示在每次迭代之间会输出 ,。
在 <foreach> 标签内部,可以引用 user 对象的属性,如 #{user.username} 和 #{user.password},这样可以动态地插入每条记录的值。
-->
<insert id="insertUsers" parameterType="java.util.List">
INSERT INTO users (username, password) VALUES
<foreach collection="list" item="user" separator="," open="(" close=")">
#{user.username}, #{user.password}
</foreach>
</insert>
<!--
<where> 标签是 MyBatis 中的一个非常有用的动态 SQL 标签,它用于在 SQL 查询语句中添加 WHERE 子句。它的主要作用是根据条件动态地拼接 WHERE 子句,同时避免了额外的条件语句带来的问题
<where> 标签会自动去除首个条件语句之前的 AND 或 OR 连接符,以及最后一个条件语句之后的连字符。
类同<set>标签
-->
<select id="selectUsers" resultType="User">
SELECT * FROM users
<where>
<if test="username != null">
AND username = #{username}
</if>
<if test="age != null">
AND age = #{age}
</if>
</where>
</select>
<!--
查询结果为map
结果为数据库字段为key, 查出的值为value
-->
<select id="selectUserMap" resultType="java.util.Map">
SELECT * FROM users WHERE id = #{id}
</select>
<!--
批量删除
-->
<delete id="deleteUsersByIdList" parameterType="java.util.List">
DELETE FROM users WHERE id IN
<foreach collection="list" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</delete>
<!--
<trim> 常用于处理 SQL 语句中的空白字符。
可以用于去除 SQL 语句中多余的空格和逗号,以及动态地添加 WHERE 子句的起始关键字(如 AND 或 OR)
<trim> 标签包含了以下几个属性:
prefix:将trim标签中内容前面添加指定内容。
prefixOverrides:将trim标签中内容前面去除指定内容。
suffix:将trim标签中内容后面添加指定内容。
suffixOverrides:将trim标签中内容后面去除指定内容。
-->
<select id="selectUsers" resultType="User">
SELECT * FROM users
<where>
<trim prefix="AND" prefixOverrides="AND">
<if test="username != null">
AND username = #{username}
</if>
<if test="email != null">
AND email = #{email}
</if>
</trim>
</where>
</select>
<!--
我们知道UPDATE是更新字段的值,但当我们需要更新多条语句中的一部分时,UPDATE就不适用了
我们可以使用REPLACE 函数
语法:REPLACE(string, old_substring, new_substring)
string:要进行替换操作的字符串。
old_substring:要替换的子串。
new_substring:替换后的新子串。
-->
<update id="updatesql">
UPDATE users
SET email = REPLACE(email, '@example.com', '@newdomain.com')
WHERE email LIKE #{email};
</update>
</mapper>
01-16
933
12-05
366
08-07
1263
07-27