前言
MyBatis有两种方式能和数据库打交道,一种是直接调用SqlSession
的select()
、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
的值 - 接口的方法名,就是映射文件中
MappedStatement
的id
值 - 接口方法内的参数,就是传递给SQL的参数
当调用接口方法时,通过接口全限名+方法名可唯一定位一个对应的MappedStatement
,MyBatis会使用JDK动态代理自动为该Mapper接口生成代理对象,而这个代理对象会拦截接口的方法,从而调用对应的MappedStatement
方法,最终执行SQL语句并返回执行结果。
也正因为是全限名+方法名的保存和寻找策略,所以Mapper接口里的方法是不能重载的。