一:介绍
1 | springboot从2.7.5升级到3.1.0,jdk最低要求是17 |
二:升级jdk17和springboot3.1.0
2.1 springboot版本
1 | 调整前: |
2.2 jdk版本
1 | 调整前: |
2.3 mybatisplus版本
说明
1
2
3mybatisplus的版本需要升级到3.5.3.1要不然会报错,找不到mapper.xml对应的
方法,并且涉及到这块的升级,好多注解的方法也需要一并改掉。
比如:entity中的IdType.UUID要变成IdType.ASSIGN_UUID。修改前
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16<properties>
<!-- jdk版本 -->
<java.version>11</java.version>
<!-- mybatis版本号 -->
<mybatis.plus.version>3.1.0</mybatis.plus.version>
<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
<!-- ali fastjson -->
<fastjson.version>1.2.57</fastjson.version>
<maven.resources.overwrite>true</maven.resources.overwrite>
</properties>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>修改后
1 | <properties> |
genertor修改前
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118package com.tohours.actminisite.genertor;
import java.util.ArrayList;
import java.util.List;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.FileOutConfig;
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.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
public class AccessLogGenerator {
private final static String TABLE_NAME = "actminisite_access_log";// 表名
private final static String ENTITY_NAME = "AccessLog";// 实体类名称
private final static String DATABASE_NAME = "actminisite";// 数据库名称
private final static String AUTH_NAME = "RenJie";// 作者的名称
/**
* @desc Mapper生成器
* @param args
*/
public static void main(String[] args) {
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath + "/src/main/java");
gc.setFileOverride(true);
gc.setActiveRecord(true);// 不需要ActiveRecord特性的请改为false
gc.setEnableCache(false);// XML 二级缓存
gc.setBaseResultMap(true);// XML ResultMap
gc.setBaseColumnList(true);// XML columList
gc.setAuthor(AUTH_NAME);
gc.setOpen(false);
// 自定义文件命名,注意 %s 会自动填充表实体属性!
gc.setMapperName(String.format("%sMapper", ENTITY_NAME));
gc.setXmlName(String.format("%sMapper", ENTITY_NAME));
gc.setServiceName(String.format("%sService", ENTITY_NAME));
gc.setServiceImplName(String.format("%sServiceImpl", ENTITY_NAME));
gc.setEntityName(String.format("%s", ENTITY_NAME));
gc.setControllerName(String.format("%sController", ENTITY_NAME));
mpg.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setDbType(DbType.MYSQL);
dsc.setUrl("jdbc:mysql://sit:23306/" + DATABASE_NAME + "?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("develop");
dsc.setPassword("123456");
mpg.setDataSource(dsc);
// 自定义配置
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
// to do nothing
}
};
// 如果模板引擎是 freemarker
// 自定义输出配置
List<FileOutConfig> focList = new ArrayList<>();
// 自定义配置会被优先输出
focList.add(new FileOutConfig() {
@Override
public String outputFile(TableInfo tableInfo) {
// 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
return projectPath + "/src/main/resources/mapper/" + tableInfo.getEntityName() + "Mapper"
+ StringPool.DOT_XML;
}
});
cfg.setFileOutConfigList(focList);
mpg.setCfg(cfg);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
// strategy.setCapitalMode(true);// 全局大写命名 ORACLE 注意
strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
strategy.setInclude(new String[] { TABLE_NAME }); // 需要生成的表,注释掉生成全部表
// 自定义 mapper 父类
strategy.setSuperMapperClass("com.tohours.actminisite.mapper.IMapper");
// 自定义 service 父类
strategy.setSuperServiceClass("com.tohours.actminisite.service.BaseService");
// 自定义 service 实现类父类
strategy.setSuperServiceImplClass("com.tohours.actminisite.service.impl.BaseServiceImpl");
// 自定义 controller 父类
strategy.setSuperControllerClass("com.tohours.actminisite.controller.BaseController");
strategy.setEntityLombokModel(true);// 【实体】是否为lombok模型(默认 false)
strategy.setRestControllerStyle(true);// 生成 @RestController 控制器
strategy.setEntityTableFieldAnnotationEnable(true);// 是否生成实体时,生成字段注解
mpg.setStrategy(strategy);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent("com.tohours.actminisite");
pc.setController("controller");
pc.setXml("mapper.xml");
pc.setMapper("mapper");
mpg.setPackageInfo(pc);
// 执行生成
mpg.execute();
}
}genertor修改后
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182package com.tohours.actminisite.genertor;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
public class AccessLogGenerator {
private final static String TABLE_NAME = "aia_external_activity_amt_access_log";// 表名
private final static String FORMAT_NAME = "AccessLog";// 实体类名称
private final static String DATABASE_NAME = "actminisite";// 数据库名称
// 数据库连接配置
private static final String JDBC_URL = "jdbc:mysql://sit.wai:33306/" + DATABASE_NAME
+ "?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8";
private static final String JDBC_USER_NAME = "develop";
private static final String JDBC_PASSOWRD = "123456";
private static final String OUTPUTDIR = "/src/main/java";
// 作者
private static final String AUTHOR = "RenJie";
// 设置父包名
private static final String PACKAGE_NAME = "com.tohours.actminisite";
// 设置父包模块名
private static final String MODULE_NAME = null;
// 设置MVC下各个模块的包名
private static final String ENTITY_NAME = "entity";
private static final String MAPPER_NAME = "mapper";
private static final String SERVICE_NAME = "service";
private static final String SERVICE_IMPL_NAME = "service.impl";
private static final String CONTROLLER_NAME = "controller";
// 指定数据库表的前缀。指定后,在生成文件时,模板会自动截取掉前缀字符,如表名为sys_user,指定前缀为sys_,生成实体是自动识别生成为user
// 多个前缀可以用逗号隔开,例如 sys_,bs_,根据项目需要配置
private static final String TABLE_PREFIX = "";
// 设置生成实体时的公共父类,例如 com.tohours.actminisite.entiry.BaseEntity ,根据项目需要配置
private static final String superEntityPackageString = null;
// 设置生成Controller时的公共父类,例如 com.tohours.actminisite.controller.BaseController ,根据项目需要配置
private static final String superControllerPackageString = "com.tohours.actminisite.controller.BaseController";
// 设置生成Service时的公共父类,例如 com.tohours.actminisite.service.Basactminisite ,根据项目需要配置
private static final String superServicePackageString = "com.tohours.actminisite.service.Basactminisite";
// 设置生成ServiceImpl时的公共父类,例如 com.tohours.actminisite.service.impl.BasactminisiteImpl ,根据项目需要配置
private static final String superServiceImplPackageString = "com.tohours.actminisite.service.impl.BasactminisiteImpl";
// 设置生成Mapper时的公共父类,例如 com.tohours.actminisite.service.mapper.IMapper ,根据项目需要配置
private static final String superMapperPackageString = "com.tohours.actminisite.mapper.IMapper";
/**
* @desc Mapper生成器
* @param args
*/
public static void main(String[] args) {
// 1.数据库配置
DataSourceConfig.Builder dataSourceConfigBuilder = new DataSourceConfig
// 驱动连接的URL、数据库连接用户名、数据库连接密码
.Builder(JDBC_URL, JDBC_USER_NAME, JDBC_PASSOWRD)
// 关键字处理 ,这里选取了mysql5.7文档中的关键字和保留字(含移除) 说明:官方文档中没有关于sqlserver,oracle数据库的配置
// .keyWordsHandler(new MySqlKeyWordsHandler())
// 数据库信息查询类,默认由 dbType 类型决定选择对应数据库内置实现:mysql:MySqlQuery(),sqlserver
// :SqlServerQuery(),Oracle:OracleQuery()
.dbQuery(new MySqlQuery())
// 类型转换,数据库=》JAVA类型 mysql: MySqlTypeConvert() sqlserver:SqlServerTypeConvert()
// oracle:OracleTypeConvert()
.typeConvert(new MySqlTypeConvert())
// 数据库 schema name
.schema(DATABASE_NAME);
// 1.1.快速生成器
FastAutoGenerator fastAutoGenerator = FastAutoGenerator.create(dataSourceConfigBuilder);
// 2.全局配置
// 覆盖已生成文件
// 不打开生成文件目录
// 指定输出目录,注意使用反斜杠\
// 设置注释的作者
// 生成swagger注解
// 设置注释的日期格式
// 使用java8新的时间类型
fastAutoGenerator.globalConfig(globalConfigBuilder -> globalConfigBuilder.fileOverride().disableOpenDir()
.outputDir(System.getProperty("user.dir") + OUTPUTDIR).author(AUTHOR).enableSwagger()
.commentDate("yyyy-MM-dd").dateType(DateType.TIME_PACK));
// 3.包配置
// 设置父包名
// 设置父包模块名
// 设置MVC下各个模块的包名
// 设置XML资源文件的目录
fastAutoGenerator.packageConfig(packageConfigBuilder -> packageConfigBuilder
// 父包模块名
.moduleName(MODULE_NAME)
// 父包名
.parent(PACKAGE_NAME).entity(ENTITY_NAME).mapper(MAPPER_NAME).service(SERVICE_NAME)
.serviceImpl(SERVICE_IMPL_NAME).controller(CONTROLLER_NAME));
// 4.模板配置
// 使用Freemarker引擎模板,默认的是Velocity引擎模板
AbstractTemplateEngine templateEngine = new FreemarkerTemplateEngine();
fastAutoGenerator.templateEngine(templateEngine);
// 6.策略配置
// 设置需要生成的表名
// 设置过滤表前缀
fastAutoGenerator.strategyConfig(strategyConfigBuilder -> {
try {
strategyConfigBuilder.enableCapitalMode().enableSkipView().disableSqlFilter()
// 表名匹配,按指定的表名生成对应的文件
.addInclude(TABLE_NAME)
// 指定数据库表的前缀。指定后,在生成文件时,模板会自动截取掉前缀字符,如表名为sys_user,指定前缀为sys_,生成实体是自动识别生成为user
.addTablePrefix(TABLE_PREFIX);
} catch (Exception e) {
e.printStackTrace();
}
});
// 6.1.Entity策略配置
// 生成实体时生成字段的注解,包括@TableId注解等
// 数据库表和字段映射到实体的命名策略,为下划线转驼峰
// 全局主键类型为None
// 实体名称格式化为XXXEntity
fastAutoGenerator.strategyConfig(strategyConfigBuilder -> strategyConfigBuilder.entityBuilder()
// 开启生成实体时生成字段注解
.enableTableFieldAnnotation()
// 数据库表映射到实体的命名策略,NamingStrategy.underline_to_camel
// 指下划线转驼峰,NamingStrategy.no_change 无改变
.naming(NamingStrategy.underline_to_camel)
// 开启实体Lombok注解模式
.enableLombok()
//设置主键的生成策略
.idType(IdType.ASSIGN_UUID)
// 开启 Boolean 类型字段移除 is 前缀
.enableRemoveIsPrefix().columnNaming(NamingStrategy.underline_to_camel)
// 设置Entity父类
.superClass(superEntityPackageString)
// .idType(IdType.NONE)
.formatFileName(FORMAT_NAME));
// 6.2.Controller策略配置
// 开启生成@RestController控制器
fastAutoGenerator.strategyConfig(strategyConfigBuilder -> strategyConfigBuilder.controllerBuilder()
// 设置Controller父类
.superClass(superControllerPackageString)
// 开启驼峰转连字符
.enableHyphenStyle()
// 开启生成@RestController 控制器
.enableRestStyle());
// 6.3.Service策略配置
// 格式化service接口和实现类的文件名称,去掉默认的ServiceName前面的I
fastAutoGenerator.strategyConfig(strategyConfigBuilder -> strategyConfigBuilder.serviceBuilder()
//设置父类
.superServiceClass(superServicePackageString)
.superServiceImplClass(superServiceImplPackageString)
// 格式化 Service文件名称
.formatServiceFileName(String.format("%sService", FORMAT_NAME))
.formatServiceImplFileName(String.format("%sServiceImpl", FORMAT_NAME)));
// 6.4.Mapper策略配置
// 格式化 mapper文件名,格式化xml实现类文件名称
fastAutoGenerator.strategyConfig(strategyConfigBuilder -> strategyConfigBuilder.mapperBuilder()
//设置父类
.superClass(superMapperPackageString)
// 开启 @Mapper 注解
.enableMapperAnnotation().formatMapperFileName(String.format("%sMapper", FORMAT_NAME))
.enableBaseColumnList()
.enableBaseResultMap()
.enableMapperAnnotation()
.formatXmlFileName(String.format("%sMapper", FORMAT_NAME)));
// 7.生成代码
fastAutoGenerator.execute();
}
}
2.4 servlet-api升级
1 | springboot3.0版本移除了javax.servlet.**,变成了jakarta.servlet.**, |
修改前
1
2
3
4<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>修改后
1
2
3
4<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
</dependency>
2.5 jakarta.annotation.*
1 | 所有的javax.annotation.*变成了jakarta.annotation.*, |
2.6 完整的pom.xml
1 | <?xml version="1.0" encoding="UTF-8"?> |
三:打包脚本调整
jdk17.bat
1
2
3set JAVA_HOME=C:\Program Files\Java\jdk-17.0.7
set PATH=%JAVA_HOME%\bin;%path%;C:\Windows\system32;C:\Windows
java -versionmvn.bat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32@echo off
REM 声明采用UTF-8编码
chcp 65001
title mvn package actminisite
:: RenJie
::打jar包
del C:\Users\Administrator\Desktop\actminisite.jar
echo =====================================================
echo ===== 打包友邦友享actminisitejar包 ======
echo =====================================================
set versionPath=D:\javaProgram\actminisite\trunk\code\src\main\resources\static
set pomPath=D:\javaProgram\actminisite\trunk\code
::设置jdk17
call jdk17.bat;
D:
cd %versionPath%
:: 生成version.jsp和version.html
call create_version.bat
::打包
cd %pomPath%
call mvn clean package -Dmaven.test.skip=true
:: 删除版本号文件
cd %versionPath%
del version.jsp
del version.html
:: copy文件到desktop
XCOPY D:\javaProgram\actminisite\trunk\code\target\actminisite.jar C:\Users\Administrator\Desktop\ /Y/F
echo package success
*************感谢您的阅读*************