1.构建mall多模块工程
项目主体如下:
zzmall
├─cloud-iaas -- 基础设施服务管理模块
│ ├─gateway-server -- 网关服务工程
│ ├─auth-server -- 认证授权服务工程
│ └─im-server -- IM即时通讯服务工程
├─zzmall-common -- 公共服务模块
│ ├─zzmall-common-base -- 公共基础服务模块
│ └─zzmall-common-business -- 公共业务模块
├─zzmall-business -- 业务模块
│ ├─zzmall-business-cart -- 购物车模块
│ ├─zzmall-business-manager -- 管理后台模块
│ ├─zzmall-business-member -- 会员模块
│ ├─zzmall-business-order -- 订单模块
│ ├─zzmall-business-inventory -- 商品库存模块
│ ├─zzmall-business-product -- 商品模块
│ ├─zzmall-business-search -- 搜索模块
│ └─zzmall-business-store -- 门店业务模块
├─zzmall-zcodegen -- 代码生成器
└─zzmall-zdemo -- demo
1.1 zzmall工程的 pom依赖
<?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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.3</version>
<relativePath/>
</parent>
<groupId>com.zzmall</groupId>
<artifactId>zzmall</artifactId>
<packaging>pom</packaging>
<version>1.0.0-SNAPSHOT</version>
<modules>
<module>cloud-iaas</module>
<module>zzmall-common</module>
<module>zzmall-business</module>
<module>zzmall-zcodegen</module>
</modules>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring-cloud.version>2021.0.1</spring-cloud.version>
<spring-cloud-alibaba.version>2021.0.1.0</spring-cloud-alibaba.version>
<mybatis-plus.version>3.5.3.2</mybatis-plus.version>
<mysql.version>8.0.32</mysql.version>
<druid.version>1.2.18</druid.version>
<hutool-all.version>5.8.2</hutool-all.version>
<springfox.version>3.0.0</springfox.version>
<common-base.version>1.0-SNAPSHOT</common-base.version>
<common-core.version>1.0-SNAPSHOT</common-core.version>
<fastjson.version>1.2.80</fastjson.version>
<aliyun-sdk-oss.version>3.15.1</aliyun-sdk-oss.version>
<easyexcel.version>3.3.2</easyexcel.version>
<aliyun-dx.version>2.0.24</aliyun-dx.version>
</properties>
<dependencies>
<!--专门读取bootstrap.yml/properties配置文件依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<!--spring-cloud依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring cloud alibaba依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 公共基础模块依赖 -->
<dependency>
<groupId>com.zzmall</groupId>
<artifactId>zzmall-common-base</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.zzmall</groupId>
<artifactId>zzmall-common-business</artifactId>
<version>${project.version}</version>
</dependency>
<!--mybatis plus依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<!--mybatis plus常用注解依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-annotation</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<!--mysql8驱动-->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>${mysql.version}</version>
</dependency>
<!--druid数据源连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<!--第三方工具类库hutool-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool-all.version}</version>
</dependency>
<!--swagger依赖-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>${springfox.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<!--阿里云对象存储服务依赖-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>${aliyun-sdk-oss.version}</version>
</dependency>
<!--easyexcel依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>${easyexcel.version}</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dysmsapi20170525</artifactId>
<version>${aliyun-dx.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
1.2 子模块 pom依赖
<?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>zzmall-business</artifactId>
<groupId>com.zzmall</groupId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>zzmall-business-member</artifactId>
<dependencies>
<!--公共核心业务模块依赖-->
<dependency>
<groupId>com.zzmall</groupId>
<artifactId>zzmall-common-business</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
<!--druid数据源依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
</project>
2.构建代码生成器
1.pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.6.3</version>
</dependency>
<!-- 使用mybatis_plus的代码生成器-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.1</version>
</dependency>
<!-- velocity模板引擎-->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
<!-- 导入mybatis_plus依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.31</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.26</version>
</dependency>
</dependencies>
2.代码生成器类
package code.generator;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
public class CodeGenerator {
public static void main(String[] args) {
//1.获取代码生成器的对象
AutoGenerator autoGenerator = new AutoGenerator();
//设置数据库相关配置
DataSourceConfig dataSource = new DataSourceConfig();
dataSource.setDriverName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/mall_member?serverTimezone=UTC");
dataSource.setUsername("root");
dataSource.setPassword("123456");
autoGenerator.setDataSource(dataSource);
//设置全局配置
GlobalConfig globalConfig = new GlobalConfig();
//设置代码生成位置
String projectPath = System.getProperty("user.dir");
projectPath = projectPath + "/zzmall-zcodegen";
globalConfig.setOutputDir(projectPath + "/src/main/java");
//设置生成完毕后是否打开生成代码所在的目录
globalConfig.setOpen(false);
//重新生成时文件是否覆盖 一般不覆盖我们的代码
globalConfig.setFileOverride(false);
//设置作者
globalConfig.setAuthor("zhouzz");
//设置是否覆盖原始生成的文件
globalConfig.setFileOverride(true);
//设置Service接口名,%s为占位符,指代模块名称
globalConfig.setServiceName("%sService");
//设置数据层接口名,%s为占位符,指代模块名称
globalConfig.setMapperName("%sMapper");
//开启Swagger2模式
//globalConfig.setSwagger2(true);
//设置Id生成策略
globalConfig.setIdType(IdType.ASSIGN_ID);
//DateType.ONLY_DATE 表示使用 java.util.Date 类型作为日期类型,datetime->java.util.Date
globalConfig.setDateType(DateType.ONLY_DATE);
autoGenerator.setGlobalConfig(globalConfig);
//设置包名相关配置
PackageConfig packageInfo = new PackageConfig();
//设置生成的包名,与代码所在位置不冲突,二者叠加组成完整路径
packageInfo.setParent("com.zzmall.member");
//设置实体类包名
packageInfo.setEntity("domain");
//设置数据层包名
packageInfo.setMapper("mapper");
autoGenerator.setPackageInfo(packageInfo);
//策略设置
StrategyConfig strategyConfig = new StrategyConfig();
//设置当前参与生成的表名,参数为可变参数
strategyConfig.setInclude("t_member", "t_member_addr");
//设置数据库表的前缀名称,模块名 = 数据库表名 - 前缀名 例如: User = tbl_user - tbl_
strategyConfig.setTablePrefix("t_");
//数据库表映射到实体的命名策略 不用改
strategyConfig.setNaming(NamingStrategy.underline_to_camel);
//设置是否启用Rest风格
strategyConfig.setRestControllerStyle(true);
//设置乐观锁字段名
//strategyConfig.setVersionFieldName("version");
//设置逻辑删除字段名
strategyConfig.setLogicDeleteFieldName("deleted");
//设置是否启用lombok
strategyConfig.setEntityLombokModel(true);
//restful api风格控制器
strategyConfig.setRestControllerStyle(true);
//url中驼峰转连字符
strategyConfig.setControllerMappingHyphenStyle(true);
//2.执行生成操作
autoGenerator.setStrategy(strategyConfig);
autoGenerator.execute();
}
}
3.Springboot与Mybatis
3.1 生成代码移入
将代码生成器生成的源码移入到 member工程中。
3.2 编写 application.yml
server:
port: 7101
# Spring配置
spring:
datasource:
#1.JDBC
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mall_member?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8
username: root
password: 123456
druid:
#2.连接池配置
#初始化连接池的连接数量 大小,最小,最大
initial-size: 5
min-idle: 5
max-active: 20
#配置获取连接等待超时的时间
max-wait: 60000
#配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
time-between-eviction-runs-millis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
min-evictable-idle-time-millis: 30000
validation-query: SELECT 1 FROM DUAL
test-while-idle: true
test-on-borrow: true
test-on-return: false
# 是否缓存preparedStatement,也就是PSCache 官方建议MySQL下建议关闭 个人建议如果想用SQL防火墙 建议打开
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filter:
stat:
merge-sql: true
slow-sql-millis: 5000
mybatis-plus:
mapper-locations: classpath*:mapper/*.xml
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
type-aliases-package: com.zzmall.member.domain
3.3 新建启动类
package com.zzmall.member;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* 会员业务模块启动类
*/
@MapperScan("com.zzmall.member.mapper")
@SpringBootApplication
public class MemberServiceApplication {
public static void main(String[] args) {
SpringApplication.run(MemberServiceApplication.class, args);
}
}
3.4 新建接口
package com.zzmall.member.controller;
import com.zzmall.member.domain.Member;
import com.zzmall.member.service.MemberService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
@RequestMapping("/member")
public class MemberController {
@Autowired
private MemberService memberService;
@GetMapping("get")
public Object get(Long id) {
Member member = memberService.getById(id);
log.info("get info:{}", member);
return member;
}
}
3.5 测试
启动member服务类,访问对应的接口: http://localhost:7101/member/get?id=1
评论区