【Mybatis】Mapper代理开发

目的

  • 解决原生方式中的硬编码
  • 简化后期执行SQL

步骤

  1. 定义与 SQL 映射文件同名的 Mapper 接口,并且将 Mapper 接口和 SQL 映射文件放置在同一目录下

在这个步骤下,起始按照 maven 的要求,接口和映射文件应该不能放在同一个目录下的,但这里的意思是,让 maven 编译后生成的 target 目录下生成的文件夹内,Mapper 接口和 sql 映射文件出现在同一目录。
那么如何实现这个方式呢?
首先在 src 目录下创建一个专门放映射接口的包,并创建一个和 sql 映射文件同名的 Mapper 接口,如下图的com.test.mapper包和UserMapper.java

image

然后在 resources 目录下创建一个文件夹,这个文件夹的名称和放了 Mapper 接口的文件夹名称一样,但是创建的方式并不是用.来间隔,而是用\来间隔,即:com\test\mapper,然后就会生成一个名为com.test.mapper的文件夹,然后将UserMapper.xml放入其中

image

接着使用 maven 的 compile 命令

image

最后在生成的 target 目录下,就会看到 Mapper 接口和 sql 映射文件放置在同一个目录下了

image

  1. 设置 SQL 映射文件的 namespace 属性为 Mapper 接口全限定名

这个步骤就是修改 sql 映射文件namespace的值,将namespace设置为对应的接口的全限定名

image

  1. 在 Mapper 接口中定义方法,方法名就是 SQL 映射文件中 sql 语句的 id,并保持参数类型和返回值类型一致

在 sql 映射文件中,可以看到idresultType两个属性,这个id对应的就是 Mapper 接口中的方法名称,而resultType 对应的就是返回值类型,于是在UserMapper接口中添加如下方法:

image

  1. 修改mybatis-config.xml的路径

由于第一步的 sql 映射文件被放入了新的包中,所以这个地方需要修改以下映射的路径

image

  1. 编码

【Mybatis】简介中快速入门介绍的差不多,这里主要修改一个地方

image

也就是说执行 sql 查询需要先用sqlSession获得代理对象,然后用代理对象来执行。这样就不用每次执行都填写很长一串的namespace.id

细节:如果Mapper接口名称和SQL映射文件名称相同,并且在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载,包扫描的配置应该写在mybatis-config.xml文件中,如下图所示:
image

posted @ 2022-05-15 17:56  ShaunY  阅读(16)  评论(0编辑  收藏  举报