poorzhu 2024-04-26 11:14 采纳率: 50%
浏览 7
已结题

springCloud+mybatisPlus

问题

springcloud整合mybatis-plus,使用中如何将mybatis-plus拆分为单个数据服务,service调用mapper

描述

在进行springCloud搭建的时候,将一个大的项目拆分为多个小项目,在此基础上,我在想是否可以将mybatis-plus所生成的一套代码封成一个jar,作为serviec调用mapper,采用包引用的方式进行调用,具体拆包如下

  • star
    • starData
      • starDoVo
      • starMysql
    • starDoc

其中,starDoc作为客户端,引用了starMysql、starDoVO
在service上如下使用mybatis-plus:

@Service
public class DocServiceImpl extends ServiceImpl<DocImformationMapper, DocImformation> implements DocService {

    @Override
    public String getDocList() {
        return baseMapper.getDocList();
    }
}

但是在启动项目时,无法找到starMysql项目中的mapper。
这种拆分是否合理呢?mybatis-plus是否支持这么玩呢?
这么玩的好处自然是可以随意切换数据源,如果遇到oracle或者其他数据库,可以直接切换jar就可以

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-26 11:14
    关注

    引自免费微信小程序:皆我百晓生

    在Spring Cloud微服务架构中,将MyBatis-Plus模块拆分成独立的服务确实是一个合理的方案,这有助于解耦和复用。不过,要实现这个目标,你需要做以下几个步骤:

    1. 创建单独的MyBatis-Plus模块(starMysql):

      • 在starMysql项目中,包含实体类(DoDO),Mapper接口和Mapper XML文件。
      • 添加MyBatis-Plus依赖项到pom.xml。
    2. 封装为可重用的JAR:

      • 完成starMysql项目的开发后,打包为jar文件,然后发布到公司的私有Maven仓库。
    3. 引入starMysql模块到其他服务:

      • 在starDoc和其他需要使用starMysql服务的项目中,通过pom.xml引入starMysql的jar包。
    4. 服务间的通信:

      • 使用Spring Cloud Gateway 或者 Zuul 进行API网关路由,使得starDoc可以通过HTTP请求访问starMysql提供的服务。
      • 使用Feign Client 或 RSocket 等技术实现服务之间的远程调用。
    5. 映射器的自动扫描与注入:

      • 因为每个微服务有自己的ApplicationContext,所以无法直接通过@Service注解继承ServiceImpl并自动扫描Mapper接口。你需要在每个微服务中手动注册Mapper接口。

    以下是starDoc项目中如何手动注册Mapper接口的示例:

    @Configuration
    @MapperScan("com.example.starmysql.mapper") // 替换为starMysql项目中Mapper接口所在的包名
    public class MyBatisConfig {
    }
    
    // DocServiceImpl.java
    @Service
    public class DocServiceImpl {
    
        private final DocImformationMapper docImformationMapper;
    
        public DocServiceImpl(DocImformationMapper docImformationMapper) {
            this.docImformationMapper = docImformationMapper;
        }
    
        @Override
        public String getDocList() {
            return docImformationMapper.getDocList();
        }
    }
    
    1. 数据源配置:

      • 在每个微服务的application.yml或application.properties中配置对应的数据源信息,这样就可以根据需求轻松地切换不同的数据库。
    2. 路由与调用:

      • 如果使用Spring Cloud Gateway,定义路由规则使starDoc项目可以调用starMysql项目提供的服务。
      • 如果使用Zuul,配置zuul.routes以实现同样的目的。
      • 使用Feign Client进行远程调用,例如:
        @FeignClient(name = "STAR_MYSQL_SERVICE", fallback = StarMysqlFallback.class)
        public interface StarMysqlClient {
            @GetMapping("/doc/list")
            String getDocList();
        }
        
      • 在DocServiceImpl中,通过StarMysqlClient调用getDocList方法。

    这样,你就实现了通过Spring Cloud和MyBatis-Plus进行多数据源的灵活切换。但是需要注意的是,这种方式会增加网络延迟,并且维护成本可能会提高,因为每次更改都需要重新构建和部署所有相关的微服务。因此,在设计时应权衡利弊。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 5月4日
  • 已采纳回答 4月26日
  • 创建了问题 4月26日

悬赏问题

  • ¥15 mysql将查询的结果作为动态列名怎么实现
  • ¥50 python自动地图截图脚本
  • ¥15 悬赏一本书(内含Matlab代码)的书名、作者
  • ¥20 瑞萨RA4M1芯片刷写为arduino r4 minima
  • ¥15 前端vue跟后端java服务部署在线上阿里云服务器
  • ¥15 fastreport怎么判断当前页数
  • ¥15 Kylin-Desktop-V10-GFB-Release-JICAI_02- 2207-Build14-ARM64.iso有没有这个版本的系统啊
  • ¥15 能不能通过蓝牙将传感器数据传送到手机上
  • ¥20 100元python和数据科学实验项目
  • ¥15 根据时间在调用出列表