diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/com/baomidou/dynamic/datasource/processor/jakarta/DsJakartaHeaderProcessor.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/com/baomidou/dynamic/datasource/processor/jakarta/DsJakartaHeaderProcessor.java new file mode 100644 index 000000000..f0a50a2d9 --- /dev/null +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/com/baomidou/dynamic/datasource/processor/jakarta/DsJakartaHeaderProcessor.java @@ -0,0 +1,45 @@ +/* + * Copyright © 2018 organization baomidou + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.baomidou.dynamic.datasource.processor.jakarta; + +import com.baomidou.dynamic.datasource.processor.DsProcessor; +import jakarta.servlet.http.HttpServletRequest; +import org.aopalliance.intercept.MethodInvocation; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +/** + * @author TaoYu + * @since 3.6.0 + */ +public class DsJakartaHeaderProcessor extends DsProcessor { + + /** + * header prefix + */ + private static final String HEADER_PREFIX = "#header"; + + @Override + public boolean matches(String key) { + return key.startsWith(HEADER_PREFIX); + } + + @Override + public String doDetermineDatasource(MethodInvocation invocation, String key) { + HttpServletRequest request = (HttpServletRequest) ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + return request.getHeader(key.substring(8)); + } +} diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/com/baomidou/dynamic/datasource/processor/jakarta/DsJakartaSessionProcessor.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/com/baomidou/dynamic/datasource/processor/jakarta/DsJakartaSessionProcessor.java new file mode 100644 index 000000000..0ea8a1309 --- /dev/null +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/com/baomidou/dynamic/datasource/processor/jakarta/DsJakartaSessionProcessor.java @@ -0,0 +1,46 @@ +/* + * Copyright © 2018 organization baomidou + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.baomidou.dynamic.datasource.processor.jakarta; + +import com.baomidou.dynamic.datasource.processor.DsProcessor; +import jakarta.servlet.http.HttpServletRequest; +import org.aopalliance.intercept.MethodInvocation; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + + +/** + * @author TaoYu + * @since 3.6.0 + */ +public class DsJakartaSessionProcessor extends DsProcessor { + + /** + * session开头 + */ + private static final String SESSION_PREFIX = "#session"; + + @Override + public boolean matches(String key) { + return key.startsWith(SESSION_PREFIX); + } + + @Override + public String doDetermineDatasource(MethodInvocation invocation, String key) { + HttpServletRequest request = (HttpServletRequest) ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + return request.getSession().getAttribute(key.substring(9)).toString(); + } +} diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataBaseHelper.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataBaseHelper.java index 861653fd4..d27200fce 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataBaseHelper.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataBaseHelper.java @@ -12,6 +12,8 @@ import javax.sql.DataSource; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; /** * 数据库助手 @@ -69,4 +71,11 @@ public class DataBaseHelper { // find_in_set('100' , '0,100,101') return "find_in_set('%s' , %s) <> 0".formatted(var, var2); } + + /** + * 获取当前加载的数据库名 + */ + public static List getDataSourceNameList() { + return new ArrayList<>(DS.getDataSources().keySet()); + } } diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/constant/GenConstants.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/constant/GenConstants.java index f67b6d409..937869f83 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/constant/GenConstants.java +++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/constant/GenConstants.java @@ -16,11 +16,6 @@ public interface GenConstants { */ String TPL_TREE = "tree"; - /** - * 主子表(增删改查) - */ - String TPL_SUB = "sub"; - /** * 树编码字段 */ @@ -49,57 +44,55 @@ public interface GenConstants { /** * 数据库字符串类型 */ - String[] COLUMNTYPE_STR = {"char", "varchar", "nvarchar", "varchar2"}; + String[] COLUMNTYPE_STR = {"char", "varchar", "enum", "set", "nchar", "nvarchar", "varchar2", "nvarchar2"}; /** * 数据库文本类型 */ - String[] COLUMNTYPE_TEXT = {"tinytext", "text", "mediumtext", "longtext"}; + String[] COLUMNTYPE_TEXT = {"tinytext", "text", "mediumtext", "longtext", "binary", "varbinary", "blob", + "ntext", "image", "bytea"}; /** * 数据库时间类型 */ - String[] COLUMNTYPE_TIME = {"datetime", "time", "date", "timestamp"}; + String[] COLUMNTYPE_TIME = {"datetime", "time", "date", "timestamp", "year", "interval", + "smalldatetime", "datetime2", "datetimeoffset"}; /** * 数据库数字类型 */ String[] COLUMNTYPE_NUMBER = {"tinyint", "smallint", "mediumint", "int", "number", "integer", - "bigint", "float", "double", "decimal"}; + "bit", "bigint", "float", "double", "decimal", "numeric", "real", "double precision", + "smallserial", "serial", "bigserial", "money", "smallmoney"}; /** * BO对象 不需要添加字段 */ - String[] COLUMNNAME_NOT_ADD = {"create_by", "create_time", "del_flag", "update_by", - "update_time", "version"}; + String[] COLUMNNAME_NOT_ADD = {"create_dept", "create_by", "create_time", "del_flag", "update_by", + "update_time", "version", "tenant_id"}; /** * BO对象 不需要编辑字段 */ - String[] COLUMNNAME_NOT_EDIT = {"create_by", "create_time", "del_flag", "update_by", - "update_time", "version"}; + String[] COLUMNNAME_NOT_EDIT = {"create_dept", "create_by", "create_time", "del_flag", "update_by", + "update_time", "version", "tenant_id"}; /** * VO对象 不需要返回字段 */ - String[] COLUMNNAME_NOT_LIST = {"create_by", "create_time", "del_flag", "update_by", - "update_time", "version"}; + String[] COLUMNNAME_NOT_LIST = {"create_dept", "create_by", "create_time", "del_flag", "update_by", + "update_time", "version", "tenant_id"}; /** * BO对象 不需要查询字段 */ - String[] COLUMNNAME_NOT_QUERY = {"id", "create_by", "create_time", "del_flag", "update_by", - "update_time", "remark", "version"}; + String[] COLUMNNAME_NOT_QUERY = {"id", "create_dept", "create_by", "create_time", "del_flag", "update_by", + "update_time", "remark", "version", "tenant_id"}; /** * Entity基类字段 */ - String[] BASE_ENTITY = {"createBy", "createTime", "updateBy", "updateTime"}; - - /** - * Tree基类字段 - */ - String[] TREE_ENTITY = {"parentName", "parentId", "children"}; + String[] BASE_ENTITY = {"createDept", "createBy", "createTime", "updateBy", "updateTime", "tenantId"}; /** * 文本框 diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/controller/GenController.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/controller/GenController.java index 24eea210d..053857a0a 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/controller/GenController.java +++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/controller/GenController.java @@ -3,20 +3,21 @@ package org.dromara.gen.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.hutool.core.convert.Convert; import cn.hutool.core.io.IoUtil; +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; import org.dromara.common.core.domain.R; -import org.dromara.common.web.core.BaseController; import org.dromara.common.log.annotation.Log; import org.dromara.common.log.enums.BusinessType; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.helper.DataBaseHelper; +import org.dromara.common.web.core.BaseController; import org.dromara.gen.domain.GenTable; import org.dromara.gen.domain.GenTableColumn; import org.dromara.gen.service.IGenTableService; -import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.HashMap; import java.util.List; @@ -29,8 +30,8 @@ import java.util.Map; */ @Validated @RequiredArgsConstructor -@RequestMapping("/gen") @RestController +@RequestMapping("/tool/gen") public class GenController extends BaseController { private final IGenTableService genTableService; @@ -47,7 +48,7 @@ public class GenController extends BaseController { /** * 修改代码生成业务 * - * @param tableId 表主键 + * @param tableId 表ID */ @SaCheckPermission("tool:gen:query") @GetMapping(value = "/{tableId}") @@ -55,7 +56,7 @@ public class GenController extends BaseController { GenTable table = genTableService.selectGenTableById(tableId); List tables = genTableService.selectGenTableAll(); List list = genTableService.selectGenTableColumnListByTableId(tableId); - Map map = new HashMap<>(); + Map map = new HashMap(); map.put("info", table); map.put("rows", list); map.put("tables", tables); @@ -74,8 +75,9 @@ public class GenController extends BaseController { /** * 查询数据表字段列表 * - * @param tableId 表主键 + * @param tableId 表ID */ + @SaCheckPermission("tool:gen:list") @GetMapping(value = "/column/{tableId}") public TableDataInfo columnList(Long tableId) { TableDataInfo dataInfo = new TableDataInfo<>(); @@ -93,11 +95,11 @@ public class GenController extends BaseController { @SaCheckPermission("tool:gen:import") @Log(title = "代码生成", businessType = BusinessType.IMPORT) @PostMapping("/importTable") - public R importTableSave(String tables) { + public R importTableSave(String tables, String dataName) { String[] tableNames = Convert.toStrArray(tables); // 查询表信息 - List tableList = genTableService.selectDbTableListByNames(tableNames); - genTableService.importGenTable(tableList); + List tableList = genTableService.selectDbTableListByNames(tableNames, dataName); + genTableService.importGenTable(tableList, dataName); return R.ok(); } @@ -116,7 +118,7 @@ public class GenController extends BaseController { /** * 删除代码生成 * - * @param tableIds 表主键串 + * @param tableIds 表ID串 */ @SaCheckPermission("tool:gen:remove") @Log(title = "代码生成", businessType = BusinessType.DELETE) @@ -129,7 +131,7 @@ public class GenController extends BaseController { /** * 预览代码 * - * @param tableId 表主键 + * @param tableId 表ID */ @SaCheckPermission("tool:gen:preview") @GetMapping("/preview/{tableId}") @@ -141,53 +143,53 @@ public class GenController extends BaseController { /** * 生成代码(下载方式) * - * @param tableName 表名 + * @param tableId 表ID */ @SaCheckPermission("tool:gen:code") @Log(title = "代码生成", businessType = BusinessType.GENCODE) - @GetMapping("/download/{tableName}") - public void download(HttpServletResponse response, @PathVariable("tableName") String tableName) throws IOException { - byte[] data = genTableService.downloadCode(tableName); + @GetMapping("/download/{tableId}") + public void download(HttpServletResponse response, @PathVariable("tableId") Long tableId) throws IOException { + byte[] data = genTableService.downloadCode(tableId); genCode(response, data); } /** * 生成代码(自定义路径) * - * @param tableName 表名 + * @param tableId 表ID */ @SaCheckPermission("tool:gen:code") @Log(title = "代码生成", businessType = BusinessType.GENCODE) - @GetMapping("/genCode/{tableName}") - public R genCode(@PathVariable("tableName") String tableName) { - genTableService.generatorCode(tableName); + @GetMapping("/genCode/{tableId}") + public R genCode(@PathVariable("tableId") Long tableId) { + genTableService.generatorCode(tableId); return R.ok(); } /** * 同步数据库 * - * @param tableName 表名 + * @param tableId 表ID */ @SaCheckPermission("tool:gen:edit") @Log(title = "代码生成", businessType = BusinessType.UPDATE) - @GetMapping("/synchDb/{tableName}") - public R synchDb(@PathVariable("tableName") String tableName) { - genTableService.synchDb(tableName); + @GetMapping("/synchDb/{tableId}") + public R synchDb(@PathVariable("tableId") Long tableId) { + genTableService.synchDb(tableId); return R.ok(); } /** * 批量生成代码 * - * @param tables 表名串 + * @param tableIdStr 表ID串 */ @SaCheckPermission("tool:gen:code") @Log(title = "代码生成", businessType = BusinessType.GENCODE) @GetMapping("/batchGenCode") - public void batchGenCode(HttpServletResponse response, String tables) throws IOException { - String[] tableNames = Convert.toStrArray(tables); - byte[] data = genTableService.downloadCode(tableNames); + public void batchGenCode(HttpServletResponse response, String tableIdStr) throws IOException { + String[] tableIds = Convert.toStrArray(tableIdStr); + byte[] data = genTableService.downloadCode(tableIds); genCode(response, data); } @@ -203,4 +205,13 @@ public class GenController extends BaseController { response.setContentType("application/octet-stream; charset=UTF-8"); IoUtil.write(response.getOutputStream(), false, data); } + + /** + * 查询数据源名称列表 + */ + @SaCheckPermission("tool:gen:list") + @GetMapping(value = "/getDataNames") + public R getCurrentDataSourceNameList(){ + return R.ok(DataBaseHelper.getDataSourceNameList()); + } } diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/domain/GenTable.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/domain/GenTable.java index 4dd0cc018..19f94b0d6 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/domain/GenTable.java +++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/domain/GenTable.java @@ -4,15 +4,14 @@ import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; import lombok.Data; import lombok.EqualsAndHashCode; -import org.apache.commons.lang3.ArrayUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.domain.BaseEntity; import org.dromara.gen.constant.GenConstants; -import jakarta.validation.Valid; -import jakarta.validation.constraints.NotBlank; import java.util.List; /** @@ -32,6 +31,12 @@ public class GenTable extends BaseEntity { @TableId(value = "table_id") private Long tableId; + /** + * 数据源名称 + */ + @NotBlank(message = "数据源名称不能为空") + private String dataName; + /** * 表名称 */ @@ -112,12 +117,6 @@ public class GenTable extends BaseEntity { @TableField(exist = false) private GenTableColumn pkColumn; - /** - * 子表信息 - */ - @TableField(exist = false) - private GenTable subTable; - /** * 表列信息 */ @@ -171,14 +170,6 @@ public class GenTable extends BaseEntity { @TableField(exist = false) private String parentMenuName; - public boolean isSub() { - return isSub(this.tplCategory); - } - - public static boolean isSub(String tplCategory) { - return tplCategory != null && StringUtils.equals(GenConstants.TPL_SUB, tplCategory); - } - public boolean isTree() { return isTree(this.tplCategory); } @@ -200,10 +191,6 @@ public class GenTable extends BaseEntity { } public static boolean isSuperColumn(String tplCategory, String javaField) { - if (isTree(tplCategory)) { - return StringUtils.equalsAnyIgnoreCase(javaField, - ArrayUtils.addAll(GenConstants.TREE_ENTITY, GenConstants.BASE_ENTITY)); - } return StringUtils.equalsAnyIgnoreCase(javaField, GenConstants.BASE_ENTITY); } } diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/domain/GenTableColumn.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/domain/GenTableColumn.java index 9aedd854d..b3fe7c0f8 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/domain/GenTableColumn.java +++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/domain/GenTableColumn.java @@ -4,13 +4,12 @@ import com.baomidou.mybatisplus.annotation.FieldStrategy; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.mybatis.core.domain.BaseEntity; +import jakarta.validation.constraints.NotBlank; import lombok.Data; import lombok.EqualsAndHashCode; import org.apache.ibatis.type.JdbcType; - -import jakarta.validation.constraints.NotBlank; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.domain.BaseEntity; /** * 代码生成业务字段表 gen_table_column @@ -189,10 +188,10 @@ public class GenTableColumn extends BaseEntity { public static boolean isSuperColumn(String javaField) { return StringUtils.equalsAnyIgnoreCase(javaField, - // BaseEntity - "createBy", "createTime", "updateBy", "updateTime", - // TreeEntity - "parentName", "parentId"); + // BaseEntity + "createBy", "createTime", "updateBy", "updateTime", + // TreeEntity + "parentName", "parentId"); } public boolean isUsableColumn() { diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/mapper/GenTableColumnMapper.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/mapper/GenTableColumnMapper.java index a827bb494..601b1a8ce 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/mapper/GenTableColumnMapper.java +++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/mapper/GenTableColumnMapper.java @@ -1,5 +1,6 @@ package org.dromara.gen.mapper; +import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.gen.domain.GenTableColumn; @@ -17,8 +18,10 @@ public interface GenTableColumnMapper extends BaseMapperPlus selectDbTableColumnsByName(String tableName); + @DS("#dataName") + List selectDbTableColumnsByName(String tableName, String dataName); } diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/mapper/GenTableMapper.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/mapper/GenTableMapper.java index c36a6644e..2567c89fe 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/mapper/GenTableMapper.java +++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/mapper/GenTableMapper.java @@ -1,5 +1,6 @@ package org.dromara.gen.mapper; +import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Param; @@ -16,6 +17,12 @@ import java.util.List; @InterceptorIgnore(dataPermission = "true", tenantLine = "true") public interface GenTableMapper extends BaseMapperPlus { + /** + * 查询据库列表 + * + * @param genTable 查询条件 + * @return 数据库表集合 + */ Page selectPageDbTableList(@Param("page") Page page, @Param("genTable") GenTable genTable); /** @@ -49,4 +56,6 @@ public interface GenTableMapper extends BaseMapperPlus { */ GenTable selectGenTableByName(String tableName); + @DS("") + List selectTableNameList(String dataName); } diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java index ecebcca07..9031760e4 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java +++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java @@ -3,10 +3,9 @@ package org.dromara.gen.service; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.lang.Dict; -import cn.hutool.core.lang.Snowflake; -import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.dynamic.datasource.annotation.DSTransactional; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator; @@ -49,9 +48,8 @@ import java.util.zip.ZipOutputStream; /** * 业务 服务层实现 * - * @author ruoyi + * @author Lion Li */ -@DS("#header.datasource") @Slf4j @RequiredArgsConstructor @Service @@ -96,16 +94,19 @@ public class GenTableServiceImpl implements IGenTableService { private QueryWrapper buildGenTableQueryWrapper(GenTable genTable) { Map params = genTable.getParams(); QueryWrapper wrapper = Wrappers.query(); - wrapper.like(StringUtils.isNotBlank(genTable.getTableName()), "lower(table_name)", StringUtils.lowerCase(genTable.getTableName())) + wrapper + .eq(StringUtils.isNotEmpty(genTable.getDataName()),"data_name", genTable.getDataName()) + .like(StringUtils.isNotBlank(genTable.getTableName()), "lower(table_name)", StringUtils.lowerCase(genTable.getTableName())) .like(StringUtils.isNotBlank(genTable.getTableComment()), "lower(table_comment)", StringUtils.lowerCase(genTable.getTableComment())) .between(params.get("beginTime") != null && params.get("endTime") != null, "create_time", params.get("beginTime"), params.get("endTime")); return wrapper; } - + @DS("#genTable.dataName") @Override public TableDataInfo selectPageDbTableList(GenTable genTable, PageQuery pageQuery) { + genTable.getParams().put("genTableNames",baseMapper.selectTableNameList(genTable.getDataName())); Page page = baseMapper.selectPageDbTableList(pageQuery.build(), genTable); return TableDataInfo.build(page); } @@ -114,10 +115,12 @@ public class GenTableServiceImpl implements IGenTableService { * 查询据库列表 * * @param tableNames 表名称组 + * @param dataName 数据源名称 * @return 数据库表集合 */ + @DS("#dataName") @Override - public List selectDbTableListByNames(String[] tableNames) { + public List selectDbTableListByNames(String[] tableNames, String dataName) { return baseMapper.selectDbTableListByNames(tableNames); } @@ -135,7 +138,6 @@ public class GenTableServiceImpl implements IGenTableService { * 修改业务 * * @param genTable 业务信息 - * @return 结果 */ @Transactional(rollbackFor = Exception.class) @Override @@ -154,7 +156,6 @@ public class GenTableServiceImpl implements IGenTableService { * 删除业务对象 * * @param tableIds 需要删除的数据ID - * @return 结果 */ @Transactional(rollbackFor = Exception.class) @Override @@ -168,19 +169,21 @@ public class GenTableServiceImpl implements IGenTableService { * 导入表结构 * * @param tableList 导入表列表 + * @param dataName 数据源名称 */ - @Transactional(rollbackFor = Exception.class) + @DSTransactional @Override - public void importGenTable(List tableList) { + public void importGenTable(List tableList, String dataName) { Long operId = LoginHelper.getUserId(); try { for (GenTable table : tableList) { String tableName = table.getTableName(); GenUtils.initTable(table, operId); + table.setDataName(dataName); int row = baseMapper.insert(table); if (row > 0) { // 保存列信息 - List genTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName); + List genTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName, dataName); List saveColumns = new ArrayList<>(); for (GenTableColumn column : genTableColumns) { GenUtils.initColumnField(column, table); @@ -212,8 +215,6 @@ public class GenTableServiceImpl implements IGenTableService { menuIds.add(identifierGenerator.nextId(null).longValue()); } table.setMenuIds(menuIds); - // 设置主子表信息 - setSubTable(table); // 设置主键列信息 setPkColumn(table); VelocityInitializer.initVelocity(); @@ -235,14 +236,14 @@ public class GenTableServiceImpl implements IGenTableService { /** * 生成代码(下载方式) * - * @param tableName 表名称 + * @param tableId 表名称 * @return 数据 */ @Override - public byte[] downloadCode(String tableName) { + public byte[] downloadCode(Long tableId) { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ZipOutputStream zip = new ZipOutputStream(outputStream); - generatorCode(tableName, zip); + generatorCode(tableId, zip); IoUtil.close(zip); return outputStream.toByteArray(); } @@ -250,19 +251,12 @@ public class GenTableServiceImpl implements IGenTableService { /** * 生成代码(自定义路径) * - * @param tableName 表名称 + * @param tableId 表名称 */ @Override - public void generatorCode(String tableName) { + public void generatorCode(Long tableId) { // 查询表信息 - GenTable table = baseMapper.selectGenTableByName(tableName); - List menuIds = new ArrayList<>(); - for (int i = 0; i < 6; i++) { - menuIds.add(identifierGenerator.nextId(null).longValue()); - } - table.setMenuIds(menuIds); - // 设置主子表信息 - setSubTable(table); + GenTable table = baseMapper.selectGenTableById(tableId); // 设置主键列信息 setPkColumn(table); @@ -273,7 +267,7 @@ public class GenTableServiceImpl implements IGenTableService { // 获取模板列表 List templates = VelocityUtils.getTemplateList(table.getTplCategory()); for (String template : templates) { - if (!StringUtils.containsAny(template, "sql.vm", "api.js.vm", "index.vue.vm", "index-tree.vue.vm")) { + if (!StringUtils.containsAny(template, "sql.vm", "api.ts.vm", "types.ts.vm", "index.vue.vm", "index-tree.vue.vm")) { // 渲染模板 StringWriter sw = new StringWriter(); Template tpl = Velocity.getTemplate(template, Constants.UTF8); @@ -291,17 +285,16 @@ public class GenTableServiceImpl implements IGenTableService { /** * 同步数据库 * - * @param tableName 表名称 + * @param tableId 表名称 */ - @Transactional(rollbackFor = Exception.class) + @DSTransactional @Override - public void synchDb(String tableName) { - - GenTable table = baseMapper.selectGenTableByName(tableName); + public void synchDb(Long tableId) { + GenTable table = baseMapper.selectGenTableById(tableId); List tableColumns = table.getColumns(); Map tableColumnMap = StreamUtils.toIdentityMap(tableColumns, GenTableColumn::getColumnName); - List dbTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName); + List dbTableColumns = genTableColumnMapper.selectDbTableColumnsByName(table.getTableName(), table.getDataName()); if (CollUtil.isEmpty(dbTableColumns)) { throw new ServiceException("同步数据失败,原表结构不存在"); } @@ -328,30 +321,30 @@ public class GenTableServiceImpl implements IGenTableService { } saveColumns.add(column); }); - if (CollUtil.isNotEmpty(saveColumns)) { genTableColumnMapper.insertOrUpdateBatch(saveColumns); } - List delColumns = StreamUtils.filter(tableColumns, column -> !dbTableColumnNames.contains(column.getColumnName())); if (CollUtil.isNotEmpty(delColumns)) { List ids = StreamUtils.toList(delColumns, GenTableColumn::getColumnId); - genTableColumnMapper.deleteBatchIds(ids); + if (CollUtil.isNotEmpty(ids)) { + genTableColumnMapper.deleteBatchIds(ids); + } } } /** * 批量生成代码(下载方式) * - * @param tableNames 表数组 + * @param tableIds 表ID数组 * @return 数据 */ @Override - public byte[] downloadCode(String[] tableNames) { + public byte[] downloadCode(String[] tableIds) { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ZipOutputStream zip = new ZipOutputStream(outputStream); - for (String tableName : tableNames) { - generatorCode(tableName, zip); + for (String tableId : tableIds) { + generatorCode(Long.parseLong(tableId), zip); } IoUtil.close(zip); return outputStream.toByteArray(); @@ -360,17 +353,14 @@ public class GenTableServiceImpl implements IGenTableService { /** * 查询表信息并生成代码 */ - private void generatorCode(String tableName, ZipOutputStream zip) { + private void generatorCode(Long tableId, ZipOutputStream zip) { // 查询表信息 - GenTable table = baseMapper.selectGenTableByName(tableName); - Snowflake snowflake = IdUtil.getSnowflake(); + GenTable table = baseMapper.selectGenTableById(tableId); List menuIds = new ArrayList<>(); for (int i = 0; i < 6; i++) { - menuIds.add(snowflake.nextId()); + menuIds.add(identifierGenerator.nextId(null).longValue()); } table.setMenuIds(menuIds); - // 设置主子表信息 - setSubTable(table); // 设置主键列信息 setPkColumn(table); @@ -414,12 +404,6 @@ public class GenTableServiceImpl implements IGenTableService { throw new ServiceException("树父编码字段不能为空"); } else if (StringUtils.isEmpty(paramsObj.getStr(GenConstants.TREE_NAME))) { throw new ServiceException("树名称字段不能为空"); - } else if (GenConstants.TPL_SUB.equals(genTable.getTplCategory())) { - if (StringUtils.isEmpty(genTable.getSubTableName())) { - throw new ServiceException("关联子表的表名不能为空"); - } else if (StringUtils.isEmpty(genTable.getSubTableFkName())) { - throw new ServiceException("子表关联的外键名不能为空"); - } } } } @@ -439,29 +423,7 @@ public class GenTableServiceImpl implements IGenTableService { if (ObjectUtil.isNull(table.getPkColumn())) { table.setPkColumn(table.getColumns().get(0)); } - if (GenConstants.TPL_SUB.equals(table.getTplCategory())) { - for (GenTableColumn column : table.getSubTable().getColumns()) { - if (column.isPk()) { - table.getSubTable().setPkColumn(column); - break; - } - } - if (ObjectUtil.isNull(table.getSubTable().getPkColumn())) { - table.getSubTable().setPkColumn(table.getSubTable().getColumns().get(0)); - } - } - } - /** - * 设置主子表信息 - * - * @param table 业务表信息 - */ - public void setSubTable(GenTable table) { - String subTableName = table.getSubTableName(); - if (StringUtils.isNotEmpty(subTableName)) { - table.setSubTable(baseMapper.selectGenTableByName(subTableName)); - } } /** @@ -501,3 +463,4 @@ public class GenTableServiceImpl implements IGenTableService { return genPath + File.separator + VelocityUtils.getFileName(template, table); } } + diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/IGenTableService.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/IGenTableService.java index 19a3e3574..ea23c53d3 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/IGenTableService.java +++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/IGenTableService.java @@ -11,7 +11,7 @@ import java.util.Map; /** * 业务 服务层 * - * @author ruoyi + * @author Lion Li */ public interface IGenTableService { @@ -23,17 +23,30 @@ public interface IGenTableService { */ List selectGenTableColumnListByTableId(Long tableId); + /** + * 查询业务列表 + * + * @param genTable 业务信息 + * @return 业务集合 + */ TableDataInfo selectPageGenTableList(GenTable genTable, PageQuery pageQuery); + /** + * 查询据库列表 + * + * @param genTable 业务信息 + * @return 数据库表集合 + */ TableDataInfo selectPageDbTableList(GenTable genTable, PageQuery pageQuery); /** * 查询据库列表 * * @param tableNames 表名称组 + * @param dataName 数据源名称 * @return 数据库表集合 */ - List selectDbTableListByNames(String[] tableNames); + List selectDbTableListByNames(String[] tableNames, String dataName); /** * 查询所有表信息 @@ -54,7 +67,6 @@ public interface IGenTableService { * 修改业务 * * @param genTable 业务信息 - * @return 结果 */ void updateGenTable(GenTable genTable); @@ -62,7 +74,6 @@ public interface IGenTableService { * 删除业务信息 * * @param tableIds 需要删除的表数据ID - * @return 结果 */ void deleteGenTableByIds(Long[] tableIds); @@ -70,8 +81,9 @@ public interface IGenTableService { * 导入表结构 * * @param tableList 导入表列表 + * @param dataName 数据源名称 */ - void importGenTable(List tableList); + void importGenTable(List tableList, String dataName); /** * 预览代码 @@ -84,33 +96,32 @@ public interface IGenTableService { /** * 生成代码(下载方式) * - * @param tableName 表名称 + * @param tableId 表名称 * @return 数据 */ - byte[] downloadCode(String tableName); + byte[] downloadCode(Long tableId); /** * 生成代码(自定义路径) * - * @param tableName 表名称 - * @return 数据 + * @param tableId 表名称 */ - void generatorCode(String tableName); + void generatorCode(Long tableId); /** * 同步数据库 * - * @param tableName 表名称 + * @param tableId 表名称 */ - void synchDb(String tableName); + void synchDb(Long tableId); /** * 批量生成代码(下载方式) * - * @param tableNames 表数组 + * @param tableIds 表ID数组 * @return 数据 */ - byte[] downloadCode(String[] tableNames); + byte[] downloadCode(String[] tableIds); /** * 修改保存参数校验 diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/util/GenUtils.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/util/GenUtils.java index 0ea572ece..214b181d1 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/util/GenUtils.java +++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/util/GenUtils.java @@ -18,6 +18,7 @@ import java.util.Arrays; */ @NoArgsConstructor(access = AccessLevel.PRIVATE) public class GenUtils { + /** * 初始化表信息 */ @@ -102,7 +103,7 @@ public class GenUtils { } // 类型&性别字段设置下拉框 else if (StringUtils.endsWithIgnoreCase(columnName, "type") - || StringUtils.endsWithIgnoreCase(columnName, "sex")) { + || StringUtils.endsWithIgnoreCase(columnName, "sex")) { column.setHtmlType(GenConstants.HTML_SELECT); } // 图片字段设置图片上传控件 @@ -177,7 +178,6 @@ public class GenUtils { * * @param replacementm 替换值 * @param searchList 替换列表 - * @return */ public static String replaceFirst(String replacementm, String[] searchList) { String text = replacementm; diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/util/VelocityInitializer.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/util/VelocityInitializer.java index c15477abe..68773b2f4 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/util/VelocityInitializer.java +++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/util/VelocityInitializer.java @@ -1,9 +1,9 @@ package org.dromara.gen.util; -import org.dromara.common.core.constant.Constants; import lombok.AccessLevel; import lombok.NoArgsConstructor; import org.apache.velocity.app.Velocity; +import org.dromara.common.core.constant.Constants; import java.util.Properties; @@ -14,6 +14,7 @@ import java.util.Properties; */ @NoArgsConstructor(access = AccessLevel.PRIVATE) public class VelocityInitializer { + /** * 初始化vm方法 */ @@ -30,4 +31,5 @@ public class VelocityInitializer { throw new RuntimeException(e); } } + } diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/util/VelocityUtils.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/util/VelocityUtils.java index 2f736f16e..1e00d5899 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/util/VelocityUtils.java +++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/util/VelocityUtils.java @@ -3,7 +3,6 @@ package org.dromara.gen.util; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.lang.Dict; -import cn.hutool.core.util.ObjectUtil; import lombok.AccessLevel; import lombok.NoArgsConstructor; import org.apache.velocity.VelocityContext; @@ -18,7 +17,7 @@ import org.dromara.gen.domain.GenTableColumn; import java.util.*; /** - * 模板工具类 + * 模板处理工具类 * * @author ruoyi */ @@ -75,9 +74,6 @@ public class VelocityUtils { if (GenConstants.TPL_TREE.equals(tplCategory)) { setTreeVelocityContext(velocityContext, genTable); } - if (GenConstants.TPL_SUB.equals(tplCategory)) { - setSubVelocityContext(velocityContext, genTable); - } return velocityContext; } @@ -107,33 +103,16 @@ public class VelocityUtils { } } - public static void setSubVelocityContext(VelocityContext context, GenTable genTable) { - GenTable subTable = genTable.getSubTable(); - String subTableName = genTable.getSubTableName(); - String subTableFkName = genTable.getSubTableFkName(); - String subClassName = genTable.getSubTable().getClassName(); - String subTableFkClassName = StringUtils.convertToCamelCase(subTableFkName); - - context.put("subTable", subTable); - context.put("subTableName", subTableName); - context.put("subTableFkName", subTableFkName); - context.put("subTableFkClassName", subTableFkClassName); - context.put("subTableFkclassName", StringUtils.uncapitalize(subTableFkClassName)); - context.put("subClassName", subClassName); - context.put("subclassName", StringUtils.uncapitalize(subClassName)); - context.put("subImportList", getImportList(genTable.getSubTable())); - } - /** * 获取模板信息 * * @return 模板列表 */ public static List getTemplateList(String tplCategory) { - List templates = new ArrayList<>(); + List templates = new ArrayList(); templates.add("vm/java/domain.java.vm"); - templates.add("vm/java/bo.java.vm"); templates.add("vm/java/vo.java.vm"); + templates.add("vm/java/bo.java.vm"); templates.add("vm/java/mapper.java.vm"); templates.add("vm/java/service.java.vm"); templates.add("vm/java/serviceImpl.java.vm"); @@ -146,14 +125,12 @@ public class VelocityUtils { } else { templates.add("vm/sql/sql.vm"); } - templates.add("vm/js/api.js.vm"); + templates.add("vm/ts/api.ts.vm"); + templates.add("vm/ts/types.ts.vm"); if (GenConstants.TPL_CRUD.equals(tplCategory)) { templates.add("vm/vue/index.vue.vm"); } else if (GenConstants.TPL_TREE.equals(tplCategory)) { templates.add("vm/vue/index-tree.vue.vm"); - } else if (GenConstants.TPL_SUB.equals(tplCategory)) { - templates.add("vm/vue/index.vue.vm"); - templates.add("vm/java/sub-domain.java.vm"); } return templates; } @@ -186,9 +163,7 @@ public class VelocityUtils { if (template.contains("bo.java.vm")) { fileName = StringUtils.format("{}/domain/bo/{}Bo.java", javaPath, className); } - if (template.contains("sub-domain.java.vm") && StringUtils.equals(GenConstants.TPL_SUB, genTable.getTplCategory())) { - fileName = StringUtils.format("{}/domain/{}.java", javaPath, genTable.getSubTable().getClassName()); - } else if (template.contains("mapper.java.vm")) { + if (template.contains("mapper.java.vm")) { fileName = StringUtils.format("{}/mapper/{}Mapper.java", javaPath, className); } else if (template.contains("service.java.vm")) { fileName = StringUtils.format("{}/service/I{}Service.java", javaPath, className); @@ -200,8 +175,10 @@ public class VelocityUtils { fileName = StringUtils.format("{}/{}Mapper.xml", mybatisPath, className); } else if (template.contains("sql.vm")) { fileName = businessName + "Menu.sql"; - } else if (template.contains("api.js.vm")) { - fileName = StringUtils.format("{}/api/{}/{}.js", vuePath, moduleName, businessName); + } else if (template.contains("api.ts.vm")) { + fileName = StringUtils.format("{}/api/{}/{}/index.ts", vuePath, moduleName, businessName); + } else if (template.contains("types.ts.vm")) { + fileName = StringUtils.format("{}/api/{}/{}/types.ts", vuePath, moduleName, businessName); } else if (template.contains("index.vue.vm")) { fileName = StringUtils.format("{}/views/{}/{}/index.vue", vuePath, moduleName, businessName); } else if (template.contains("index-tree.vue.vm")) { @@ -229,14 +206,11 @@ public class VelocityUtils { */ public static HashSet getImportList(GenTable genTable) { List columns = genTable.getColumns(); - GenTable subGenTable = genTable.getSubTable(); HashSet importList = new HashSet<>(); - if (ObjectUtil.isNotNull(subGenTable)) { - importList.add("java.util.List"); - } for (GenTableColumn column : columns) { if (!column.isSuperColumn() && GenConstants.TYPE_DATE.equals(column.getJavaType())) { importList.add("java.util.Date"); + importList.add("com.fasterxml.jackson.annotation.JsonFormat"); } else if (!column.isSuperColumn() && GenConstants.TYPE_BIGDECIMAL.equals(column.getJavaType())) { importList.add("java.math.BigDecimal"); } @@ -254,24 +228,20 @@ public class VelocityUtils { List columns = genTable.getColumns(); Set dicts = new HashSet<>(); addDicts(dicts, columns); - if (ObjectUtil.isNotNull(genTable.getSubTable())) { - List subColumns = genTable.getSubTable().getColumns(); - addDicts(dicts, subColumns); - } return StringUtils.join(dicts, ", "); } /** * 添加字典列表 * - * @param dicts 字典列表 + * @param dicts 字典列表 * @param columns 列集合 */ public static void addDicts(Set dicts, List columns) { for (GenTableColumn column : columns) { if (!column.isSuperColumn() && StringUtils.isNotEmpty(column.getDictType()) && StringUtils.equalsAny( - column.getHtmlType(), - new String[] { GenConstants.HTML_SELECT, GenConstants.HTML_RADIO, GenConstants.HTML_CHECKBOX })) { + column.getHtmlType(), + new String[] { GenConstants.HTML_SELECT, GenConstants.HTML_RADIO, GenConstants.HTML_CHECKBOX })) { dicts.add("'" + column.getDictType() + "'"); } } @@ -296,7 +266,7 @@ public class VelocityUtils { */ public static String getParentMenuId(Dict paramsObj) { if (CollUtil.isNotEmpty(paramsObj) && paramsObj.containsKey(GenConstants.PARENT_MENU_ID) - && StringUtils.isNotEmpty(paramsObj.getStr(GenConstants.PARENT_MENU_ID))) { + && StringUtils.isNotEmpty(paramsObj.getStr(GenConstants.PARENT_MENU_ID))) { return paramsObj.getStr(GenConstants.PARENT_MENU_ID); } return DEFAULT_PARENT_MENU_ID; diff --git a/ruoyi-modules/ruoyi-gen/src/main/resources/mapper/generator/GenTableColumnMapper.xml b/ruoyi-modules/ruoyi-gen/src/main/resources/mapper/generator/GenTableColumnMapper.xml index 75e1e19a8..a8be365d6 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/resources/mapper/generator/GenTableColumnMapper.xml +++ b/ruoyi-modules/ruoyi-gen/src/main/resources/mapper/generator/GenTableColumnMapper.xml @@ -4,59 +4,37 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - - - - - - - - - - - - - - - - - - - - - - - + + diff --git a/ruoyi-modules/ruoyi-gen/src/main/resources/mapper/generator/GenTableMapper.xml b/ruoyi-modules/ruoyi-gen/src/main/resources/mapper/generator/GenTableMapper.xml index 2ebcc5723..3f4f0cefd 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/resources/mapper/generator/GenTableMapper.xml +++ b/ruoyi-modules/ruoyi-gen/src/main/resources/mapper/generator/GenTableMapper.xml @@ -4,53 +4,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + - select table_name, table_comment, create_time, update_time from information_schema.tables where table_name NOT LIKE 'xxl_job_%' and table_name NOT LIKE 'gen_%' and table_schema = (select database()) and table_name in - #{name} + #{name} @@ -126,7 +102,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and dt.table_name = uo.object_name and uo.object_type = 'TABLE' AND dt.table_name NOT LIKE 'XXL_JOB_%' AND dt.table_name NOT LIKE 'GEN_%' - AND dt.table_name NOT IN (select table_name from gen_table) and lower(dt.table_name) in #{name} @@ -136,9 +111,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select table_name, table_comment, create_time, update_time from ( SELECT c.relname AS table_name, - obj_description(c.oid) AS table_comment, - CURRENT_TIMESTAMP AS create_time, - CURRENT_TIMESTAMP AS update_time + obj_description(c.oid) AS table_comment, + CURRENT_TIMESTAMP AS create_time, + CURRENT_TIMESTAMP AS update_time FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace WHERE (c.relkind = ANY (ARRAY ['r'::"char", 'p'::"char"])) @@ -152,9 +127,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{name} - + - select table_name, table_comment, create_time, update_time from information_schema.tables where table_name NOT LIKE 'xxl_job_%' and table_name NOT LIKE 'gen_%' and table_schema = (select database()) @@ -174,9 +149,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select table_name, table_comment, create_time, update_time from ( SELECT c.relname AS table_name, - obj_description(c.oid) AS table_comment, - CURRENT_TIMESTAMP AS create_time, - CURRENT_TIMESTAMP AS update_time + obj_description(c.oid) AS table_comment, + CURRENT_TIMESTAMP AS create_time, + CURRENT_TIMESTAMP AS update_time FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace WHERE (c.relkind = ANY (ARRAY ['r'::"char", 'p'::"char"])) @@ -187,30 +162,33 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where table_name NOT LIKE 'xxl_job_%' and table_name NOT LIKE 'gen_%' and table_name = #{tableName} - + - + - + - + +