spring-boot-plus在IDEA的快速导入和代码生成问题
IDEA快速导入spring-boot-plus
# 安装lombok插件
!!!请先确保IDEA已安装lombok插件!!!
# IDEA在线安装lombok插件

# IDEA离线下载安装lombok
如果在线安装不了,可使用离线安装,请下载对应IDEA版本的lombok插件压缩包
# 👉 lombok离线下载地址
# 选择已下载的lombok-plugin-0.25-EAP
安装完成之后重启IDEA 
# IDEA导入项目
# 源代码视图

项目模块说明
admin: SpringBootAdmin Server启动模块
bootstrap: 项目启动模块
config: 项目配置模块
distribution:项目打包模块,打包时,请先选中Maven Profiles中的release和对应环境
example: 业务自定义模块,自己的业务代码可在example下进行,也可以再创建模块
framework: 项目核心框架模块
generator: 代码生成模块,启动类:SpringBootPlusGenerator,请根据实际情况进行配置
scheduled: 任务调度模块
system: 系统管理模块
# 构建项目
# 查看maven面板,默认激活dev环境

# 下载maven依赖

mvn clean install
设置aliyun maven镜像,提升下载速度 settings.xml
# 修改配置文件
# application.yml 是项目主要配置文件,公共配置

配置文件说明
└── config
├── application-dev.yml 开发环境配置文件
├── application-prod.yml 生产环境配置文件
├── application-test.yml 测试环境配置文件
├── application-uat.yml 用户验收环境配置问津啊
├── application.yml 项目主要配置文件
├── banner.txt Banner
├── logback.xml 日志配置文件
└── mime-type.properties 文件上传类型拓展
数据库/Redis等信息在不同环境中,进行自定义配置
# 启动Spring Boot Admin Server
admin模块下启动SpringBootPlusAdminApplication

# 启动spring-boot-plus
bootstrap模块下启动SpringBootPlusApplication

- projectFinalName:项目名称
- projectVersion:项目版本
- profileActive:当前maven profile激活环境
- contextPath:项目访问根路径
- port:项目端口
- Admin:Spring Boot Admin监控界面
- Home:项目主界面,对应
spring-boot-plus/config/src/main/resources/static/index.html - Knife4j:Knife4j API文档界面
- Swagger:Swagger API文档界面
# 访问Spring Boot Admin
- spring-boot-plus主界面,Spring Boot Admin

# 访问Swagger API文档

# 访问Knife4j API文档


代码生成问题
# Windows系统生成代码报错
character to be escaped is missing
Exception in thread "main" java.lang.IllegalArgumentException: character to be escaped is missing
at java.util.regex.Matcher.appendReplacement(Matcher.java:809)
at java.util.regex.Matcher.replaceAll(Matcher.java:955)
at java.lang.String.replaceAll(String.java:2223)
at io.geekidea.springbootplus.generator.CodeGenerator.init(CodeGenerator.java:86)
at io.geekidea.springbootplus.generator.CodeGenerator.generator(CodeGenerator.java:111)
at io.geekidea.springbootplus.generator.CodeGenerator.generator(CodeGenerator.java:72)
at io.geekidea.springbootplus.generator.SpringBootPlusGenerator.main(SpringBootPlusGenerator.java:103)
修改CodeGenerator.java
generator/src/main/java/io/geekidea/springbootplus/generator/CodeGenerator.java
// 如果包路径为空,转换包名称路径
if (StringUtils.isNotBlank(parentPackage)) {
generatorProperties.setParentPackagePath(parentPackage.replaceAll("\\.", Matcher.quoteReplacement(File.separator)));
}
将File.separator修改为:Matcher.quoteReplacement(File.separator)
最新代码已修复此问题
# 有表前缀,如何去掉表前缀生成
# 例如:tb_customer
如果期望生成的文件名称如下
├─java
│ └─com
│ └─example
│ ─customer
│ ├─controller
│ │ CustomerController.java
│ ├─entity
│ │ Customer.java
│ ├─mapper
│ │ CustomerMapper.java
│ ├─param
│ │ CustomerPageParam.java
│ └─service
│ │ CustomerService.java
│ └─impl
│ CustomerServiceImpl.java
└─resources
└─mapper
└─customer
CustomerMapper.xml
则在代码生成器中设置表前缀
generator/src/main/java/io/geekidea/springbootplus/generator/SpringBootPlusGenerator.java
// 设置表信息
generatorProperties.addTable("tb_customer","id");
// 设置表前缀
generatorProperties.setTablePrefix(Arrays.asList("tb_"));
# 生成的Customer实体类主要信息
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("tb_customer")
@ApiModel(value = "Customer对象")
public class Customer extends BaseEntity {
private static final long serialVersionUID = 1L;
@NotNull(message = "不能为空")
@TableId(value = "id", type = IdType.AUTO)
private Long id;
// ...
}
# 同时生成多张表,并去掉表前缀
当表的主键名称都为
id时,可按照以下方式,同时生成多张表,并去掉表前缀
// 设置基本信息
generatorProperties
.setMavenModuleName("example")
.setParentPackage("com.example")
.setModuleName("shop")
.setAuthor("geekidea")
.setFileOverride(true);
// 设置表信息
generatorProperties.setTables("tb_account","shop_goods","shop_order");
// 设置表前缀
generatorProperties.setTablePrefix(Arrays.asList("tb_","shop_"));
├── java
│ └── com
│ └── example
│ └── shop
│ ├── controller
│ │ ├── AccountController.java
│ │ ├── GoodsController.java
│ │ └── OrderController.java
│ ├── entity
│ │ ├── Account.java
│ │ ├── Goods.java
│ │ └── Order.java
│ ├── mapper
│ │ ├── AccountMapper.java
│ │ ├── GoodsMapper.java
│ │ └── OrderMapper.java
│ ├── param
│ │ ├── AccountPageParam.java
│ │ ├── GoodsPageParam.java
│ │ └── OrderPageParam.java
│ └── service
│ ├── AccountService.java
│ ├── GoodsService.java
│ ├── OrderService.java
│ └── impl
│ ├── AccountServiceImpl.java
│ ├── GoodsServiceImpl.java
│ └── OrderServiceImpl.java
└── resources
└── mapper
└── shop
├── AccountMapper.xml
├── GoodsMapper.xml
└── OrderMapper.xml
# 主键列名称不是id怎么生成
// 设置表信息
generatorProperties
.addTable("tb_account")
.addTable("shop_goods","goods_id")
.addTable("shop_order","order_Id");
// 设置表前缀
generatorProperties.setTablePrefix(Arrays.asList("tb_","shop_"));
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("shop_goods")
@ApiModel(value = "Goods对象")
public class Goods extends BaseEntity {
private static final long serialVersionUID = 1L;
@NotNull(message = "goodsId不能为空", groups = {Update.class})
@ApiModelProperty("主键")
@TableId(value = "goods_id", type = IdType.AUTO)
private Long goodsId;
// ...
}
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("shop_order")
@ApiModel(value = "Order对象")
public class Order extends BaseEntity {
private static final long serialVersionUID = 1L;
@NotNull(message = "orderId不能为空", groups = {Update.class})
@ApiModelProperty("主键")
@TableId(value = "order_id", type = IdType.AUTO)
private Long orderId;
// ...
}
# 主键自增使用UUID/雪花算法
如果需要更改主键生成策略,需修改`application.yml`中的`id-type`为对应枚举值
对应枚举值:com.baomidou.mybatisplus.annotation.IdType.java
############################### mybatis-plus start #################################
mybatis-plus:
global-config:
db-config:
# 全局默认主键类型
id-type: auto
# 生成代码修改IdType与application.yml中的id-type值一致
- IdType
AUTO:自增ASSIGN_ID:雪花算法,全局唯一ASSIGN_UUID:UUID.replace("-",""),全局唯一- 更多方式请查看
com.baomidou.mybatisplus.annotation.IdType.java
// 全局配置
generatorProperties.getMybatisPlusGeneratorConfig().getGlobalConfig()
.setOpen(true)
.setSwagger2(true)
.setIdType(IdType.ASSIGN_ID)
.setDateType(DateType.ONLY_DATE);
# 生成的XML文件中没有SQL语句问题
当生成策略为`SINGLE`,生成单表操作代码,此时,XML为空配置
generator/src/main/java/io/geekidea/springbootplus/generator/config/GeneratorStrategy.java
/**
* 生成策略
* SIMPLE 生成最基本的代码
* SINGLE 生成单表操作代码
* ALL 生成所有的代码
*
* @author geekidea
* @date 2020/3/13
**/
public enum GeneratorStrategy {
SIMPLE, SINGLE, ALL
}
generator/src/main/java/io/geekidea/springbootplus/generator/SpringBootPlusGenerator.java
默认生成策略为GeneratorStrategy.SINGLE),生成单表操作
// 生成配置
generatorProperties.getGeneratorConfig()
.setGeneratorStrategy(GeneratorStrategy.SINGLE)
.setGeneratorEntity(true)
# 如果XML需要生成基本列和自定义分页查询,修改策略为ALL
// 生成配置
generatorProperties.getGeneratorConfig()
.setGeneratorStrategy(GeneratorStrategy.ALL)
.setGeneratorEntity(true)
# 生成的FooBarMapper.xml文件内容如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.foobar.mapper.FooBarMapper">
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id, name, foo, bar, remark, state, version, create_time, update_time
</sql>
<select id="getFooBarById" resultType="com.example.foobar.vo.FooBarQueryVo">
select
<include refid="Base_Column_List"/>
from foo_bar where id = #{id}
</select>
<select id="getFooBarPageList" parameterType="com.example.foobar.param.FooBarPageParam" resultType="com.example.foobar.vo.FooBarQueryVo">
select
<include refid="Base_Column_List"/>
from foo_bar
</select>
</mapper>
浙公网安备 33010602011771号