【Mybatis】Mapper代理开发
目的
- 解决原生方式中的硬编码
- 简化后期执行SQL
步骤
- 定义与 SQL 映射文件同名的 Mapper 接口,并且将 Mapper 接口和 SQL 映射文件放置在同一目录下
在这个步骤下,起始按照 maven 的要求,接口和映射文件应该不能放在同一个目录下的,但这里的意思是,让 maven 编译后生成的 target 目录下生成的文件夹内,Mapper 接口和 sql 映射文件出现在同一目录。
那么如何实现这个方式呢?
首先在 src 目录下创建一个专门放映射接口的包,并创建一个和 sql 映射文件同名的 Mapper 接口,如下图的com.test.mapper
包和UserMapper.java
然后在 resources 目录下创建一个文件夹,这个文件夹的名称和放了 Mapper 接口的文件夹名称一样,但是创建的方式并不是用.
来间隔,而是用\
来间隔,即:com\test\mapper
,然后就会生成一个名为com.test.mapper
的文件夹,然后将UserMapper.xml
放入其中
接着使用 maven 的 compile 命令
最后在生成的 target 目录下,就会看到 Mapper 接口和 sql 映射文件放置在同一个目录下了
- 设置 SQL 映射文件的 namespace 属性为 Mapper 接口全限定名
这个步骤就是修改 sql 映射文件namespace
的值,将namespace
设置为对应的接口的全限定名
- 在 Mapper 接口中定义方法,方法名就是 SQL 映射文件中 sql 语句的 id,并保持参数类型和返回值类型一致
在 sql 映射文件中,可以看到id
和resultType
两个属性,这个id
对应的就是 Mapper 接口中的方法名称,而resultType
对应的就是返回值类型,于是在UserMapper接口中添加如下方法:
- 修改mybatis-config.xml的路径
由于第一步的 sql 映射文件被放入了新的包中,所以这个地方需要修改以下映射的路径
- 编码
和【Mybatis】简介中快速入门介绍的差不多,这里主要修改一个地方
也就是说执行 sql 查询需要先用sqlSession获得代理对象,然后用代理对象来执行。这样就不用每次执行都填写很长一串的namespace.id
。
细节:如果Mapper接口名称和SQL映射文件名称相同,并且在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载,包扫描的配置应该写在
mybatis-config.xml
文件中,如下图所示: