前言

MyBatis有两种方式能和数据库打交道,一种是直接调用SqlSessionselect()update()等方法,传入statementId参数即可;另一种则是通过Mapper接口,这种方式在实际应用中更加常见,因为它使我们可以使用面向接口编程的方式操作数据库。

XML映射文件

Mybatis将所有XML配置信息都封装到Configuration内部,在XML映射文件中:

  • <parameterMap>标签,会被解析为ParameterMap对象,其每个子元素会被解析为ParameterMapping对象
  • <resultMap>标签,会被解析为ResultMap对象,其每个子元素会被解析为ResultMapping对象
  • 每一个<select><insert><update><delete>标签,均会被解析为一个MappedStatement对象,标签内的SQL会被解析为一个BoundSql对象

Mapper接口

在MyBatis中,Mapper接口是与XML映射文件相对应的,它们之间的对应关系如下:

  • 接口的全限名,就是映射文件中的namespace的值
  • 接口的方法名,就是映射文件中MappedStatementid
  • 接口方法内的参数,就是传递给SQL的参数

当调用接口方法时,通过接口全限名+方法名可唯一定位一个对应的MappedStatement,MyBatis会使用JDK动态代理自动为该Mapper接口生成代理对象,而这个代理对象会拦截接口的方法,从而调用对应的MappedStatement方法,最终执行SQL语句并返回执行结果。

也正因为是全限名+方法名的保存和寻找策略,所以Mapper接口里的方法是不能重载的。

参考资料