开发者

模仿mybatis-plus实现rpc调用

开发者 https://www.devze.com 2023-02-15 10:35 出处:网络 作者: 雨夜之寂
目录正文组件的整合优化点场景:背景:步骤:正文 首先我的目标就是 为了把rpc调用进行封装,让业务人员开发的时候 快速使用
目录
  • 正文
  • 组件的整合
    • 优化点
  • 场景:
    • 背景:
      • 步骤:

    正文

    首先我的目标就是 为了把rpc调用进行封装,让业务人员开发的时候 快速使用

    组件的整合

    pom.XML 整合

    <dependency>
        <groupId>com.yuye</groupId>
        <artifactId>yuye-metadatawww.devze.com-spring-boot-starter</artifactId>
    </dependency>
    

    假设你的业务package 名为 com.yuye.biz.xxx

    新建一个package 比如com.yuye.biz.xxx.metadata.mapper 新建一个TestMetadata.Java 接口

    @Metadat编程客栈aModel("model01")
    public interface TestMetadataMapper {
        String test();
    }
    

    Application 启动类上加

    @MetadataModelScan(basePackage = {"com.example.metadata.mapper"})
    

    你需要在MetadataMapperMethod 类中 添加自己的逻辑

    优化点

    • 可以把所有 接口的动态代理都使用这个组件
    • 支持插件化扩展MetadataMapperMethod 的逻辑

    场景:

    1 我需要 在有myBATis的 同时,我要模仿 BaseMapper 接口这种动态代理 底层进行rpc调用

    额外考虑:

    •  mybatis 和 mybatis-plus 共存的情况,会出现 多次动态代理的情况,怎么保证正确性
    •  发现 拿Object 接动态代理之后的对象可以,用接口接 就不行AxCFxnrnm
    •  对必要的东西 进行cache

    背景:

    让以后其他接口 可以自由的实现自定义动态代理逻辑,

    比如现在有mapper 代理 和 metadata代理,之后再来一个 xxx功能,可以快速整合

    步骤:

    1 组件放到 一个springboot项目(无mybatis 和 mybatis-plus)

    测试通过

    2 springboot项目 添加mybatis 进行重新测试

    测试通过

    3 springboot项目 去掉mybatjsis 添加 mybatis-plus 进行重新测试

    因为 mybatis 和mybatis-plus 有冲突,一般项目都是用其中一个

    测试通过www.devze.com

    上面这三步是因为公司项目中不开发者_Go教程敢保证都是用 mybatis 或者 mybatis-plus,有可能根据项目不同,选择不同的组件,所以我们2个都要兼容

    测试@MapperScan 和 @MetadataModelScan 是否有冲突

    总共分几种情况:

    1 各自管各自的

    @MetadataModelScan(basePackage = {"com.example.metadata.mapper"})
    @MapperScan({"com.example.dao"})
    

    2 @MapperScan 范围包含@MEtada

    @MetadataModelScan(basePackage = {"com.example.metadata.mapper"})
    @MapperScan({"com.example"})
    

    报错

    Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumed

    是因为 mapper和 metadata 都扫描到了 这个接口,多次动态代理,而且我们用的是 @

    @Autowired
    

    解决办法:

    1 把package 分开

    2 添加@MapperScan的拦截 过滤掉 @MetadataModel ,让mybatis 不扫描使用

    @MetadataModel 的接口

    3 @MetadataModelScan 大于 @MapperScan

    @MetadataModelScan(basePackage = {"com.example"})
    @MapperScan({"com.example.dao"})
    

    测试通过

    代码地址 github.com/a25017012/y…

    以上就是模仿mybatis-plus实现rpc调用的详细内容,更多关于模仿mybatis-plus rpc调用的资料请关注我们其它相关文章!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号