目录
一、创建Maven父子项目
父项目导入依赖
1.SpringBoot依赖
<parent>
<groupId> org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
<relativePath />
</parent>2.管理SpringCloud、SpringCloud-alibaba依赖
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>3.导入一些公共的依赖
<dependencies>
<!--lombok依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--fastjson依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.76</version>
</dependency>
<!--springboot测试依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>二、搭建Gateway网关服务
1.导入依赖
1.1 Nacos客户端依赖、配置依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>1.2 GateWay依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>2.编写启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient // 开启Nacos客户端
public class UserApp {
public static void main(String[] args) {
SpringApplication.run(UserApp.class, args);
}
}3.编写配置文件
3.1 本地配置bootstrap.yml
server:
port: 10010 # 1.端口号
spring:
application:
name: service-gateway #2.服务名称
# 3.连接云端配置
cloud:
nacos:
config:
server-addr: localhost:8848 #3.1连接nacos的地址
namespace: "命名空间" #3.2命名空间
prefix: application-gateway
file-extension: yaml #3.4服务后缀
profiles:
active: dev #3.3服务环境3.2 云端配置 application-gateway-dev.yaml
(注册到Nacos、路由配置、跨域配置、允许Bean覆盖)
spring:
cloud:
nacos:
server-addr: localhost:8848 #1.注册到Nacos
#2.gateway路由
gateway:
httpclient:
connect-timeout: 2000
response-timeout: 6s # 超时时间
discovery:
locator:
enabled: false #开放服务名访问方式
lower-case-service-id: true #服务名小写
routes: #路由配置
- id : application-user #指定服务名
uri: lb://service-user #去注册中心找这个服务名
predicates: #断言,匹配访问的路径
- Path=/amcc/user/** #服务访问路径
filters:
- StripPrefix=2
- id: application-xxx #指定服务名
uri: lb://service-xxx #去注册中心找这个服务名
predicates: #断言,匹配访问的路径
- Path=/amcc/xxx/** #服务访问路径
filters:
- StripPrefix=2
#3.跨域配置
globalcors: #跨域配置
cors-configurations:
'[/**]':
allowedOrigins: "*"
allow-credentials: true
allowed-headers: "*"
allowedMethods:
- GET
- POST
- DELETE
- PUT
- PATCH
- OPTIONS
- HEAD
- CONNECT
- TRACE
#4.允许Bean覆盖
main:
allow-bean-definition-overriding: true三、按照项目架构搭建其他服务
1.创建Module,根据架构选择parent,创建服务
2.以Nacos作为注册与配置中心,导入依赖
2.1 Nacos客户端依赖、配置依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>2.2 SpringBootWeb依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>3.编写启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient // 开启Nacos客户端
public class UserApp {
public static void main(String[] args) {
SpringApplication.run(UserApp.class, args);
}
}4.编写配置文件
4.1 本地配置bootstrap.yml
server:
port: 10030 # 1.端口号
spring:
application:
name: service-user #2.服务名称
# 3.连接云端配置
cloud:
nacos:
config:
server-addr: localhost:8848 #3.1连接nacos的地址
namespace: "命名空间" #3.2命名空间
prefix: application-user
file-extension: yaml #3.4服务后缀
profiles:
active: dev #3.3服务环境4.2 云端配置application-user-dev.yaml
spring:
cloud:
nacos:
server-addr: localhost:8848 #1.注册到Nacos
#2.允许Bean覆盖 防止多个微服务用相同名称的Bean而报错
main:
allow-bean-definition-overriding: true四、集成MyBatisPlus
1.什么是MyBatisPlus?
是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生;主要的功能有代码生成器、不需要手动写简单的SQL直接调用数据库。
2.导入依赖
2.1 mybatis-plus依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>2.2 连接mysql依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>2.3 druid连接池依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.9</version>
</dependency>3.编写Mybatis-plus配置类
import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration
// mapper接口扫描
@MapperScan("cn.yws.amcc.mapper")
// 开启事务管理,让我们在service中可以使用事务注解,springboot项目默认开启
@EnableTransactionManagement
public class MybatisPlusConfig {
/**
* 分页插件配置对象,Mybatis-plus需要此配置对象
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}4.云端配置application-user-dev.yaml
spring:
cloud:
nacos:
server-addr: localhost:8848 #1.注册到Nacos
# 3.连接数据库四大金刚,以及德鲁伊连接池配置
datasource:
url: jdbc:mysql:///"数据库名称"?serverTimezone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver #mybatis80加cj
username: "用户名"
password: "密码"
type: com.alibaba.druid.pool.DruidDataSource
#2.允许Bean覆盖
main:
allow-bean-definition-overriding: true
# 4.开启扫描
mybatis-plus:
mapper-locations: classpath:cn/yws/amcc/mapper/*Mapper.xml
# type-aliases-package: cn.yws.amcc.domain
五、代码生成器
1.导入依赖
<dependencies>
<!--mybatisplus依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<!--模板引擎-->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.0</version>
</dependency>
<!--数据库连接依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>2.创建配置resource/mybatiesplus-config-system.properties
#代码输出基本路径,三层架构的代码
OutputDir=D:/software/idea-workspace/yws-amcc/amcc-service/amcc-service-common/src/main/java
#mapper.xml SQL映射文件目录
OutputDirXml=D:/software/idea-workspace/yws-amcc/amcc-service/amcc-service-common/src/main/resources
#domain的输出路径,我们放在公共模块下
OutputDirBase=D:/software/idea-workspace/yws-amcc/amcc-pojo/amcc-pojo-common/src/main/java
#设置作者
author=director
#自定义包路径:基础包的路径
parent=cn.yws.amcc
#数据库连接信息,80加一级cj
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql:///"数据库名称"?serverTimezone=UTC
jdbc.user="用户名"
jdbc.pwd="密码"3.创建代码生成类
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.DbType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import java.util.*;
/**
* 生成代码的主类
*/
public class GenteratorCode {
public static void main(String[] args) throws InterruptedException {
//用来获取Mybatis-Plus.properties文件的配置信息
ResourceBundle rb = ResourceBundle.getBundle("mybatiesplus-config-system"); //不要加后缀
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
gc.setOutputDir(rb.getString("OutputDir"));
gc.setFileOverride(false);
gc.setActiveRecord(true);// 开启 activeRecord 模式
gc.setEnableCache(false);// XML 二级缓存
gc.setBaseResultMap(true);// XML ResultMap
gc.setBaseColumnList(false);// XML columList
gc.setAuthor(rb.getString("author"));
mpg.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setDbType(DbType.MYSQL);
dsc.setTypeConvert(new MySqlTypeConvert());
dsc.setDriverName(rb.getString("jdbc.driver"));
dsc.setUsername(rb.getString("jdbc.user"));
dsc.setPassword(rb.getString("jdbc.pwd"));
dsc.setUrl(rb.getString("jdbc.url"));
mpg.setDataSource(dsc);
// 表策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setTablePrefix(new String[] { "t_" });// 此处可以修改为您的表前缀
strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
strategy.setInclude(new String[]{
"t_config",
"t_department",
"t_employee",
"t_operation_log",
"t_systemdictionary",
"t_systemdictionaryitem"
}); // 需要生成的表
mpg.setStrategy(strategy);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent(rb.getString("parent")); //cn.itsource.ymcc
pc.setController("web.controller"); //cn.itsource.ymcc.web.controller
pc.setService("service");
pc.setServiceImpl("service.impl");
pc.setEntity("domain");
pc.setMapper("mapper");
mpg.setPackageInfo(pc);
// 注入自定义配置,可以在 VM 中使用 cfg.abc 【可无】
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-rb");
this.setMap(map);
}
};
List<FileOutConfig> focList = new ArrayList<FileOutConfig>();
//controller的输出配置
focList.add(new FileOutConfig("/templates/controller.java.vm") {
@Override
public String outputFile(TableInfo tableInfo) {
//合并好的内容输出到哪儿?
return rb.getString("OutputDir")+ "/cn/itsource/ymcc/web/controller/" + tableInfo.getEntityName() + "Controller.java";
}
});
//query的输出配置
focList.add(new FileOutConfig("/templates/query.java.vm") {
@Override
public String outputFile(TableInfo tableInfo) {
return rb.getString("OutputDirBase")+ "/cn/itsource/ymcc/query/" + tableInfo.getEntityName() + "Query.java";
}
});
// 调整 domain 生成目录演示
focList.add(new FileOutConfig("/templates/entity.java.vm") {
@Override
public String outputFile(TableInfo tableInfo) {
return rb.getString("OutputDirBase")+ "/cn/itsource/ymcc/domain/" + tableInfo.getEntityName() + ".java";
}
});
// 调整 xml 生成目录演示
focList.add(new FileOutConfig("/templates/mapper.xml.vm") {
@Override
public String outputFile(TableInfo tableInfo) {
return rb.getString("OutputDirXml")+ "/cn/itsource/ymcc/mapper/" + tableInfo.getEntityName() + "Mapper.xml";
}
});
cfg.setFileOutConfigList(focList);
mpg.setCfg(cfg);
// 自定义模板配置,可以 copy 源码 mybatis-plus/src/main/resources/templates 下面内容修改,
// 放置自己项目的 src/main/resources/templates 目录下, 默认名称一下可以不配置,也可以自定义模板名称
TemplateConfig tc = new TemplateConfig();
tc.setService("/templates/service.java.vm");
tc.setServiceImpl("/templates/serviceImpl.java.vm");
tc.setMapper("/templates/mapper.java.vm");
tc.setEntity(null);
tc.setController(null);
tc.setXml(null);
// 如上任何一个模块如果设置 空 OR Null 将不生成该模块。
mpg.setTemplate(tc);
// 执行生成
mpg.execute();
}
}版权声明:本文为m0_56950429原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。