package com.micro.util;
import com.micro.contaxt.PrimaryKeyType;
import com.micro.entity.ColumnData;
import com.micro.entity.TableData;
import com.micro.model.ConvertType;
import org.springframework.util.StringUtils;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author JiaYue
* @date 2019/6/28 13:56
*/
public class GeneratorUtils {
public static Map<String, Object> getAutoCreateSql(TableData tableData, List<ColumnData> columnDataList,Integer primaryKeyType ,boolean isHump) throws Exception{
Map<String, Object> sqlMap = new HashMap(9);
String tableName = tableData.getTableName();
String columns = getColumnSplit(columnDataList);
String formatColumns = getFormatColumnSplit(columnDataList,isHump);
String[] columnList = getColumnList(columns);
String columnFields = getColumnFields(columns);
String insert = getInsertSql(tableName,columns,formatColumns,primaryKeyType);
String insertSelective = getInsertSelectiveSql(tableName,columnDataList,primaryKeyType,isHump);
String update = getUpdateSql(tableName,columnList,isHump);
String updateSelective = getUpdateSelectiveSql(tableName,columnDataList,isHump);
String selectById = getSelectByIdSql(tableName,columnList,isHump);
String delete = getDeleteSql(tableName,columnList,isHump);
sqlMap.put("columnList", columnList);
sqlMap.put("columnFields", columnFields);
sqlMap.put("insert", insert.replace("#{createTime}", "now()").replace("#{updateTime}", "now()"));
sqlMap.put("insertSelective", insertSelective.replace("#{createTime}", "now()").replace("#{updateTime}", "now()"));
sqlMap.put("update", update.replace("#{createTime}", "now()").replace("#{updateTime}", "now()"));
sqlMap.put("delete", delete);
sqlMap.put("updateSelective", updateSelective);
sqlMap.put("selectById", selectById);
sqlMap.put("keyName", formatCloumnName(columnList[0],isHump));
return sqlMap;
}
/**
* 添加UUID类型主键插入语句前缀
* @param insertSql 原插入语句
* @return 格式化后语句
*/
private static String addUuidInsertPrefix(String insertSql){
StringBuilder uuidPrefix = new StringBuilder();
uuidPrefix.append("<selectKey resultType=\"java.lang.String\" keyProperty=\"activityId\" order=\"BEFORE\" >\n")
.append("\t\t\tselect UUID()\n")
.append("\t\t</selectKey>\n");
return uuidPrefix.append(insertSql).toString();
}
/**
* 添加SnowFlake类型主键插入语句前缀
* @param insertSql 原插入语句
* @return 格式化后语句
*/
private static String addSnowFlakePrefix(String insertSql){
StringBuilder snowFlakePrefix = new StringBuilder();
snowFlakePrefix.append("<selectKey resultType=\"java.lang.Long\" keyProperty=\"activityId\" order=\"BEFORE\" >\n")
.append("\t\t\tselect ${@com.micro.generate.util.SnowFlakeUtils@getId()}\n")
.append("\t\t</selectKey>\n");
return snowFlakePrefix.append(insertSql).toString();
}
/**
* 生成插入语句
* @param tableName 表名
* @param columns 带分隔符的列字符串
* @param formatColumns 格式化后带分隔符的列字符串
* @param primaryKeyType 主键类型
* @return 格式化后语句
*/
private static String getInsertSql(String tableName, String columns, String formatColumns, Integer primaryKeyType){
String insert = null;
if (PrimaryKeyType.getPrimaryKeyType(primaryKeyType) == PrimaryKeyType.UUID){
insert = "\t\tinsert into " + tableName + "(" + columns.replaceAll("\\|", ",") + ")\n \t\tvalues(#{" + formatColumns.replaceAll("\\|", "},#{") + "})";
insert = addUuidInsertPrefix(insert);
} else if (PrimaryKeyType.getPrimaryKeyType(primaryKeyType) == PrimaryKeyType.SNOW_FLAKE){
insert = "\t\tinsert into " + tableName + "(" + columns.replaceAll("\\|", ",") + ")\n \t\tvalues(#{" + formatColumns.replaceAll("\\|", "},#{") + "})";
insert = addSnowFlakePrefix(insert);
} else {
insert = "insert into " + tableName + "(" + columns.replaceAll("\\|", ",") + ")\n \t\tvalues(#{" + formatColumns.replaceAll("\\|", "},#{") + "})";
}
return insert;
}
/**
* 生成非必填参数的插入语句
* @param tableName 表名
* @param columnList 列数据集
* @param primaryKeyType 主键类型
* @param isHump 是否驼峰命名
* @return 格式化后的语句
* @throws SQLException
*/
private static String getInsertSelectiveSql(String tableName, List<ColumnData> columnList, Integer primaryKeyType, boolean isHump) throws SQLException {
StringBuffer columns = new StringBuffer();
StringBuffer values = new StringBuffer();
String format = "\t\t";
columns.append(format+"<trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\" >\n");
values.append(format+"<trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\" >\n");
for (int i = 0; i < columnList.size(); i++) {
ColumnData data = (ColumnData) columnList.get(i);
String columnName = data.getColumnName();
columns.append(format+"\t<if test=\"").append(formatCloumnName(columnName,isHump)).append(" != null ");
values.append(format+"\t<if test=\"").append(formatCloumnName(columnName,isHump)).append(" != null ");
if ("String" == data.getDataType()) {
columns.append(" and ").append(formatCloumnName(columnName,isHump)).append(" != ''");
values.append(" and ").append(formatCloumnName(columnName,isHump)).append(" != ''");
}
columns.append(" \">\n"+format+format);
values.append(" \">\n"+format+format);
columns.append(columnName + ",\n");
values.append("#{" + formatCloumnName(columnName,isHump) + "},\n");
columns.append(format+"\t</if>\n");
values.append(format+"\t</if>\n");
}
columns.append(format+"</trim>");
values.append(format+"</trim>");
String insert = null;
if (PrimaryKeyType.getPrimaryKeyType(primaryKeyType) == PrimaryKeyType.UUID){
insert = "\t\tinsert into " + tableName + "\n"+columns.toString() +"\n"+values.toString();
insert = addUuidInsertPrefix(insert);
} else if (PrimaryKeyType.getPrimaryKeyType(primaryKeyType) == PrimaryKeyType.SNOW_FLAKE){
insert = "\t\tinsert into " + tableName + "\n"+columns.toString() +"\n"+values.toString();
insert = addSnowFlakePrefix(insert);
} else {
insert = "insert into " + tableName + "\n"+columns.toString() +"\n"+values.toString();
}
return insert;
}
/**
* 生成更新语句
* @param tableName 表名
* @param columnsList 列数据集
* @param isHump 是否驼峰命名
* @return 格式化后的语句
* @throws SQLException
*/
private static String getUpdateSql(String tableName, String[] columnsList, boolean isHump) throws SQLException {
StringBuffer sb = new StringBuffer();
for (int i = 1; i < columnsList.length; i++) {
String column = columnsList[i];
if (!"CREATETIME".equals(column.toUpperCase())) {
if ("UPDATETIME".equals(column.toUpperCase())) {
sb.append(column + "=now()");
} else {
sb.append(column + "=#{" + formatCloumnName(column,isHump) + "}");
}
if (i + 1 < columnsList.length) {
没有合适的资源?快使用搜索试试~ 我知道了~
基于SpringBoot的Freemarker模板代码生成器.rar
共39个文件
java:24个
xml:5个
ftl:3个
需积分: 42 20 下载量 57 浏览量
2019-09-03
15:14:54
上传
评论 1
收藏 45KB RAR 举报
温馨提示
项目下载后自行修改application-dev.yml和jdbc.properties中的数据库链接。 启动项目后进入http://xxxx.xxxx.xxxx:xxx/swagger-ui.html查看相关接口,支持通过接口设置数据库链接切换后自动重启项目,代码生成器支持model、Mapper、Dao层生成后会打包成Zip文件提供下载。
资源推荐
资源详情
资源评论
收起资源包目录
模板代码生成器.rar (39个子文件)
模板代码生成器
micro-common-tools
HELP.md 196B
LICENSE 11KB
pom.xml 5KB
.gitignore 364B
micro-code-generate
src
assembly
conf
assembly-config.xml 3KB
bin
bootstrap.sh 7KB
test
java
main
resources
application-dev.yml 598B
mapper
GenerateMapper.xml 3KB
jdbc.properties 39B
logback-spring.xml 2KB
templates
DaoTemplate.ftl 853B
MapperTemplate.ftl 2KB
EntityTemplate.ftl 207B
static
com
micro
application.yml 426B
java
com
micro
contaxt
PrimaryKeyType.java 1KB
NamingType.java 1KB
service
impl
GenerateServiceImpl.java 11KB
GenerateService.java 1KB
CodeGenerateApplication.java 896B
aspect
ApiAspect.java 4KB
model
ConvertType.java 200B
controller
DaoGenerateController.java 4KB
exception
MicroException.java 554B
MicroExceptionHandler.java 825B
ErrorState.java 2KB
dao
GenerateDao.java 1KB
util
GeneratorUtils.java 23KB
PinyinUtil.java 4KB
ZipUtils.java 3KB
LogAopUtil.java 6KB
NetworkUtil.java 2KB
ResponseResult.java 4KB
SnowFlakeUtils.java 2KB
configuration
DataSourceConfig.java 3KB
SwaggerConfiguration.java 1KB
entity
ColumnData.java 942B
TableData.java 306B
IndexData.java 277B
pom.xml 3KB
共 39 条
- 1
资源评论
qq956019571
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- HCIP-Datacom笔记 (1).pdf
- yolov5,SSD 可能使用到的一些代码
- bbbbbbbbbbbbbbbbbb
- 安卓逆向学习笔记之Frida Stalker 还原OLLVM AES.docx
- 安卓逆向学习笔记之unicorn来trace还原OLLVM Base64.docx
- 最新版本私钥助记词碰撞器大富豪使用python进行制作通过接口的方式进行验证支持多币种多链多网络一分钟万次验证高出货率
- 介绍离散性制造行业的MES系统流程
- Arduino IDE压缩包版本,2024年4月26日,最新版本
- 基于IDEA-CCNL/Randeng-Pegasus-238M-Summary-Chines微调的中文文本摘要任务源码+数据集
- 自动驾驶-状态估计和定位之直方图滤波(Histogram+Filter)定位应用和源码.pdf
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功