MyBatis通过XML映射文件解耦Java方法与SQL,核心是<mapper>标签及namespace绑定接口;需严格匹配文件名、路径与全限定类名;支持#{}传参、<resultMap>映射、<where>/<if>动态SQL及<association>/<collection>关联查询。

MyBatis 通过 XML 映射文件将 Java 方法与 SQL 语句解耦,实现灵活、可维护的数据库操作。核心是定义 <mapper> 根标签,并在其中用 <select> 等标签编写 SQL,同时通过命名空间(namespace)与 Mapper 接口绑定。
XML 文件基础结构和命名规范
映射文件需遵循固定格式,且文件名、路径、namespace 需与 Mapper 接口严格对应:
- 文件名建议为
XXXMapper.xml(如UserMapper.xml),放在与接口同包或按配置指定的 resources 路径下 -
<mapper>的namespace必须等于对应 Mapper 接口的全限定类名(如com.example.mapper.UserMapper) - 每个 SQL 操作用独立标签:
<select>、<insert>、<update>、<delete> - 每个标签必须有唯一
id,该 id 对应接口中方法名
编写 <select> 查询语句的常用写法
查询是最常见操作,支持参数传递、结果映射、动态条件等:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 简单查询:用
#{}占位符安全传参(预编译防 SQL 注入),例如:
<select id="selectById" resultType="com.example.entity.User">
SELECT * FROM user WHERE id = #{id}
</select> - 返回结果映射到实体类:若列名与属性名不一致,用
<resultMap>显式配置映射关系 - 多参数处理:推荐封装为 Java Bean 或使用
@Param注解;XML 中直接写#{userName}、#{age}(前提是方法参数加了@Param)
使用 <where> 和 <if> 实现动态查询条件
避免拼接 SQL 字符串,MyBatis 提供动态 SQL 标签自动处理 WHERE 子句和条件拼接:
立即学习“Java免费学习笔记(深入)”;
-
<where>会智能添加/去除WHERE关键字,并忽略首个条件前多余的AND/OR -
<if test="xxx != null and xxx != ''">控制条件是否生效,test 表达式支持 OGNL 语法 - 示例:
<select id="selectByCondition" resultType="User">
SELECT * FROM user
<where>
<if test="username != null and username != ''">AND username LIKE CONCAT('%', #{username}, '%')</if>
<if test="status != null">AND status = #{status}</if>
</where>
</select>
关联查询:一对多、多对一的 resultMap 配置
复杂对象嵌套需用 <resultMap> 定义映射规则:
- 多对一(如 Order → User):用
<association>,可嵌套查询或联合查询 - 一对多(如 User → OrderList):用
<collection>,通常配合ofType指定集合元素类型 - 推荐使用
column+property显式关联字段,避免别名冲突 - 联合查询时注意使用
id字段做主键标识,防止 N+1 查询或数据重复

















