Spring Boot + MyBatis 多模块项目搭建教程

一、前言

1、开发工具及系统环境

*
– IDE:IntelliJ IDEA 2020.2.2
– 系统环境:Windows

2、项目目录结构

*
– biz层:业务逻辑层
– dao层:数据持久层
– web层:请求处理层

二、搭建步骤

1、创建父工程

选择Spring Initializr,Initializr默认选择Default,点击Next

Spring Boot + MyBatis 多模块项目搭建教程

点击Next

Spring Boot + MyBatis 多模块项目搭建教程

这一步不需要选择直接Next

Spring Boot + MyBatis 多模块项目搭建教程

点击Finish创建项目

Spring Boot + MyBatis 多模块项目搭建教程

最终得到的项目目录结构如下,删除无用的.mvn目录、src目录、mvnw及mvnw.cmd文件,最终只留.gitignore和pom.xml

Spring Boot + MyBatis 多模块项目搭建教程

2、创建子模块

选择项目根目录shop右键呼出菜单,选择New -> Module

Spring Boot + MyBatis 多模块项目搭建教程

选择Maven,点击Next

Spring Boot + MyBatis 多模块项目搭建教程

填写ArifactId,Module name增加横杠提升可读性,点击Finish

Spring Boot + MyBatis 多模块项目搭建教程

同理添加shop-dao、shop-web子模块,最终得到项目目录结构如下图

Spring Boot + MyBatis 多模块项目搭建教程

3、运行项目

在shop-web层创建com.dasheng.shop.web包(注意:这是多层目录结构并非单个目录名,com >> dasheng >> shop>> web)并添加入口类ShopWebApplication.java

@SpringBootApplication
public class ShopWebApplition {
    public static void main(String[] args) {
        SpringApplication.run(ShopWebApplition.class, args);
    }
}

在com.dasheng.shop.web包中新建controller文件目录并新建一个controller,添加test方法测试接口是否可以正常访问

@RestController
@RequestMapping("demo")
public class Controller {

    @GetMapping("test")
    public String test() {
        return "Hello World!";
    }
}

运行ShopWebApplication类中的main方法启动项目,默认端口为8080

Spring Boot + MyBatis 多模块项目搭建教程

访问http://localhost:8080/demo/test得到如下效果

Spring Boot + MyBatis 多模块项目搭建教程

以上虽然项目能正常启动,但是模块间的依赖关系却还未添加,下面继续完善。

4、 配置模块间的依赖关系

各个子模块的依赖关系:

biz层依赖dao层,

web层依赖biz层

父pom文件中声明所有子模块依赖(dependencyManagement及dependencies的区别自行查阅文档)

com.dasheng.shop            shop-biz            0.0.1-SNAPSHOT                            com.dasheng.shop            shop-dao            0.0.1-SNAPSHOT                            com.dasheng.shop            shop-web            0.0.1-SNAPSHOT

在shop-web层中的pom文件中添加shop-biz依赖

com.dasheng.shop
        shop-biz

在shop-biz层中的pom文件中添加shop-dao依赖

com.dasheng.shop
        shop-dao

5. web层调用biz层接口测试

在shop-biz层创建com.dasheng.shop.biz包,添加service目录并在其中创建DemoService接口类

public interface DemoService {
    String test();
}
@Service("DemoService")
public class DemoServiceImpl implements DemoService {

    @Override
    public String test() {
        return null;
    }
}

com.dasheng.biz.web.controllerController通过@Autowired注解注入DemoService,修改DemoController的test方法使之调用DemoService的test方法,最终如下所示:

@Autowired
    private DemoService demoService;
@GetMapping("test2")
    public String test2() {
        return demoService.test();
    }

再次运行ShopWebApplication类中的main方法启动项目,发现如下报错

csharp;gutter:true;</p> <hr /> <p>APPLICATION FAILED TO START</p> <hr /> <p>Description:</p> <p>Field demoService in com.dasheng.biz.web.controller.Controller required a bean of type 'com.dasheng.biz.service.DemoService' that could not be found.</p> <p>The injection point has the following annotations: - @org.springframework.beans.factory.annotation.Autowired(required=true)</p> <p>Action:</p> <p>Consider defining a bean of type 'com.dasheng.biz.service.DemoService' in your configuration.</p> <p>Process finished with exit code 1</p> <pre><code> 原因是找不到DemoService类,此时需要在ShopWebApplication入口类中增加包扫描,设置@SpringBootApplication注解中的scanBasePackages值为com.dasheng.shop,最终如下所示 ![Spring Boot + MyBatis 多模块项目搭建教程](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20230605/2151015-20211121213450201-1666173579.png) shop-web的pom加入 </code></pre> <p>org.mybatis.spring.boot mybatis-spring-boot-starter 1.1.1</p> <pre><code> mysql mysql-connector-java runtime 5.1.27 org.mybatis mybatis-spring 1.3.2 </code></pre> <pre><code> ![Spring Boot + MyBatis 多模块项目搭建教程](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20230605/2151015-20211121213542959-629115408.png) applicatio.yml配置 新建applicatio.yml配置文件:https://blog.csdn.net/weixin_44848573/article/details/106445457 </code></pre> <p>spring: datasource: driver-class-name: com.mysql.jdbc.Driver username: root password: root url: jdbc:mysql://localhost:3306/test01?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true</p> <pre><code> </code></pre> <p>@SpringBootApplication(scanBasePackages = "com.dasheng.biz") @MapperScan("com.dasheng.biz.dao") public class ShopWebApplition { public static void main(String[] args) { SpringApplication.run(ShopWebApplition.class, args); } }

完成!!

Spring Boot + MyBatis 多模块项目搭建教程

业务层直接调用(@Autowired )dao层(Mybatis)就完事了这不在叙述了,因为没有到入实体,项目放到gitee了,有需要的同学可以下载哦!

https://gitee.com/diaoyulin/shop.git

Original: https://www.cnblogs.com/diaoyulin/p/15586139.html
Author: yl_diao
Title: Spring Boot + MyBatis 多模块项目搭建教程

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/576312/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 二进制方式部署K8S(kubernetes)集群(测试、学习环境)-单主双从

    1. 二进制方式部署(一主多从) 1.1 环境准备 角色 IP 组件 master 10.27.134.250 kube-apiserver、kube-controller-man…

    数据库 2023年6月9日
    077
  • 23种设计模式之命令模式和策略模式的区别

    命令模式和 策略模式确实很相似,只是命令模式多了一个接收者(Receiver)角色。它们虽然同为行为类模式,但是两者的区别还是很明显的。策略模式的意图是封装算法,它认为&#8221…

    数据库 2023年6月6日
    090
  • SQL99相较于SQL92在多表查询时的新语法

    1.自然连接 NATURAL JOIN SQL99中新增的自然连接相当于SQL92中的等值连接。它可以自动的查询两个表中 所有的相同字段,然后进行等值连接。 在SQL92中: SE…

    数据库 2023年5月24日
    087
  • python pywin32学习笔记

    参考博客链接 参考博客链接 pyhandle windows窗体句柄,int 类型  className 窗体类名  text 窗体标题 窗体置顶  窗体最大化 通过父pyhand…

    数据库 2023年6月11日
    089
  • 2022-8-17 mysql 第三天

    子查询 根据结果集中的行数,子查询可以分为以下几类: [En] According to the number of rows in the result set, subquer…

    数据库 2023年5月24日
    065
  • MySQL备份迁移之mydumper

    简介 mydumper 是一款开源的 MySQL 逻辑备份工具,主要由 C 语言编写。与 MySQL 自带的 mysqldump 类似,但是 mydumper 更快更高效。mydu…

    数据库 2023年5月24日
    0120
  • 【大厂面试必备系列】滑动窗口协议

    引言 想象一下这个场景:主机 A 一直向主机 B 发送数据,不考虑主机 B 的接收能力,则可能导致主机 B 的接收缓冲区满了而无法再接收数据,从而导致大量的数据丢包,引发重传机制。…

    数据库 2023年6月6日
    0114
  • Redis-缓存雪崩,击穿,穿透

    小结 布隆过滤器 工作原理:布隆过滤器是一个由初值为0的长度为L的bit数组和N个哈希函数组成。当有向数据库写入操作时,对键进行N次哈希值计算,并对计算后的值取L的模,对数组相应位…

    数据库 2023年6月11日
    066
  • 优秀体现在细微处

    上面是团队内小王同学整理的需求评审计划,我们看最后一列的细节之处,即,加上了与这个需求相关的资料。 希望我们都能像上面的小王同学一样。 我们的信息,从不同角度来看,总会分散在不同的…

    数据库 2023年6月9日
    093
  • Spring(四)-声明式事务

    Spring-04 声明式事务 1、事务的定义 事务就是由 一组逻辑上紧密关联的 多个工作单元(数据库操作)而合并成一个整体,这些操作 要么都执行,要么都不执行。 2、事务的特性:…

    数据库 2023年6月16日
    0115
  • Redis-IO模型

    即便是单线程,Redis还是那么快? 一说到Redis的IO模型,就会说到Redis是”单线程”处理的。这里的单线程,主要是指 网络IO和键值读写,也就是处…

    数据库 2023年6月11日
    0114
  • 此计算机缺少”vc2005_spl_with_atl_fix_redist”解决问题

    1、安装loadrunner提示:此计算机缺少 vc2005_spl_with_atl_fix_redist 2、进入目录,点击vcredist_x86.exe,对组件进行安装:E…

    数据库 2023年6月14日
    0105
  • B树-查找

    B树系列文章 1. B树-介绍 2. B树-查找 3. B树-插入 4. B树-删除 查找 假设有一棵3阶B树,如下图所示。 下面说明在该B树中查找 52的过程 首先,从根结点出发…

    数据库 2023年6月14日
    0139
  • 启程——博客之路

    憋了这么久还是忍不住开始写自己的博客了。。。之前总是看别人的博客,伸手党一个,但是时间久了,总有一些自己想说的话,想想分享一些技术、经验,也能记录自己的学习历程,毕竟编程这条路还很…

    数据库 2023年6月9日
    077
  • Java学习-第一部分-第一阶段-第六节:面向对象编程(基础)

    面向对象编程(基础) 笔记目录:(https://www.cnblogs.com/wenjie2000/p/16378441.html) 类与对象 ●使用现有技术解决 张老太养了两…

    数据库 2023年6月11日
    0126
  • Java线程状态(生命周期)–一篇入魂

    1.线程状态(生命周期) 一个线程在给定的时间点只能处于一种状态。 线程可以有如下6 种状态: New (新创建):未启动的线程; Runnable (可运行):可运行的线程,需要…

    数据库 2023年6月6日
    0104
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球