1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > springboot 模块引用_Spring Boot(三):SpringBoot多模块(module)项目搭建

springboot 模块引用_Spring Boot(三):SpringBoot多模块(module)项目搭建

时间:2020-08-13 09:43:27

相关推荐

springboot 模块引用_Spring Boot(三):SpringBoot多模块(module)项目搭建

一、前言

记录在IDEA中怎么搭建SpringBoot多模块(module)的过程,以一个交党费的项目为例,多模块的目录结构如下:

dajia-dangfei-api:存放实体类和一些service层接口

dajia-dangfei-provider:存放dao层接口及其实现类和service的实现类

dajia-dangfei-consumer:存放controller层

dajia-dangfei-web:存放前端页面等资源

二、搭建步骤

1、创建父工程

① IDEA 工具栏选择菜单 File -> New -> Project...

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

③ 填写输入框,点击Next

④ 这步不需要选择直接点Next

⑤ 点击Finish创建项目

⑥ 最终得到的项目目录结构如下

⑦ 删除无用的.mvn目录、src目录、mvnw及mvnw.cmd文件,最终只留.gitignore和pom.xml

2、创建子模块

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

② 选择Maven,点击Next

③ 填写ArifactId,点击Next

④ 修改Module name增加横杠提升可读性,点击Finish

⑤ 同理添加dajia-dangfei-provider、dajia-dangfei-consumer子模块,项目目录结构如下图

⑥添加dajia-dangfei-web的directory

⑦最终的目录结构如下

3、运行项目

① 在dajia-dangfei-consumer中创建com.dajia.income包,添加入口类ConsumerApplicationMain.java,并在income包下创建controller包放BillOrderController.java,目录结构如下

ConsumerApplicationMain.java:

@SpringBootApplicationpublic classConsumerApplicationMain {public static voidmain(String[] args) {

SpringApplication.run(ConsumerApplicationMain.class,args);

}

}

因为要通过前端访问BillOrderController中的方法,所以引入spring-boot-starter-web的jar包,在父工程的pom文件中定义,子模块自然可以用到

父工程dajia-dangfei的pom文件:

4.0.0

pom

dajia-dangfei-api

dajia-dangfei-provider

dajia-dangfei-consumer

org.springframework.boot

spring-boot-starter-parent

2.1.4.RELEASE

com.dajia

dajia-dangfei

0.0.1-SNAPSHOT

dajia-dangfei

Demo project for Spring Boot

1.8

org.springframework.boot

spring-boot-starter

org.springframework.boot

spring-boot-starter-test

test

org.springframework.boot

spring-boot-maven-plugin

引入springboot starter web的jar包

org.springframework.boot

spring-boot-starter

org.springframework.boot

spring-boot-starter-test

test

org.springframework.boot

spring-boot-starter-web

②BillOrderController中添加测试方法

@RestController

@RequestMapping("/billOrder")public classBillOrderController {

@RequestMapping("/test")publicString test(){return "hello World!!!";

}

}

③ 运行ConsumerApplicationMain类中的main方法启动项目,默认端口为8080,访问http://localhost:8080/billOrder/test得到如下效果

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

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

各个子模块的依赖关系:dajia-dangfei-consumer依赖dajia-dangfei-provider,dajia-dangfei-provider依赖dajia-dangfei-api

①在dajia-dangfei-provider中的pom文件中添加dajia-dangfei-api依赖

dajia-dangfei-api

com.dajia

0.0.1-SNAPSHOT

②在dajia-dangfei-consumer中的pom文件中添加dajia-dangfei-provider依赖

dajia-dangfei-provider

com.dajia

0.0.1-SNAPSHOT

5、各模块见得相互调用,从前端到数据库

①dajia-dangfei-api中定义BillOrder实体类、BillOrderService接口

BillOrder.java

public class BillOrder implementsSerializable{private static final long serialVersionUID = -1764514095260116666L;/** 交费单ID

**/

privateString billOrderID;/** 交费单姓名

**/

privateString personName;/** 交费单证件号

**/

privateString idNumber;/** 应交金额

**/

privateBigDecimal payAmt;/** 交费单创建时间

**/

privateDate createTime;

}

BillOrderService.java

public interfaceBillOrderService {/*** 根据交费单ID查找对应的交费单

*@parambillOrderID

*@return

*/BillOrder getBillOrderByID(String billOrderID);

}

dajia-dangfei-api中的目录结构如下

②dajia-dangfei-provider中定义billOrderServiceImpl实现类,dao层接口,数据库连接

数据库连接

父工程引入mybatis-spring-boot-starter和mysql-connector-java的jar包

mysql

mysql-connector-java

5.1.34

org.mybatis.spring.boot

mybatis-spring-boot-starter

1.1.1

resources下配置application.properties文件,主要配置两部分。一个是数据库的连接,一个是mybatis的mapper文件路径

spring.datasource.url=jdbc:mysql://localhost:3306/databasezfy?useUnicode=true&characterEncoding=UTF-8&useSSL=false

spring.datasource.driverClassName=com.mysql.jdbc.Driver

spring.datasource.username=root

spring.datasource.password=123456mybatis.config-locations=mybatis/mybatis-config.xml

mybatis.mapper-locations=mybatis/mapper/*.xml

填写billOrder-mapper.xml中对应的SQL语句

/p>

"/dtd/mybatis-3-mapper.dtd">

billOrderID,personName,idNumber,payAmt,createTime

SELECTFROM billOrder

WHERE billOrderID = #{billOrderID}

dao层接口,@Repository注解是为了在serviceImpl中可以同过@Autowired的方式注入BillOrderMapper

@Repositorypublic interfaceBillOrderMapper {/*** 根据交费单ID查找对应的交费单

*@parambillOrderID

*@return

*/BillOrder getBillOrderByBillOrderID(String billOrderID);

}

billOrderServiceImpl实现类,@Service注解是为了在controller中可以同过@Autowired的方式注入BillOrderService

@Servicepublic class BillOrderServiceImpl implementsBillOrderService{

@AutowiredprivateBillOrderMapper billOrderMapper;

@OverridepublicBillOrder getBillOrderByID(String billOrderID) {returnbillOrderMapper.getBillOrderByBillOrderID(billOrderID);

}

}

③dajia-dangfei-consumer中通过调用service中的方法实现查询

@RestController

@RequestMapping("/billOrder")public classBillOrderController {

@AutowiredprivateBillOrderService billOrderService;

@RequestMapping("/getBillOrderByID")publicBillOrder getBillOrderByID(){return billOrderService.getBillOrderByID("1");

}

}

运行ConsumerApplicationMain类中的main方法启动项目,会发现报错

Description:

Field billOrderMapper in com.dajia.income.service.impl.BillOrderServiceImpl required a bean of type 'com.dajia.income.dao.BillOrderMapper' that could not be found.

The injection point has the following annotations:

- @org.springframework.beans.factory.annotation.Autowired(required=true)

Action:

Consider defining a bean of type 'com.dajia.income.dao.BillOrderMapper' in your configuration.

原因:@Repository注解是Spring的,Spring在扫描注解时,取消了扫描抽象类和接口,所以无法找到你用@reponsitory注解的dao接口。两种方法解决:

一是用@Mapper注解替代@Repository注解,二是在启动项目时指定要扫描的包,我们这里使用第二种

@SpringBootApplication

@MapperScan("com.dajia.income.dao")public classConsumerApplicationMain {public static voidmain(String[] args) {

SpringApplication.run(ConsumerApplicationMain.class,args);

}

}

重新启动,访问http://localhost:8080/billOrder/getBillOrderByID得到如下效果

至此,一个简单的SpringBoot+Mybatis多模块项目已经搭建完毕,我们也通过启动项目调用接口验证其正确性。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。