目 录CONTENT

文章目录

构建多模块的Mall项目

zhouzz
2024-08-31 / 0 评论 / 0 点赞 / 7 阅读 / 46229 字
温馨提示:
本文最后更新于 2024-08-31,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

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

4.小结

0

评论区