SpringCloudAlibaba从入门到进阶--项目搭建

我们将要干什么

通过搭建一个微信小程序来看了解SpringCloudAlibaba原理与使用
这个微信小程序是一个分享内容和笔记的平台,可以扫描二维码进行功能演示
微信小程序
我们的小程序服务拆分如下,整个小程序的后台先拆分出用户中心和内容中心两个模块
服务拆分
项目整体架构图如下
项目架构图

1.注册微信小程序

注册个人的微信小程序(这里不详细说明,不清楚的自行百度)
下面是我的微信小程序
我的微信小程序
下载微信小程序开发者工具,推荐下载稳定版
下载微信小程序开发者工具
前端代码:https://github.com/eacdy/itmuch-miniapp
做相应的配置启动前端项目

启动前端项目

2.数据建模

数据库建模的工具有很多,我这里使用PowerDesginer
数据报表模型
由创建的表模型生成相应的sql语句

-- 建库语句
create database user_center;
create database content_center;

-- 建表语句
use user_center;
create table if not exists user
(
    id                   int not null,
    wx_id                varchar(64),
    wx_nickname          varchar(64),
    roles                varchar(100),
    avatar_url           varchar(255),
    create_time          datetime,
    update_time          datetime,
    bonus                int,
    primary key (id)
    ) comment = '用户表';

create table if not exists bonus_eventa_log
(
    id                   int not null,
    user_id              int,
    vaule                int,
    event                varchar(20),
    create_time          datetime,
    description          varchar(100),
    primary key (id)
    ) comment = '积分明细变更表';


use content_center;
create table if not exists mid_user_share
(
    id                   int not null,
    share_id             int,
    user_id              int,
    primary key (id)
    ) comment = '中间表';

create table if not exists notice
(
    id                   int not null,
    content              varchar(255),
    show_flag            tinyint(1),
    create_time          datetime,
    primary key (id)
    ) comment = '公告表';

create table if not exists share
(
    id                   int not null,
    user_id              int,
    title                varchar(80),
    create_time          datetime,
    update_time          datetime,
    is_original          tinyint(1),
    author               varchar(45),
    cover                varchar(256),
    summary              varchar(256),
    price                int,
    download_url         varchar(256),
    buy_count            int,
    show_flag            tinyint(1),
    audit_status         varchar(10),
    reason               varchar(200),
    primary key (id)
    ) comment = '分享表';

3.生成数据表

首先在本地搭建MySQL数据库环境
MySQL Community Server 8.0.30下载地址:https://dev.mysql.com/downloads/mysql/
MySQL Community Server 8.0.30下载
配置本地MySQL环境,启动MySQL
配置本地MySQL环境
在idea(当然也可以用其他数据库编辑工具,比如navicat)执行通过数据建模得到的SQL语句完成建表
完成建表

4.搭建项目

我是用的是idea当然用eclipse也是可以的,用idea的springInitializer创建springboot工程,我们已用户中心模块搭建为例,填写项目的相关信息
创建项目
引入相关依赖,这里引入了必要的spring web、mybatis framework、mysql driver
引入相关依赖
工程创建完成

工程创建完成

5.Spring Boot 集成通用mapper

通用mapper的官方网站:https://github.com/abel533/Mapper
Spring Boot 在微服务领域中已经成为主流。

这里介绍通用 Mapper 如何同 Spring Boot 进行集成。

为了能适应各种情况的用法,这里也提供了多种集成方式,基本上分为两大类。

基于 starter 的自动配置
基于 @MapperScan 注解的手工配置

5.1 mapper-spring-boot-starter

在 starter 的逻辑中,如果你没有使用 @MapperScan 注解,你就需要在你的接口上增加 @Mapper 注解,否则 MyBatis 无法判断扫描哪些接口。

这里的第一种用法没有用 @MapperScan 注解,所以你需要在所有接口上增加 @Mapper 注解。

以后会考虑增加其他方式。

你只需要添加通用 Mapper 提供的 starter 就完成了最基本的集成,依赖如下:

<dependency>
  <groupId>tk.mybatis</groupId>
  <artifactId>mapper-spring-boot-starter</artifactId>
  <version>版本号</version>
</dependency>
Maven central

最新版本号如上所示,你也可以从下面地址查看:

http://mvnrepository.com/artifact/tk.mybatis/mapper-spring-boot-starter

注意:引入该 starter 时,和 MyBatis 官方的 starter 没有冲突,但是官方的自动配置不会生效!

如果你需要对通用 Mapper 进行配置,你可以在 Spring Boot 的配置文件中配置 mapper. 前缀的配置。

例如在 yml 格式中配置:

mapper:
  mappers:
    - tk.mybatis.mapper.common.Mapper
    - tk.mybatis.mapper.common.Mapper2
  notEmpty: true

在 properties 配置中:

mapper.mappers=tk.mybatis.mapper.common.Mapper,tk.mybatis.mapper.common.Mapper2
mapper.notEmpty=true

由于 Spring Boot 支持 Relax 方式的参数,因此你在配置 notEmpty 时更多的是用 not-empty,也只有在 Spring Boot 中使用的时候参数名不必和配置中的完全一致。

如果你对 Spring Boot 的 Environment 了解,你可以用 Spring Boot 支持的所有方式进行配置。

关于通用 Mapper 支持的所有配置请看后续的文档。

5.2 @MapperScan 注解配置

你可以给带有 @Configuration 的类配置该注解,或者直接配置到 Spring Boot 的启动类上,如下:

@tk.mybatis.spring.annotation.MapperScan(basePackages = "扫描包")
@SpringBootApplication
public class SampleMapperApplication implements CommandLineRunner {

我的工程里做如下配置

//@MapperScan的作用是通用mapper需要扫描那些包
@MapperScan("com.itmuch")
@SpringBootApplication
public class UserCenterApplication {

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

}
注意:这里使用的 tk.mybatis.spring.annotation.MapperScan !

你可以直接在 Spring Boot 的配置文件中直接配置通用 Mapper(参考5.1中的配置),还可以使用注解中提供的两个属性进行配置:

/**
 * 通用 Mapper 的配置,一行一个配置
 *
 * @return
 */
String[] properties() default {};

/**
 * 还可以直接配置一个 MapperHelper bean
 *
 * @return
 */
String mapperHelperRef() default "";

6.数据源配置

在配置文件properties.yml 根据自己的数据源做数据源的配置


```bash
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/user_center
    hikari:
      username:  root
      password: root
      driver-class-name: com.mysql.cj.jdbc.Driver

启动项目,看到如下日志说明通用mapper配置成功

2022-09-15 18:41:54.736  INFO 20876 --- [           main] t.m.m.autoconfigure.MapperCacheDisabler  : Clear tk.mybatis.mapper.util.MsUtil CLASS_CACHE cache.
2022-09-15 18:41:54.737  INFO 20876 --- [           main] t.m.m.autoconfigure.MapperCacheDisabler  : Clear tk.mybatis.mapper.genid.GenIdUtil CACHE cache.
2022-09-15 18:41:54.738  INFO 20876 --- [           main] t.m.m.autoconfigure.MapperCacheDisabler  : Clear tk.mybatis.mapper.version.VersionUtil CACHE cache.

7.配置通用mapper代码生成器

通用mapper有专用代码生成器和通用代码生成器,我这里使用的是专用代码生成器

7.1引入插件

Maven 中的插件配置如下:

<plugins>
  <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
      <source>${jdk.version}</source>
      <target>${jdk.version}</target>
    </configuration>
  </plugin>
  <plugin>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-maven-plugin</artifactId>
    <version>1.3.6</version>
    <configuration>
      <configurationFile>
        ${basedir}/src/main/resources/generator/generatorConfig.xml
      </configurationFile>
      <overwrite>true</overwrite>
      <verbose>true</verbose>
    </configuration>
    <dependencies>
      <dependency>
        <groupId>mysql</groupId>   
        <artifactId>mysql-connector-java</artifactId>
        <!--版本与本地的MySQL版本保持一致-->
        <version>8.0.30</version>
      </dependency>
      <dependency>
        <groupId>tk.mybatis</groupId>
        <artifactId>mapper</artifactId>
        <!--与上面tk.mybatis的版本保持一致-->
        <version>4.2.1</version>
      </dependency>
    </dependencies>
  </plugin>
</plugins>

在插件中配置了配置文件的路径,覆盖和输出详细日志三个参数。

除此之外需要特别注意的是 ,MBG 配置中用到的所有外部代码都必须通过依赖方式配置在这里,否则运行时会提示找不到对应的类而报错。这里有两个必须的依赖,一个是 JDBC 驱动,另一个是 Mapper 的插件。

需要注意的是,maven-compiler-plugin插件springboot已经存在了,可以不用加,mysql-connector-java的版本与自己使用的MySQL一致

7.2 配置文件generatorConfig.xml

除引入插件之外需要特别注意的是 插件 配置中用到的所有外部代码都必须通过依赖方式配置在这里,否则运行时会提示找不到对应的类而报错。这里有两个必须的依赖,一个是 JDBC 驱动,另一个是 Mapper 的插件。

下面看配置文件generatorConfig.xml:

<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>
    <properties resource="config.properties"/>

    <context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>

        <plugin type="tk.mybatis.mapper.generator.MapperPlugin">
            <property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
            <property name="caseSensitive" value="true"/>
        </plugin>

        <jdbcConnection driverClass="${jdbc.driverClass}"
                        connectionURL="${jdbc.url}"
                        userId="${jdbc.user}"
                        password="${jdbc.password}">
        </jdbcConnection>

        <javaModelGenerator targetPackage="你的模块路径" 
                            targetProject="src/main/java"/>

        <sqlMapGenerator targetPackage="你的模块路径" 
                         targetProject="src/main/resources"/>

        <javaClientGenerator targetPackage="你的模块路径" 
                             targetProject="src/main/java"
                             type="XMLMAPPER"/>

        <table tableName="表名">
            <generatedKey column="id" sqlStatement="JDBC"/>
        </table>
    </context>
</generatorConfiguration>

这里和之前相差不多,只是通过 引入了外部属性文件,在 配置时,使用的属性文件中的参数。

7.3 配置文件config.properties

配置文件generatorConfig.xml中有占位符,我们需要从外部的配置文件引入

jdbc.driverClass=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/user_center
jdbc.user=root
jdbc.password=root
# 模块名称
mouldName=user
# 表名
tableName=user

运行
在 pom.xml 这一级目录的命令行窗口执行 mvn mybatis-generator:generate即可(前提是配置了mvn),运行结果看到自动生成代码的目录结构

生成代码的目录结构

8.整合Lombok

什么是Lombok,可以参考Lombok的官网:https://projectlombok.org/

8.1 IntelliJ 如何整合Lombok

IntelliJ 整合Lombok参考:https://www.baeldung.com/lombok-ide
我这个工程是maven工程,所以还需要在maven中整合Lombok,整合过程参考:https://projectlombok.org/setup/maven
只需要在pom文件中添加依赖即可

	<dependency>
		<groupId>org.projectlombok</groupId>
		<artifactId>lombok</artifactId>
		<version>1.18.24</version>
		<scope>provided</scope>
	</dependency>

8.2 代码生成器整合Lombok

自动生成代码的时候如何整合Lombok
lombok 增加 model 代码生成时,可以直接生成 lombok 的 @Getter@Setter@ToString@Accessors(chain = true) 四类注解, 使用时在插件配置项中增加

<property name="lombok" value="Getter,Setter,ToString,Accessors"/> 

即可生成对应包含注解的 model 类。

9.项目测试

整合好通用mapper,以及Lombok后,我们写一个测试Controller,这个端点完成了user的插入与全查询

package com.itmuch.usercenter;

import com.itmuch.usercenter.dao.user.UserMapper;
import com.itmuch.usercenter.domain.entity.user.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Random;
import java.util.UUID;

@Slf4j
@RestController
public class TestController {
    @Resource
    UserMapper userMapper;
    @GetMapping("/test")
    public List<User> testInsert(){
        User user = User.builder()
                .wxId(UUID.randomUUID().toString())
                .wxNickname("test" + UUID.randomUUID().toString())
                .createTime(new Date())
                .avatarUrl("XXX")
                .build();
        log.info(user.toString());
       userMapper.insertSelective(user);
       return userMapper.selectAll();
    }
}

启动项目,能正常向数据库插入数据,也能向页面返回数据库查询的所有数据
数据库

页面

到此用户中心服务模块,工程搭建完成,内容中心模块的工程搭建和用户中心一致!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值