mybatis sql xml
时间: 2025-04-23 09:05:54 浏览: 20
### MyBatis SQL 映射 XML 配置
MyBatis 的 SQL 映射文件用于定义 SQL 查询、更新和其他数据库操作。这些映射文件通过 `<mapper>` 标签来声明,并且通常与对应的 Mapper 接口关联。
#### 基本结构
一个典型的 MyBatis 映射文件可能如下所示:
```xml
<?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 namespace="com.example.mapper.UserMapper">
<!-- 结果集映射 -->
<resultMap id="BaseResultMap" type="com.example.model.User">
<id column="id" property="id"/>
<result column="username" property="username"/>
<result column="password" property="password"/>
<result column="email" property="email"/>
</resultMap>
<!-- 插入语句 -->
<insert id="insertUser" parameterType="com.example.model.User">
INSERT INTO users (username, password, email)
VALUES (#{username}, #{password}, #{email})
</insert>
<!-- 更新语句 -->
<update id="updateUser" parameterType="com.example.model.User">
UPDATE users SET username=#{username}, password=#{password}, email=#{email} WHERE id=#{id}
</update>
<!-- 删除语句 -->
<delete id="deleteUserById" parameterType="java.lang.Integer">
DELETE FROM users WHERE id=#{id}
</delete>
<!-- 查询语句 -->
<select id="getUserById" resultMap="BaseResultMap" parameterType="java.lang.Integer">
SELECT * FROM users WHERE id=#{id}
</select>
</mapper>
```
此配置文件中的 `namespace` 属性指定了该映射文件所对应的具体 Mapper 接口[^2]。
#### 动态 SQL 示例
为了提高灵活性,MyBatis 支持动态 SQL 特性,允许根据不同的条件构建 SQL 语句。以下是使用动态 SQL 构建复杂查询的一个例子:
```xml
<select id="findUsersByConditions" resultType="com.example.model.User">
SELECT *
FROM users u
<where>
<if test="name != null and name != ''">
AND u.name LIKE CONCAT('%', #{name}, '%')
</if>
<if test="age != null">
AND u.age = #{age}
</if>
</where>
</select>
```
上述代码展示了如何利用 `<if>` 和 `<where>` 元素创建基于输入参数变化而调整的 SQL 查询[^3]。
#### 参数传递方式
当调用 Mapper 方法时,可以通过多种方式进行参数传递。对于单个简单类型的参数可以直接传入;而对于多个参数,则建议将其封装在一个 POJO 或 Map 中作为整体传递给方法[^4]。
```java
public interface UserMapper {
List<User> findUsersByNameAndAge(@Param("name") String name, @Param("age") Integer age);
}
<!-- 对应的 XML 映射部分 -->
<select id="findUsersByNameAndAge" resultType="com.example.model.User">
SELECT * FROM users WHERE name = #{name} AND age = #{age}
</select>
```
这里展示了一个带有两个参数的方法签名及其对应的 SQL 映射片段。
阅读全文
相关推荐















