• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

浅谈Mybatis Plus的BaseMapper的方法是如何注入的

java 搞代码 4年前 (2022-01-05) 56次浏览 已收录 0个评论
文章目录[隐藏]

我们在用的时候经常就是生产自定义的Mapper继承自BaseMapper,那么BaseMapper怎么被注入到mybatis里的,本文就详细的介绍一下,感兴趣的可以了解一下

Mybatis Plus的BaseMapper的方法

我们在用的时候经常就是生产自定义的Mapper继承自BaseMapper,然后我们就可以使用了,但是有没想过BaseMapper里的方法是怎么被注入到mybatis里的,也没看到什么xml啊,今天我们就来看看是怎么回事。

Mybatis Plus的初始化方法

MybatisPlusAutoConfiguration中的SqlSessionFactory

在创建的时候会创建MybatisSqlSessionFactoryBean,然后设置MybatisConfiguration作为配置类。

MybatisConfiguration是继承自Configuration的:

自定义了一个MybatisMapperRegistry注册器,后面会用到。

BaseMapper方法的注入的过程

MybatisSqlSessionFactoryBean的初始化后方法afterPropertiesSet调用buildSqlSessionFactory创建SqlSessionFactory

其实就会去解析自定义的mapperxml文件:

其中有个addMapper的方法,是前面MybatisConfiguration调用的。

会解析出对应的类型,然后内部调用MybatisMapperRegistry的方法:

内部最后是MybatisMapperAnnotationBuilder去解析的:

里面会进行基本的SQL方法注入:

完成每个方法的注入:

注入的实现:

其实每一个AbstractMethod的子类都会实现自己的injectMappedStatement

最后会去枚举类SqlMethod中获取对应的枚举,里面就是类似定义在xml中的信息,最后转换为sqlSource再进行封装:

SqlMethod 枚举值:

 public enum SqlMethod { /** * 插入 */ INSERT_ONE("insert", "插入一条数据(选择字段插入)", ""), UPSERT_ONE("upsert",<b style="color:transparent">来源gao@!dai!ma.com搞$$代^@码网</b> "Phoenix插入一条数据(选择字段插入)", ""), /** * 删除 */ DELETE_BY_ID("deleteById", "根据ID 删除一条数据", ""), DELETE_BY_MAP("deleteByMap", "根据columnMap 条件删除记录", ""), DELETE("delete", "根据 entity 条件删除记录", ""), DELETE_BATCH_BY_IDS("deleteBatchIds", "根据ID集合,批量删除数据", ""), /** * 逻辑删除 */ LOGIC_DELETE_BY_ID("deleteById", "根据ID 逻辑删除一条数据", ""), LOGIC_DELETE_BY_MAP("deleteByMap", "根据columnMap 条件逻辑删除记录", ""), LOGIC_DELETE("delete", "根据 entity 条件逻辑删除记录", ""), LOGIC_DELETE_BATCH_BY_IDS("deleteBatchIds", "根据ID集合,批量逻辑删除数据", ""), /** * 修改 */ UPDATE_BY_ID("updateById", "根据ID 选择修改数据", ""), UPDATE("update", "根据 whereEntity 条件,更新记录", ""), /** * 逻辑删除 -> 修改 */ LOGIC_UPDATE_BY_ID("updateById", "根据ID 修改数据", ""), /** * 查询 */ SELECT_BY_ID("selectById", "根据ID 查询一条数据", "SELECT %s FROM %s WHERE %s=#{%s} %s"), SELECT_BY_MAP("selectByMap", "根据columnMap 查询一条数据", ""), SELECT_BATCH_BY_IDS("selectBatchIds", "根据ID集合,批量查询数据", ""), SELECT_ONE("selectOne", "查询满足条件一条数据", ""), SELECT_COUNT("selectCount", "查询满足条件总记录数", ""), SELECT_LIST("selectList", "查询满足条件所有数据", ""), SELECT_PAGE("selectPage", "查询满足条件所有数据(并翻页)", ""), SELECT_MAPS("selectMaps", "查询满足条件所有数据", ""), SELECT_MAPS_PAGE("selectMapsPage", "查询满足条件所有数据(并翻页)", ""), SELECT_OBJS("selectObjs", "查询满足条件所有数据", ""); private final String method; private final String desc; private final String sql; SqlMethod(String method, String desc, String sql) { this.method = method; this.desc = desc; this.sql = sql; } public String getMethod() { return method; } public String getDesc() { return desc; } public String getSql() { return sql; } }

最终还是调用了MapperBuilderAssistantaddMappedStatement进行注册:

总结

  •  初始化注入自定义的MybatisConfiguration和MybatisMapperRegistry。
  • 解析Mapper类,获取方法对应的AbstractMethod。
  • 调用各自的实现进行去SqlMethod获取对应的枚举,获取到信息后进行注册。

其实就相当于代码里面定义了原本需要再xx.xml定义的数据,直接在代码中获取注入常用的CRUD操作即可。

以上就是浅谈Mybatis Plus的BaseMapper的方法是如何注入的的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:浅谈Mybatis Plus的BaseMapper的方法是如何注入的

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址