最近看了一篇博客,选定springboot+mybatis作为框架,在idea中搭建maven的多模块工程,下面也再温习一下,并将搭建过程分享出来,供小伙伴们参考。
1、开发工具及系统环境
- Idea 2020.3
- 系统环境为win10
- mysql5.7+
- springboot2.7+
2、项目目录结构
- web层:请求处理层
- biz层:业务逻辑层
- mapper层:数据持久层
- model层:实体层
- common层:通用处理层
2.1、创建父工程
在idea中选择菜单File->New->Project…
选择Spring Initializr,Initializr默认选择Default,点击Next
填写相关信息,点击Next
不需要选择直接点Next
填写相关信息,点击Finish创建项目
最终得到的项目目录结构如下
删除无用的.mvn目录、src目录、mvnw及mvnw.cmd文件,最终只留.iml和pom.xml
2.2、创建子模块
选择项目根目录,右键呼出菜单,选择New -> Module
选择Maven,点击Next
填写ArifactId,点击Next
点击Finish即可。同理添加biz、mapper、model、common子模块,最终得到项目目录结构如下图
2.3、运行工程
在web子模块中创建com.***.web包,并添加入口类WebApplication.java
@SpringBootApplication
public class WebApplication {
public static void main(String[] args) {
SpringApplication.run(WebApplication.class, args);
}
}
添加controller目录并新建一个controller,添加test方法测试接口是否可以正常访问
@RestController
@RequestMapping("demo")
public class DemoController {
@GetMapping("test")
public String test() {
return "Hello World!";
}
}
运行WebApplication类中的main方法启动项目,默认端口为8080,访问http://localhost:8080/demo/test得到如下效果
2.4、配置模块间的依赖关系
各个模块之间的依赖关系:web依赖biz,biz依赖mapper,mapper依赖model,model依赖common。
父pom文件中声明所有子模块依赖
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.ldc</groupId>
<artifactId>maven_web</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.ldc</groupId>
<artifactId>maven_biz</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.ldc</groupId>
<artifactId>maven_mapper</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.ldc</groupId>
<artifactId>maven_model</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.ldc</groupId>
<artifactId>maven_common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</dependencyManagement>
在web子模块中的pom文件中添加biz依赖,其他同理
<dependency>
<groupId>com.ldc</groupId>
<artifactId>maven_biz</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
2.5、web层调用biz层
biz层代码
public interface DemoService {
String test();
}
@Service
public class DemoServiceImpl implements DemoService {
@Override
public String test() {
return "test";
}
}
@RestController
@RequestMapping("demo")
public class DemoController {
@Autowired
private DemoService demoService;
@GetMapping("test")
public String test() {
// return "Hello World!";
return demoService.test();
}
}
再次运行BetaWebApplication类中的main方法启动项目,发现如下报错
原因是找不到DemoService类,此时需要在WebApplication入口类中增加包扫描,设置@SpringBootApplication注解中的scanBasePackages值为com.***,最终如下所示
@SpringBootApplication(scanBasePackages = "com.***")
public class WebApplication {
public static void main(String[] args) {
SpringApplication.run(WebApplication.class, args);
}
}
设置完后重新运行main方法,项目正常启动,访问http://localhost:8080/demo/test得到如下效果
biz层调用mapper层同理,此时需要注意在WebApplication入口类中增加dao层包扫描,添加@MapperScan注解并设置其值为com.***.mapper,最终如下所示
@SpringBootApplication(scanBasePackages = "com.***")
@MapperScan("com.***.mapper")
public class WebApplication {
public static void main(String[] args) {
SpringApplication.run(WebApplication.class, args);
}
}
需添加依赖,否则MapperScan注解找不到
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
至此,一个简单的SpringBoot+Mybatis多模块项目已经搭建完毕,我们也通过启动项目调用接口验证其正确性。
3、小结
一个层次分明的多模块工程结构不仅方便维护,而且有利于后续微服务化。还可以继续集成logback、redis、kafka等组件。
以上具有可操作性,小伙伴感兴趣的话可以尝试~