MyBatis的接口绑定是什么?有哪些实现方式?

内容分享3个月前发布
1 0 0

MyBatis 的接口绑定

MyBatis 的接口绑定(又称 Mapper 接口绑定)是指将Mapper 接口与 SQL 映射(XML 文件或注解)关联,使得开发者可通过调用接口方法直接执行对应的 SQL 语句,无需手动编写接口的实现类。MyBatis 通过动态代理技术为接口生成实现类,从而完成 SQL 的执行与结果映射。

接口绑定的实现方式

方式一:基于 XML 映射文件的绑定

  1. 定义 Mapper 接口接口中的方法名需与 XML 映射文件中<select>、<insert>等标签的id一致,参数和返回值需与 SQL 的参数、结果类型匹配。
public interface UserMapper {
    User selectById(Integer id);
    List<User> selectList();
    int insert(User user);
}
  1. 编写 XML 映射文件XML 文件的namespace需指定为 Mapper 接口的全限定名,标签的id与接口方法名一一对应。
<mapper namespace="com.example.mapper.UserMapper">
    <select id="selectById" resultType="User">
        SELECT * FROM user WHERE id = #{id}
    </select>
    <select id="selectList" resultType="User">
        SELECT * FROM user
    </select>
    <insert id="insert" parameterType="User">
        INSERT INTO user(name, age) VALUES(#{name}, #{age})
    </insert>
</mapper>
  1. 关联配置在 MyBatis 的全局配置文件(如mybatis-config.xml)中,通过<mappers>标签加载 XML 映射文件:
<mappers>
    <mapper resource="mapper/UserMapper.xml"/>
</mappers>

方式二:基于注解的绑定

直接在 Mapper 接口的方法上通过MyBatis 注解(如@Select、@Insert、@Update、@Delete)编写 SQL,无需 XML 文件。

public interface UserMapper {
    @Select("SELECT * FROM user WHERE id = #{id}")
    User selectById(Integer id);

    @Select("SELECT * FROM user")
    List<User> selectList();

    @Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})")
    int insert(User user);
}

之后在全局配置文件中加载 Mapper 接口即可:

<mappers>
    <mapper class="com.example.mapper.UserMapper"/>
</mappers>

两种方式的对比与选择

对比项

基于 XML 的绑定

基于注解的绑定

适用场景

复杂 SQL(含动态 SQL、关联查询等)

简单 SQL(无复杂逻辑,可读性要求高)

维护性

便于 SQL 管理和团队协作

适合小型项目或快速开发

灵活性

支持动态 SQL(<if>、<foreach>等)

不支持动态 SQL,复杂场景需拼接字符串

接口绑定是 MyBatis 简化开发的核心机制之一,通过 XML 或注解将接口与 SQL 解耦,结合动态代理实现 “面向接口编程”,大幅提升了开发效率。

© 版权声明

相关文章

暂无评论

none
暂无评论...