MyBatis 的接口绑定
MyBatis 的接口绑定(又称 Mapper 接口绑定)是指将Mapper 接口与 SQL 映射(XML 文件或注解)关联,使得开发者可通过调用接口方法直接执行对应的 SQL 语句,无需手动编写接口的实现类。MyBatis 通过动态代理技术为接口生成实现类,从而完成 SQL 的执行与结果映射。
接口绑定的实现方式
方式一:基于 XML 映射文件的绑定
- 定义 Mapper 接口接口中的方法名需与 XML 映射文件中<select>、<insert>等标签的id一致,参数和返回值需与 SQL 的参数、结果类型匹配。
public interface UserMapper {
User selectById(Integer id);
List<User> selectList();
int insert(User user);
}
- 编写 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>
- 关联配置在 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 解耦,结合动态代理实现 “面向接口编程”,大幅提升了开发效率。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...