MyBatis的 Mapper.xml 文件配置详解(含完整代码示例)
1. 核心配置标签及示例
1.1
所有配置必须包裹在
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
1.2
启用当前命名空间的二级缓存。
type="org.mybatis.caches.ehcache.EhcacheCache" eviction="LRU" flushInterval="60000" size="1024" readOnly="false"/> 1.3 定义结果集到对象的映射关系,处理复杂字段(如关联查询)。 select="com.example.mapper.OrderMapper.selectOrdersByUserId"/> 1.4 基础 SQL 语句标签 SELECT * FROM user WHERE id = #{id} SELECT * FROM user WHERE name = #{name} INSERT INTO user (name, age) VALUES (#{name}, #{age}) SELECT LAST_INSERT_ID() UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id} DELETE FROM user WHERE id = #{id} 1.5 动态 SQL 标签 SELECT * FROM user AND name = #{name} AND age > #{age} SELECT * FROM user WHERE id IN #{id} SELECT * FROM user AND status = 1 AND status = 2 AND status = 0 1.6 id, name, age, create_time SELECT FROM user WHERE id = #{id} 1.7 通过 Java 类生成 SQL 语句: // 动态 SQL 生成器类(DynamicSqlProvider.java) public class DynamicSqlProvider { public String selectUsersByCondition(Map String sql = "SELECT * FROM user WHERE 1=1"; if (params.containsKey("name")) { sql += " AND name = #{name}"; } return sql; } } 1.8 INSERT INTO user (name, age) VALUES (#{name}, #{age}) SELECT LAST_INSERT_ID() 1.9 结果映射高级用法 select="com.example.mapper.OrderMapper.selectOrdersByUserId"/> 1.10 在 SQL 中动态绑定变量: SELECT * FROM user WHERE name LIKE #{dynamicParam} 1.11 2. 完整 Mapper.xml 示例
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> id, name, age, create_time SELECT u.id, u.name, u.age, d.dept_id, d.dept_name FROM user u LEFT JOIN department d ON u.dept_id = d.dept_id WHERE u.id = #{id} SELECT FROM user AND name = #{name} AND age > #{age} INSERT INTO user (name, age) VALUES (#{name}, #{age}) SELECT LAST_INSERT_ID() UPDATE user name = #{name}, age = #{age}, WHERE id = #{id} DELETE FROM user WHERE id = #{id} SELECT FROM user WHERE id = #{id} SELECT * FROM user WHERE id IN #{id} select="com.example.mapper.OrderMapper.selectOrdersByUserId"/> SELECT * FROM user WHERE id = #{id} 3. 标签分类及作用表格 标签作用示例关键属性 4. 标签属性详解 4.1 属性说明id唯一标识符,对应 Mapper 接口方法名。resultType返回结果的 Java 类型(全限定名或别名)。resultMap引用 4.2 属性说明id唯一标识符,供其他标签引用。type映射的目标类(全限定名或别名)。extends继承其他 4.3 动态 SQL 标签属性 标签属性说明 5. 关联查询示例 select="com.example.mapper.OrderMapper.selectOrdersByUserId"/> 5. 完整示例代码说明 5.1 实体类(User.java) public class User { private Long id; private String name; private Integer age; private Department department; // 一对一关联 private List // Getters and Setters } 5.2 Department.java public class Department { private Long deptId; private String deptName; // Getters and Setters } 5.3 Order.java public class Order { private Long orderId; private Long userId; private String orderNo; // Getters and Setters } 6. 配置项总结表格 标签描述示例关键属性 7. 关键配置说明 7.1 嵌套结果(嵌套查询): javaType="Department" select="com.example.mapper.DepartmentMapper.selectById"/> 延迟加载: column="dept_id" select="com.example.mapper.DepartmentMapper.selectById" fetchType="lazy"/> 7.2 动态 SQL 组合示例 SELECT * FROM user AND name LIKE CONCAT('%', #{name}, '%') AND age > #{age} AND status = 1 AND status = 0 8. 常见问题与最佳实践 Q:如何处理一对多关联? 同步查询:在 SQL 中直接 JOIN 并使用 Q:如何避免 SQL 注入? 使用 #{} 占位符,MyBatis 会自动进行预编译。对动态条件使用 Q:如何复用 SQL 片段? 通过 9. 总结 核心标签: 使用 通过合理使用这些标签,可以灵活实现复杂查询和对象映射。