moduleimpl.java 772_spring boot:多模块项目生成jar包(spring boot 2.3.3)

一,多模块项目的优点:

1,为什么要使用多模块项目?

相比传统的单体工程,使用Maven的多模块配置,

有如下优点:

帮助项目划分模块,鼓励重用,

防止POM变得过于庞大,

方便某个模块的构建,而不用每次都构建整个项目,

对某个模块的特殊控制更为方便

2,创建项目的流程:

先创建一个空项目multimodjar,删除无关文件,只留一个pom.xml和一个multimodjar.iml

然后在这个项目下创建module

3,pom.xml/multimodjar.iml 两个文件的用途说明:

pom.xml:  项目对象模型(Project Object Model)的简称,它是Maven项目中的文件。

作用:管理源代码/配置文件/开发者的信息和角色/问题追踪系统/组织信息/项目授权/项目的url/项目的依赖关系等

multimodjar.iml,iml文件,infomation  of  module,

作用:保存了项目的配置信息,intellij idea需要从它获取项目信息

说明:作者:刘宏缔 邮箱: 371125307@qq.com

二,  演示项目的相关信息

1,项目地址:

https://github.com/liuhongdi/multimodjar

2,项目功能说明:

演示了多模块项目如何配置pom.xml打包

项目包含了4个模块:mmweb(可执行的入口)

mmservice

mmpojo

mmrepo(数据库)

3,项目结构:如图:

0db891265e6c74d0daf67ea54b555440.png

f5f1c9eb97fbc14f5b9795815882881c.png

ea85d6dcd76b693750566e455dc793a3.png

三,配置文件说明

1,根项目pom.xml

4.0.0

org.springframework.boot

spring-boot-starter-parent

2.3.3.RELEASE

com.multimodjar

demo

0.0.1-SNAPSHOT

demo

Demo project for Spring Boot

11

pom

mmweb

mmpojo

mmrepo

mmservice

可以看到,在根项目中,只需要添加对各个模块的依赖

2,mmweb模块的pom.xml

4.0.0

org.springframework.boot

spring-boot-starter-parent

2.3.3.RELEASE

com.mmweb

demo

0.0.1-SNAPSHOT

demo

Demo project for Spring Boot

11

org.springframework.boot

spring-boot-starter-web

com.mmservice

demo

0.0.1-SNAPSHOT

compile

com.mmpojo

demo

0.0.1-SNAPSHOT

compile

org.springframework.boot

spring-boot-starter-thymeleaf

org.springframework.boot

spring-boot-starter-test

test

org.junit.vintage

junit-vintage-engine

org.springframework.boot

spring-boot-maven-plugin

com.mmweb.demo.DemoApplication

ZIP

repackage

因为mmweb是可执行的类所在模块,所以需要专门指定执行mainClass入口类

3,mmweb的application.properties

#errorserver.error.include-stacktrace=always

#errorlog

logging.level.org.springframework.web=trace

#mysql

spring.datasource.url=jdbc:mysql://localhost:3306/store?characterEncoding=utf8&useSSL=false

spring.datasource.username=root

spring.datasource.password=lhddemo

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

#mybatis

mybatis.mapper-locations=classpath:/mapper/*Mapper.xml

mybatis.type-aliases-package=com.example.demo.mapper

mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

#thymeleaf

spring.thymeleaf.cache=false

spring.thymeleaf.encoding=UTF-8

spring.thymeleaf.mode=HTML

spring.thymeleaf.prefix=classpath:/templates/

spring.thymeleaf.suffix=.html

4,mmservice的pom.xml

4.0.0

org.springframework.boot

spring-boot-starter-parent

2.3.3.RELEASE

com.mmservice

demo

0.0.1-SNAPSHOT

demo

Demo project for Spring Boot

11

com.mmpojo

demo

0.0.1-SNAPSHOT

compile

com.mmrepo

demo

0.0.1-SNAPSHOT

compile

com.github.pagehelper

pagehelper-spring-boot-starter

1.2.12

5,mmrepo的pom.xml

4.0.0

org.springframework.boot

spring-boot-starter-parent

2.3.3.RELEASE

com.mmrepo

demo

0.0.1-SNAPSHOT

demo

Demo project for Spring Boot

11

com.mmpojo

demo

0.0.1-SNAPSHOT

org.mybatis.spring.boot

mybatis-spring-boot-starter

2.1.3

mysql

mysql-connector-java

runtime

6,mmpojo的pom.xml

4.0.0

org.springframework.boot

spring-boot-starter-parent

2.3.3.RELEASE

com.mmpojo

demo

0.0.1-SNAPSHOT

demo

Demo project for Spring Boot

11

7,用到的数据表的结构:

CREATE TABLE`goods` (

`goodsId`int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',

`goodsName`varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT 'name',

`subject`varchar(200) NOT NULL DEFAULT '' COMMENT '标题',

`price`decimal(15,2) NOT NULL DEFAULT '0.00' COMMENT '价格',

`stock`int(11) NOT NULL DEFAULT '0' COMMENT 'stock',PRIMARY KEY(`goodsId`)

) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='商品表'

四,java代码说明

1,DemoApplication.java

@SpringBootApplication(scanBasePackages = {"com.mmservice.demo","com.mmpojo.demo","com.mmweb.demo"})

@MapperScan("com.mmrepo.demo")public classDemoApplication {public static voidmain(String[] args) {

SpringApplication.run(DemoApplication.class, args);

}

}

说明:因为引入了多模块,需要添加上扫描包的路径

2,HomeController.java

importcom.mmpojo.demo.pojo.Goods;importcom.mmservice.demo.service.GoodsService;importorg.springframework.stereotype.Controller;importorg.springframework.ui.Model;import org.springframework.web.bind.annotation.*;importjavax.annotation.Resource;importjava.util.List;importjava.util.Map;

@Controller

@RequestMapping("/home")public classHomeController {

@ResourceprivateGoodsService goodsService;//list all goods

@GetMapping("/list")

@ResponseBodypublic Listall() {

System.out.println("-------------------------list");

List list =goodsService.getAllGoods();returnlist;

}//带模板显示商品列表 参数:第几页

@GetMapping("/goodslist")publicString goodsList(Model model,

@RequestParam(value="p",required = false,defaultValue = "1") intcurrentPage) {

Map res =goodsService.getAllGoodsByPage(currentPage);

model.addAttribute("pageInfo", res.get("pageInfo"));

model.addAttribute("goodslist", res.get("goodslist"));return "goods/goodslist";

}

}

注意import的goods/GoodsService类的路径

3,GoodsServiceImpl.java

@Servicepublic class GoodsServiceImpl implementsGoodsService {

@ResourceprivateGoodsMapper goodsMapper;//返回全部商品

@Overridepublic ListgetAllGoods() {

List goodsList =goodsMapper.selectAllGoods();returngoodsList;

}//带分页返回商品

@Overridepublic Map getAllGoodsByPage(intcurrentPage) {

Map res = new HashMap();

PageHelper.startPage(currentPage,5);

List goodsList =goodsMapper.selectAllGoods();

res.put("goodslist",goodsList);

PageInfo pageInfo = new PageInfo<>(goodsList);

res.put("pageInfo",pageInfo);returnres;

}

}

4,GoodsMapper.java

@Repository

@Mapperpublic interfaceGoodsMapper {

ListselectAllGoods();

}

5,GoodsMapper.xml

/p>

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

select * from goods order by goodsId desc

6,Goods.java

public classGoods {//商品id

Long goodsId;publicLong getGoodsId() {return this.goodsId;

}public voidsetGoodsId(Long goodsId) {this.goodsId =goodsId;

}//商品名称

privateString goodsName;publicString getGoodsName() {return this.goodsName;

}public voidsetGoodsName(String goodsName) {this.goodsName =goodsName;

}//商品标题

privateString subject;publicString getSubject() {return this.subject;

}public voidsetSubject(String subject) {this.subject =subject;

}//商品价格

privateBigDecimal price;publicBigDecimal getPrice() {return this.price;

}public voidsetPrice(BigDecimal price) {this.price =price;

}//库存

intstock;public intgetStock() {return this.stock;

}public void setStock(intstock) {this.stock =stock;

}publicString toString(){return " Goods:goodsId=" + goodsId +" goodsName=" + goodsName+" subject=" + subject+" price=" + price+" stock=" +stock;

}

}

7,goodslist.html

商品列表
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值