mybatis xml配置分为mybatis-config.xml(须严格按properties→settings→typealiases→environments→mappers顺序)和mapper xml(以namespace绑定接口,含select/insert/update/delete/resultmap等核心标签)。

MyBatis 的 XML 配置分两类:全局配置文件 mybatis-config.xml 和 SQL 映射文件(如 UserMapper.xml)。前者管连接、缓存、别名等基础设置;后者专注 SQL 编写与结果映射,两者配合才能让 DAO 接口正常工作。
mybatis-config.xml 必须遵守的结构顺序
这个文件是 MyBatis 启动时加载的根配置,所有标签必须严格按以下顺序书写,否则会解析失败:
-
properties:外部属性引入(如数据库配置),支持
resource(类路径)或url(绝对路径),也支持内联<property></property> -
settings:全局开关控制,比如
lazyLoadingEnabled="true"开启延迟加载,cacheEnabled="true"启用二级缓存 -
typeAliases:简化实体类引用,可用
<typealias type="com.example.User" alias="user"></typealias>,更常用的是<package name="com.example.entity"></package>批量注册 -
environments:定义数据源环境,
default="dev"指定默认激活环境,每个<environment id="dev"></environment>内需包含<transactionmanager type="JDBC"></transactionmanager>和<datasource type="POOLED"></datasource> -
mappers:注册映射文件,支持
<mapper resource="com/example/mapper/UserMapper.xml"></mapper>或<package name="com.example.mapper"></package>(要求 XML 与接口同包同名)
Mapper XML 文件的核心标签
每个映射文件以 <mapper namespace="com.example.mapper.UserMapper"></mapper> 开头,namespace 必须和对应接口全限定名一致,这是方法绑定的基础。
-
:执行查询,
id对应接口方法名,resultType用于字段名与属性名完全匹配的简单映射;若不一致或需嵌套对象,改用resultMap引用外部定义 -
:插入语句,设 useGeneratedKeys="true" keyProperty="id"可自动回填数据库自增主键到参数对象 -
和 :结构类似,只需写 SQL 和匹配 id,无返回值要求 -
:定义可复用的 SQL 片段,用 <include refid="xxx"></include>引入,避免重复写WHERE或字段列表 -
:复杂结果映射核心,支持 <id></id>(主键)、<result></result>(普通字段)、<association></association>(一对一)、<collection></collection>(一对多)
常见易错点和实用技巧
实际配置中几个关键细节容易被忽略,但直接影响运行效果:
- XML 文件开头的 DTD 声明不能省略或写错,例如:
-
properties中定义的变量,可在environments的<datasource></datasource>里用${username}引用;若内外同名,外部文件优先 - 使用
<package></package>批量注册 mapper 时,确保 XML 文件放在 classpath 对应路径下,且文件名与接口名一致(如UserMapper.java→UserMapper.xml) - 动态 SQL 标签(
<if></if>、<choose></choose>、<foreach></foreach>)只能出现在<select></select>/<update></update>等语句内部,不能直接放在<mapper></mapper>下
一个最小可用的 UserMapper.xml 示例
结合实际场景更易理解:










