Mybatis的xml映射文件用于将Java接口方法和SQL语句进行绑定,其中select、insert、update是最常用的三个标签,分别对应数据库的查询、插入、更新操作,掌握它们的正确写法是使用Mybatis的基础。

一、select标签的编写方法
select标签用于定义查询语句,核心属性包括id、parameterType、resultType等。id需要和对应Mapper接口的方法名一致,parameterType指定传入参数的类型,resultType指定查询结果映射的Java类型。
1. 基础查询示例
查询单个用户信息的配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://ipipp.com/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper">
<!-- 根据id查询用户 -->
<select id="selectUserById" parameterType="int" resultType="com.example.pojo.User">
SELECT id, username, age, email FROM user WHERE id = #{id}
</select>
</mapper>
2. 多参数查询示例
如果需要传入多个参数,可以使用@Param注解或者在SQL中使用param1、param2这样的占位符:
<!-- 根据用户名和年龄查询用户 -->
<select id="selectUserByNameAndAge" resultType="com.example.pojo.User">
SELECT id, username, age, email FROM user WHERE username = #{username} AND age = #{age}
</select>
对应的Mapper接口方法为:
List<User> selectUserByNameAndAge(@Param("username") String username, @Param("age") Integer age);
二、insert标签的编写方法
insert标签用于定义插入语句,常用属性包括id、parameterType、useGeneratedKeys、keyProperty等。useGeneratedKeys设为true可以获取数据库自增主键,keyProperty指定主键对应的Java实体类属性。
1. 基础插入示例
插入用户信息的配置如下:
<!-- 插入用户 -->
<insert id="insertUser" parameterType="com.example.pojo.User">
INSERT INTO user (username, age, email) VALUES (#{username}, #{age}, #{email})
</insert>
2. 获取自增主键示例
如果需要插入后返回生成的主键,配置如下:
<!-- 插入用户并返回自增主键 -->
<insert id="insertUserReturnId" parameterType="com.example.pojo.User" useGeneratedKeys="true" keyProperty="id">
INSERT INTO user (username, age, email) VALUES (#{username}, #{age}, #{email})
</insert>
插入完成后,传入的User对象的id属性会自动被赋值为数据库生成的主键值。
三、update标签的编写方法
update标签用于定义更新语句,核心属性和insert标签类似,id对应接口方法名,parameterType指定传入参数类型。
1. 基础更新示例
根据id更新用户信息的配置如下:
<!-- 根据id更新用户 -->
<update id="updateUserById" parameterType="com.example.pojo.User">
UPDATE user SET username = #{username}, age = #{age}, email = #{email} WHERE id = #{id}
</update>
2. 动态更新示例
如果只需要更新传入的非空字段,可以结合<if>标签实现动态SQL:
<!-- 动态更新用户 -->
<update id="updateUserDynamic" parameterType="com.example.pojo.User">
UPDATE user
<set>
<if test="username != null and username != ''">
username = #{username},
</if>
<if test="age != null">
age = #{age},
</if>
<if test="email != null and email != ''">
email = #{email},
</if>
</set>
WHERE id = #{id}
</update>
<set>标签会自动去除末尾多余的逗号,避免SQL语法错误。
四、注意事项
- xml映射文件的
namespace需要和对应Mapper接口的全限定名一致,否则会绑定失败。 - SQL中的
#{}是预编译占位符,可以有效防止SQL注入,不要使用${}直接拼接参数,除非是动态表名等必要场景。 - 标签的
id在同一个namespace下必须唯一,否则会抛出异常。 - 如果参数类型是基本数据类型或者String,
parameterType可以省略,Mybatis会自动推断类型。
Mybatisxml映射文件select标签insert标签update标签修改时间:2026-07-23 06:42:26