概述
SpringCloudAlibaba从入门到进阶--项目搭建
- 我们将要干什么
- 1.注册微信小程序
- 2.数据建模
- 3.生成数据表
- 4.搭建项目
- 5.Spring Boot 集成通用mapper
- 5.1 mapper-spring-boot-starter
- 5.2 @MapperScan 注解配置
- 6.数据源配置
- 7.配置通用mapper代码生成器
- 7.1引入插件
- 7.2 配置文件generatorConfig.xml
- 7.3 配置文件config.properties
- 8.整合Lombok
- 8.1 IntelliJ 如何整合Lombok
- 8.2 代码生成器整合Lombok
- 9.项目测试
我们将要干什么
通过搭建一个微信小程序来看了解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环境,启动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();
}
}
启动项目,能正常向数据库插入数据,也能向页面返回数据库查询的所有数据
到此用户中心服务模块,工程搭建完成,内容中心模块的工程搭建和用户中心一致!
最后
以上就是典雅柠檬为你收集整理的SpringCloudAlibaba从入门到进阶--项目搭建我们将要干什么的全部内容,希望文章能够帮你解决SpringCloudAlibaba从入门到进阶--项目搭建我们将要干什么所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复