Springboot多模块项目如何搭建

436 阅读3分钟

一、工具环境准备

  • 开发工具:idea
  • 系统环境:mac os
  • jdk版本:1.8

二、搭建步骤

2.1、创建父工程

打开idea开发工具,选择菜单 File-> New -> Project,然后选择下图的1选项(表示创建SpringBoot项目),然后按照下图填写好项目信息即可

点击Next,然后就是选择项目依赖,这一步主要是选择项目依赖的包,创建完之后自动导入选择的依赖项,我们这里先不选,直接finish即可

最终生成的文件结构如下所示:

然后依次删除无用的.mvn目录、src目录、.mvnw和mvnw.cmd文件,只留下.ignore和pom.xml文件即可,最终文件结构如下:

2.2、创建子模块

右键项目-> New -> Module

选择Maven,然后点击Next, 依次填写好以下项目信息,然后点击Finish

然后按照同样的步骤创建pro-dao、pro-web两个maven工程,最终文件结构如下,

2.3、运行项目

在pro-web项目创建入口类和Controller进行测试

package com.dongci777.pro.web.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
* @Author: zxb
* @Date : 2021/11/13 5:40 下午
*/
@RestController
public class TestController {
    
    @GetMapping("/test")
    public String test() {
        return "hello world";
    }
}

启动入口类,然后访问localhost:8080/test

说明项目正常启动,到此项目分层建好了,接下来就是配置模块间的依赖关系

2.4、配置模块间依赖关系

依赖关系:

  • pro-biz 依赖pro-dao
  • pro-web 依赖pro-biz

在父项目文件的pom.xml文件中声明所有子模块依赖

<!--定义依赖的版本-->
<properties>
  <java.version>1.8</java.version>
  <pro.version>0.0.1-SNAPSHOT</pro.version>
</properties>

<!--声明全部的项目依赖-->
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.dongci777.pro</groupId>
      <artifactId>pro-biz</artifactId>
      <version>${pro.version}</version>
    </dependency>
    
    <dependency>
      <groupId>com.dongci777.pro</groupId>
      <artifactId>pro-dao</artifactId>
      <version>${pro.version}</version>
    </dependency>
    
    <dependency>
      <groupId>com.dongci777.pro</groupId>
      <artifactId>pro-web</artifactId>
      <version>${pro.version}</version>
    </dependency>
  </dependencies>
</dependencyManagement>

同样,需要在pro-biz层添加pro-dao的依赖,pro-web层添加pro-biz的依赖

pro-biz层pom.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <parent>
    <artifactId>springboot-mybatis-mul</artifactId>
    <groupId>com.dongci777</groupId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>
  
  <groupId>com.dongci777.pro</groupId>
  <artifactId>pro-biz</artifactId>
  
  <properties>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
  </properties>
  
  <dependencies>
    <dependency>
      <groupId>com.dongci777.pro</groupId>
      <artifactId>pro-dao</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>
  
</project>

pro-web层pom.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springboot-mybatis-mul</artifactId>
        <groupId>com.dongci777</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.dongci777.pro</groupId>
    <artifactId>pro-web</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>


    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.dongci777.pro</groupId>
            <artifactId>pro-biz</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>

</project>

2.5、web层调用biz层方法测试

首先在pro-biz层创建service接口和实现方法

然后在pro-web层的TestController层注入刚才的接口类,测试其test()方法

package com.dongci777.pro.web.controller;

import com.dongci777.pro.biz.service.DemoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
* @Author: zxb
* @Date : 2021/11/13 5:40 下午
*/
@RestController
public class TestController {
    
    @Autowired
    private DemoService demoService;
    
    @GetMapping("/test")
    public String test() {
        return demoService.test();
    }
}

再次运行项目,发现启动失败,报如下错误:

原因是找不到我们在pro-biz层创建的DemoService类,我们需要在ProWebApplication入口类中增加包扫描

重新运行项目,下面表示启动成功!

访问http://localhost:8080/test,如果出现下面就表示成功!

2.6、集成Mybatis

在父项目中的pom.xml文件中加入mybatis、lombok依赖

<dependency>
  <groupId>org.mybatis.spring.boot</groupId>
  <artifactId>mybatis-spring-boot-starter</artifactId>
  <version>1.3.2</version>
</dependency>

<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <version>1.18.22</version>
</dependency>

在pro-dao层pom.xml文件中添加增加mysql-connector依赖

<dependencies>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.27</version>
    </dependency>
</dependencies>

在pro-dao层新建实体类层(entity)、mapper层、以及mapper.xml文件

@Data
public class User {
    
    private Integer id;
    
    private String name;
    
}
@Repository
public interface UserMapper {
    User selectById(Integer id);
}
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.dongci777.pro.dao.mapper.UserMapper">
  <select id="selectById" parameterType="integer" resultType="com.dongci777.pro.dao.entity.User">
    select *
    from user
    where id = #{id}
  </select>
</mapper>

增加application.propertites配置文件

spring.datasource.url=jdbc:mysql://你的数据库ip地址:端口号/pro?useUnicode=true&characterEncoding=utf-8
spring.datasource.name=数据库用户名
spring.datasource.password=数据库密码
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=com.dongci777.pro.dao.entity

最后需要在主类上加入mapper扫描

最后重新启动项目,然后访问 http://localhost:8080/test

三、总结

多模块项目不仅方便后期维护,而且有利于后续微服务化,在此结构还可以扩展common层(公共组件层)server层(例如dubbo对外提供的服务)