使用文档
# 项目管理
代码生成器链接: http://192.168.106.182:6101/#/gen/generator/index
# 新增项目
项目名称: 中文的名字
项目代码: 英文的名字, 后面生成代码的时候会用到
# 测试连接
# 代码生成
# 生成解决方案
生成解决方案的时候, 如果库里面已经有对应的表了, 可以顺便生成对应的实体的增删改查
# 代码生成
点击导入 -> 选择配置的数据源 -> 选择需要生成的表
修改表或包名的配置
点击列表编辑 -> 模块配置(修改包名) -> 配置表体(表头+表体的业务)
下载 -> 将代码文件夹拖进idea
说明:
如果就是单表, 并且没有写复杂sql的情况, xml文件可以不用放
# 增删改查接口文档
# 新增/修改 -> save
接口: /appGen/save
{
"entity": {
"id":1394101768454200,
"iEFlag": "I",
"createTime": "2023-06-29 19:53:27",
"price": 85.10,
"createTimeEnd": null,
"name": "hello27",
"gNo": "1",
"usedFlag": "1",
"createTimeStart": null,
"detail": "测试19",
"custCode": "2"
},
"tgTime": 1708935705650,
"businessType": "INSERT"
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
结构说明:
entity: 实体的属性
tgTime: 时间戳
businessType: 业务类型 INSERT / UPDATE, 根据不同的类型传不同的值(前端已经封装好了)
# 删除
接口: /appGen/deleteById
{
"entity": {
"id":1394101768454200,
},
"tgTime": 1708935705650,
"businessType": "DELETE"
}
2
3
4
5
6
7
# 查询列表
接口: /appGen/selectList
{
"entity":{
"id":211
},
"tgTime": 1708935705650,
"businessType": "SELECT"
}
2
3
4
5
6
7
entity里面传什么, where条件后面就拼什么
# 分页查询
对于框架封装的selectPageList方法做说明:
# 约定说明
这个方法是一个由框架封装的通用的模板
约定: __queryField
__queryField
name|A.xx|s|=|and
字段|别名|类型|比较符号|连接符号
类型: s字符串 n数字 d日期
比较符号: = > < >= <= != in nin l rl ll isnull isnotnull between
连接符号: and or
# 请求参数
接口: /appGen/selectPageList
{
"type": "1",
"paging": {
"pageSize": 10,
"pageNum": 1,
"sortFields": [
{
"sortField": "A.price",
"asc": true
},
{
"sortField": "A.custCode",
"asc": false
}
]
},
"entity": {
"name": "hello",
"createTimeStart": "2022-02-15",
"createTimeEnd": "2023-11-15",
"__queryField": "name|A.NAME|s|l|and,createTime|A.CREATE_TIME|d|between|and"
},
"query": {
"totalColumn": "",
"selectColumns": ""
},
"tgTime": 13213123,
"businessType": "SELECT"
}
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
说明:
paging: 分页信息
sortFields: 排序数组, 支持多个字段的排序, asc : true 正序, 否则为倒序
query:
totalColumn: 这里是一个可以配置汇总的列, 比如price字段, 会计算出来一个总金额
selectColumns: 指定查询的字段,小驼峰字段, 多个用逗号隔开 如: myName,myAge -> select my_name, my_age from xxx
# 导出excel
导出查询的数据, 框架封装的方法就是将上面的查询的数据直接导出excel
{
"type": "1",
"paging": {
"pageSize": 10,
"pageNum": 1,
"sortField": "price",
"asc": true
},
"entity": {
"createTimeStart": "2023-09-15",
"createTimeEnd": "2024-5-15",
"__queryField": "name|A.NAME|s|l|and,createTime|A.CREATE_TIME|d|between|and"
},
"query": {
"totalColumn": "",
"selectColumns": ""
},
"tgTime":13213123,
"businessType": "EXPORT",
"excel":{
"excelName":"测试excel",
"columns":[
{"columnCode":"name","columnName":"名字"},
{"columnCode":"custCode","columnName":"代码"},
{"columnCode":"price","columnName":"价格"},
{"columnCode":"iEFlag","columnName":"进出口标记"},
{"columnCode":"iEFlagName","columnName":"进出口名称"},
{"columnCode":"createTime","columnName":"创建时间"}
]
}
}
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
说明:
**businessType: **
EXPORT 同步导出
ASYNC_EXPORT 异步导出, 适合大数据量的导出场景
导出excel还需要向后端指定类名和中文注释
# 上传文件
files: 文件
formData:
{
"entity":{
"usedFlag":"1",
"price":12.3
},
"bussionType":"IMPORT",
"tgTime":121231
}
-----------------entity----------------------
// 自定义文件上传
@TableField(exist = false)
private List<MultipartFile> files;
---------------controller----------------------
@PostMapping("/upload")
public ResponseMsg upload(AppGenEntity appGenEntity){
// 可以取出文件 ....
appGenEntity.getFiles();
return ResponseMsgUtil.success(10001,null);
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
说明:
controller是可以接受一个对象参数, 同时将数据和文件同时接收到
# 代码名称转换
# 1.注解
实际缓存中的key是:
TG_WEB_BASE_CODE:ECIGW_ENT_I_E_FLAG_CN
我们只取冒号后面的那部分
@EciCode("ECIGW_ENT_I_E_FLAG_CN")
private String iEFlag;
2
说明:
优点: 简单方便
缺点: 破坏了原始的生成代码, 如果代码重新生成无法直接覆盖
# 2.子类扩展
// AppGenEntity类里面是空的
public class AppGenEntity extends BaseAppGenEntity {
@Override
protected void addConvertMap() {
// 和上面注解效果一样
convertMap.put(Fields.iEFlag, ()-> "ECIGW_ENT_I_E_FLAG_CN");
// 自义定Map, 没有缓存, 就固定值, 快速转换
convertMap.put(Fields.usedFlag, ()-> {
Map<String,String> map = new HashMap<>();
map.put("1","有效");
map.put("0","无效");
return map;
});
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
说明:
addConvertMap方法是框架提供的
# 操作缓存
如果升级最新, 需要修改代码
2.1.X 之前
废弃
RedisUtil redisUtil;
2
当前版本
新的操作方法
redisUtil.set("k1","v1") -> TgCacheHelper.set("k1","v1");
2
没变
@Cacheable("IAppGenServiceImpl-queryPageList#3600")
2
新增使用jvm作为缓存
配置
project:
cache:
type: redis # jvm
2
3
# swagger配置
project:
swagger:
config:
-
packageScan: com.eci.component.sysCacheHelp
module: 缓存管理
-
packageScan: com.eci.component.sysTaskInfo
module: 任务中心
2
3
4
5
6
7
8
9
说明:
packageScan: 指定只扫描具体的包内的controller
module: 该包名的表述, 后面在swagger-ui界面可以选
# 配置文件加密
加密配置
private final static String secret = "d1104d7c3b616f0b"; public static void main1(String[] args) { String url = "jdbc:mysql://192.168.100.105:3308/ECI_TG?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=CONVERT_TO_NULL"; String username = "ECI_TG"; String password = "ECI_TG_1qaz"; String redisPassword = "Redis_1qaz"; System.out.println(AES.encrypt(url,secret)); System.out.println(AES.encrypt(username,secret)); System.out.println(AES.encrypt(password,secret)); System.out.println(AES.encrypt(redisPassword,secret)); }
1
2
3
4
5
6
7
8
9
10
11
12替换配置文件
datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: mpw:jWzqiSOb81tRagxvtwP5cLKwkuCzTq1Dko05oUynzlEsYVNpFoYF4PlF7ka8Lnoq0obo+Vv0wcmwXhVHS/pFKIg2MhDOL+eD75QOmvI7N5lJiZsyVhiNMCEFjtdMIfL4qOSkXN9r4/oXX8/NQePak36yV+dppgE+RZfJY4XlFAqMz+eNmwVrPih+/ucEb8DC username: mpw:R+r95hsVqc/m2idR3yQTHA== password: mpw:a2i5Nt1wAW3EV3crvvxJGA== type: com.alibaba.druid.pool.DruidDataSource redis: host: 192.168.106.182 port: 6379 database: 10 password: mpw:pX0zTvDmHD2+8PFqaVqM3Q==
1
2
3
4
5
6
7
8
9
10
11添加运行时参数
java -jar xxx.jar --mpw.key=d1104d7c3b616f0b
1