使用Mapper接口执行SQL

135 阅读1分钟

MyBatis 使用 非 Mapper 接口方式执行 CRUD

查询一条数据

image.png

image.png

查询多条数据

image.png

image.png

插入数据

image.png

image.png

更新数据

image.png

image.png

删除数据

image.png

image.png

执行插入、更新、删除后,需要手动提交事务

image.png

MyBatis 使用 非 Mapper 接口方式执行 SQL 的弊端

image.png

  • 调用 SQL 依赖字符串字面值,容易出错
  • 参数设置不清晰,容易出错
  • 如果不小心输入错误,编译期间无法发现,执行时才会发现

MyBatis 使用 Mapper 接口方式执行 CRUD

第1步:创建 mapper 接口,mapper 接口的方法与 mapper xml 文件中的 SQL 对应

image.png

第2步:将 mapper xml 文件的 namespace 修改为 mapper 接口的全限定名

image.png

第3步:调用 SqlSession 的 getMapper 方法,传入 mapper 接口类型为入参,获取 mapper 接口的实现类实例。

image.png

第4步:调用获取的 mapper 接口实现类实例的方法,执行 SQL

image.png

getMapper 原理解析

  • 调用 getMapper 方法时,MyBatis 使用动态代理技术生成 mapper 接口的实例。
  • 生成的 mapper 接口实例会拦截所有方法调用,并将方法调用转发 SqlSession。
  • SqlSession 调用与 mapper 接口对应的 mapper xml 中的 SQL 语句。

image.png

模拟代理实例的实现

image.png

image.png