5.4 Mapper 文件
使用 @RefMapper 注解将 Mapper 接口与 XML 文件关联,将全部或部分方法的 SQL 定义迁移到文件中。接口上未关联到文件的方法仍然可以使用 方法注解(@Query / @Insert 等)。
先选写法
| 你的目标 | 推荐方式 |
|---|---|
| 常见动态条件、IN 查询、SET 片段 | 优先使用 规则,写法更接近原生 SQL。 |
| 迁移已有 MyBatis 风格 SQL | 使用 动态 SQL 标签。 |
| 配置查询结果到 DTO 的映射 | 使用 resultMap。 |
| 配置表到实体类的映射 | 使用 entity 或 对象映射注解。 |
Mapper 接口
@RefMapper("/mapper/userMapper.xml")
public interface UserMapper {
// 注解方式定义的 SQL
@Insert("insert into users (id, name) values (#{id}, #{name})")
int saveUser(User user);
// 映射到 XML 文件中的 SQL
List<User> listUsers(@Param("searchId") long searchId);
}
userMapper.xml
<mapper namespace="net.example.mapper.UserMapper">
<select id="listUsers">
select * from users where id > #{searchId}
</select>
</mapper>
使用 Mapper
Session session = config.newSession(dataSource);
UserMapper mapper = session.createMapper(UserMapper.class);
List<User> result = mapper.listUsers(2);
提示
Session 的获取方式取决于项目架构,详见 框架整合。