MyBatis XML 映射文件(通常是以 .xml
结尾的文件,例如 UserMapper.xml
)是 MyBatis 框架的重要组成部分,主要用于定义 SQL语句、结果映射关系 以及 参数绑定。它的作用是将 Java 方法与 SQL 语句关联起来,实现持久化操作(如查询、插入、更新和删除)。
以下是关于 MyBatis XML 映射文件的详细说明:
、
、
等标签动态生成 SQL。以下是 MyBatis XML 映射文件的基本结构:
DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper">
<select id="getUserById" parameterType="int" resultType="com.example.entity.User">
SELECT * FROM users WHERE id = #{id}
select>
<insert id="insertUser" parameterType="com.example.entity.User">
INSERT INTO users (name, email) VALUES (#{name}, #{email})
insert>
<update id="updateUser" parameterType="com.example.entity.User">
UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id}
update>
<delete id="deleteUserById" parameterType="int">
DELETE FROM users WHERE id = #{id}
delete>
mapper>
:
namespace
:命名空间,用于区分不同的 Mapper 接口。SQL 标签:
:定义 SELECT
查询语句。
:定义 INSERT
插入语句。
:定义 UPDATE
更新语句。
:定义 DELETE
删除语句。属性:
id
:映射的方法名,与 Java 接口中的方法对应。parameterType
:传入参数的 Java 类型。resultType
:返回结果的 Java 类型(
中使用)。MyBatis 支持通过 #{}
占位符绑定参数。例如:
<select id="getUserById" parameterType="int" resultType="com.example.entity.User">
SELECT * FROM users WHERE id = #{id}
select>
#{id}
:表示将方法传入的 id
参数注入到 SQL 中。可以将查询结果的字段与 Java 对象的属性映射。例如:
<select id="getUserById" parameterType="int" resultMap="UserResultMap">
SELECT id, name, email FROM users WHERE id = #{id}
select>
<resultMap id="UserResultMap" type="com.example.entity.User">
<id column="id" property="id" />
<result column="name" property="name" />
<result column="email" property="email" />
resultMap>
:定义字段与属性的映射关系。
column
:数据库表的字段名。property
:Java 对象的属性名。MyBatis 提供动态 SQL 标签,用于生成灵活的 SQL 查询:
标签根据条件动态生成 SQL:
<select id="getUsersByCondition" parameterType="map" resultType="com.example.entity.User">
SELECT * FROM users WHERE 1=1
<if test="name != null">
AND name = #{name}
if>
<if test="email != null">
AND email = #{email}
if>
select>
test
:判断条件。
标签用于处理集合参数(如列表):
<select id="getUsersByIds" parameterType="list" resultType="com.example.entity.User">
SELECT * FROM users WHERE id IN
<foreach item="id" index="index" collection="list" open="(" separator="," close=")">
#{id}
foreach>
select>
collection
:指定集合参数的名字(如 list
)。item
:每次循环的当前项。separator
:分隔符(如 ,
)。open
和 close
:括号或其他包装字符。通过
定义公共 SQL 片段,并在其他地方引用:
<sql id="BaseColumnList">
id, name, email
sql>
<select id="getAllUsers" resultType="com.example.entity.User">
SELECT <include refid="BaseColumnList" /> FROM users
select>
:用于引用 id
为 BaseColumnList
的 SQL 片段。
定义公共片段,避免重复代码。id
属性与 Mapper 接口的方法名一一对应。public interface UserMapper {
User getUserById(int id);
void insertUser(User user);
}
Mapper
:
namespace
和方法名对应。MyBatis 的 XML 映射文件在持久化操作中承担了非常重要的角色。它的主要作用是:
通过使用 XML 映射文件,开发者可以灵活地管理 SQL 语句,同时保持代码的清晰和可维护性。