@@ -1,5 +1,6 @@ | |||||
package com.qmrz.generator; | package com.qmrz.generator; | ||||
import com.qmrz.exception.ABException; | |||||
import com.qmrz.service.TableService; | import com.qmrz.service.TableService; | ||||
import com.qmrz.utils.CGHelper; | import com.qmrz.utils.CGHelper; | ||||
import com.qmrz.utils.Fn; | import com.qmrz.utils.Fn; | ||||
@@ -7,6 +8,7 @@ import com.qmrz.utils.MapUtil; | |||||
import com.qmrz.utils.SpringContextUtil; | import com.qmrz.utils.SpringContextUtil; | ||||
import org.apache.commons.lang.StringUtils; | import org.apache.commons.lang.StringUtils; | ||||
import java.util.ArrayList; | |||||
import java.util.List; | import java.util.List; | ||||
import java.util.Map; | import java.util.Map; | ||||
import java.util.stream.Collectors; | import java.util.stream.Collectors; | ||||
@@ -28,17 +30,53 @@ public class MapperGenerator { | |||||
List<Map> tableList = tableService.getTableList(dbName); | List<Map> tableList = tableService.getTableList(dbName); | ||||
List<Map> columnList = tableService.getColumnList(dbName); | List<Map> columnList = tableService.getColumnList(dbName); | ||||
Map result = columnList.stream().collect(Collectors.groupingBy(map -> map.get("table_name"), Collectors.toList())); | |||||
Map<String, List<Map>> result = columnList.stream().collect(Collectors.groupingBy(map -> Fn.toString(map.get("table_name")), Collectors.toList())); | |||||
CGHelper cgHelper = new CGHelper("mapper.ftl", dbName); | |||||
CGHelper cgHelper = new CGHelper("mapper2.ftl", dbName); | |||||
tableList.forEach(item -> { | tableList.forEach(item -> { | ||||
String table_name = item.get("table_name").toString(); | String table_name = item.get("table_name").toString(); | ||||
String table_name2 = Fn.firstUpperCase(table_name); | String table_name2 = Fn.firstUpperCase(table_name); | ||||
item.put("columnList", result.get(table_name)); | |||||
List<Map> tmpColumnList = result.get(table_name); | |||||
List<String> orderByList = new ArrayList<>(); | |||||
tmpColumnList.stream().filter(i -> { | |||||
String tmpColumnName = Fn.toString(i.get("column_name")); | |||||
if ("createdatetime".equals(tmpColumnName)) { | |||||
orderByList.add("t."+tmpColumnName + " desc"); | |||||
return true; | |||||
} | |||||
return false; | |||||
}).findFirst(); | |||||
StringBuilder primaryKeyName = new StringBuilder(); | |||||
tmpColumnList.stream().filter(i -> { | |||||
if ("PRI".equals(Fn.toString(i.get("column_key")))) { | |||||
orderByList.add("t."+Fn.toString(i.get("column_name")) + " desc"); | |||||
primaryKeyName.append(Fn.toString(i.get("column_name"))); | |||||
return true; | |||||
} | |||||
return false; | |||||
}).findFirst(); | |||||
if (primaryKeyName.length() == 0) { | |||||
throw new ABException("表 " + table_name + " 没有主键"); | |||||
} | |||||
String orderBy = ""; | |||||
if (orderByList.size() > 0) { | |||||
orderBy = "order by " + String.join(",", orderByList); | |||||
} | |||||
item.put("columnList", tmpColumnList); | |||||
item.put("dbname", dbName); | item.put("dbname", dbName); | ||||
item.put("table_name2",table_name2);//首字母大写 | |||||
cgHelper.generator("mapper", table_name2 + "Mapper.xml", item); | |||||
item.put("table_name2", table_name2);//首字母大写 | |||||
item.put("orderBy", orderBy); | |||||
item.put("primaryKeyName", primaryKeyName.toString()); | |||||
cgHelper.generator("mapper2", table_name2 + "Mapper.xml", item); | |||||
}); | }); | ||||
} | } | ||||
} | } |
@@ -0,0 +1,47 @@ | |||||
package com.qmrz.generator; | |||||
import com.qmrz.service.TableService; | |||||
import com.qmrz.utils.CGHelper; | |||||
import com.qmrz.utils.Fn; | |||||
import com.qmrz.utils.SpringContextUtil; | |||||
import java.util.Arrays; | |||||
import java.util.List; | |||||
import java.util.Map; | |||||
import java.util.stream.Collectors; | |||||
/** | |||||
* Service生成 | |||||
*/ | |||||
public class Service2Generator { | |||||
private TableService tableService; | |||||
private String dbName; | |||||
public Service2Generator(String dbName) { | |||||
tableService = SpringContextUtil.getBean(TableService.class); | |||||
this.dbName = dbName; | |||||
} | |||||
public void generator() { | |||||
List<Map> tableList = tableService.getTableList(dbName); | |||||
List<Map> columnList = tableService.getColumnList(dbName); | |||||
Map result = columnList.stream().collect(Collectors.groupingBy(map -> map.get("table_name"), Collectors.toList())); | |||||
CGHelper cgHelper = new CGHelper("service2.ftl", dbName); | |||||
tableList.forEach(item -> { | |||||
String table_name = item.get("table_name").toString(); | |||||
String table_name2 = Fn.firstUpperCase(table_name); | |||||
//去下划线且每个单词首字母大写 | |||||
table_name2 = Arrays.stream(table_name2.split("_")).map(Fn::firstUpperCase).collect(Collectors.joining()); | |||||
item.put("columnList", result.get(table_name)); | |||||
item.put("dbname", dbName); | |||||
item.put("table_name2",table_name2);//首字母大写 | |||||
cgHelper.generator("service2", table_name2 + "Service.java", item); | |||||
}); | |||||
} | |||||
} |
@@ -0,0 +1,47 @@ | |||||
package com.qmrz.generator; | |||||
import com.qmrz.service.TableService; | |||||
import com.qmrz.utils.CGHelper; | |||||
import com.qmrz.utils.Fn; | |||||
import com.qmrz.utils.SpringContextUtil; | |||||
import java.util.Arrays; | |||||
import java.util.List; | |||||
import java.util.Map; | |||||
import java.util.stream.Collectors; | |||||
/** | |||||
* ServiceImpl生成 | |||||
*/ | |||||
public class Service2ImplGenerator { | |||||
private TableService tableService; | |||||
private String dbName; | |||||
public Service2ImplGenerator(String dbName) { | |||||
tableService = SpringContextUtil.getBean(TableService.class); | |||||
this.dbName = dbName; | |||||
} | |||||
public void generator() { | |||||
List<Map> tableList = tableService.getTableList(dbName); | |||||
List<Map> columnList = tableService.getColumnList(dbName); | |||||
Map result = columnList.stream().collect(Collectors.groupingBy(map -> map.get("table_name"), Collectors.toList())); | |||||
CGHelper cgHelper = new CGHelper("service2Impl.ftl", dbName); | |||||
tableList.forEach(item -> { | |||||
String table_name = item.get("table_name").toString(); | |||||
String table_name2 = Fn.firstUpperCase(table_name); | |||||
//去下划线且每个单词首字母大写 | |||||
table_name2 = Arrays.stream(table_name2.split("_")).map(Fn::firstUpperCase).collect(Collectors.joining()); | |||||
item.put("columnList", result.get(table_name)); | |||||
item.put("dbname", dbName); | |||||
item.put("table_name2",table_name2);//首字母大写 | |||||
cgHelper.generator("service2Impl", table_name2 + "ServiceImpl.java", item); | |||||
}); | |||||
} | |||||
} |
@@ -12,9 +12,12 @@ spring: | |||||
db: | db: | ||||
driver: com.mysql.cj.jdbc.Driver | driver: com.mysql.cj.jdbc.Driver | ||||
# url: jdbc:mysql://qmrz.cpowvfndzbei.rds.cn-northwest-1.amazonaws.com.cn:3306/qmrz?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC | # url: jdbc:mysql://qmrz.cpowvfndzbei.rds.cn-northwest-1.amazonaws.com.cn:3306/qmrz?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC | ||||
url: jdbc:mysql://qmrz-ga.cpowvfndzbei.rds.cn-northwest-1.amazonaws.com.cn:3306/qmrzga-dev?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC | |||||
# url: jdbc:mysql://qmrz-ga.cpowvfndzbei.rds.cn-northwest-1.amazonaws.com.cn:3306/qmrzga-dev?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC | |||||
# username: qmrz | |||||
# password: Qmrz2018 | |||||
url: jdbc:mysql://qmrz.cpowvfndzbei.rds.cn-northwest-1.amazonaws.com.cn:3306/ga-users-dev?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC | |||||
username: qmrz | username: qmrz | ||||
password: Qmrz2018 | |||||
password: Qmrz2018.x | |||||
logging: | logging: | ||||
level: | level: | ||||
@@ -0,0 +1,96 @@ | |||||
<?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"> | |||||
<!-- | |||||
${table_name}(${table_comment}) | |||||
注意:分隔线以下 不增加业务,有新增自定义业务时加到分隔线上面 | |||||
--> | |||||
<mapper namespace="com.qmrz.domain.mapper.${table_name2}Mapper"> | |||||
<!-- ========================= 分隔线以下为生成的通用代码 ========================= --> | |||||
<!-- | |||||
注意: | |||||
1、增加条件必须增加 _parameter.containsKey | |||||
2、修改字段手动更改此文件,不推荐重新生成后全部覆盖 | |||||
--> | |||||
<!-- 通用查询条件 --> | |||||
<sql id="common_where"> | |||||
<#list columnList as item> | |||||
<if test="_parameter.containsKey('where_${item.column_name}')">and t.${item.column_name} = ${"#"}{where_${item.column_name}}</if> | |||||
</#list> | |||||
<#list columnList as item> | |||||
<if test="_parameter.containsKey('like_${item.column_name}')">and t.${item.column_name} like concat('%',${"#"}{like_${item.column_name}},'%')</if> | |||||
</#list> | |||||
<if test="_parameter.containsKey('list_${primaryKeyName}')"> | |||||
and t.${primaryKeyName} in | |||||
<foreach collection="list_${primaryKeyName}" item="item" open="(" separator="," close=")"> | |||||
${"#"}{item} | |||||
</foreach> | |||||
</if> | |||||
</sql> | |||||
<!-- 通用查询记录 --> | |||||
<select id="selectList" resultType="java.util.LinkedHashMap"> | |||||
select <#list columnList as item>t.${item.column_name}<#if item_has_next>,</#if></#list> | |||||
from ${table_name} t | |||||
<where> | |||||
<include refid="common_where" /> | |||||
</where> | |||||
${orderBy} | |||||
<if test="_parameter.containsKey('__limit__')"> | |||||
<#noparse>limit #{__limit__}</#noparse> | |||||
</if> | |||||
</select> | |||||
<!-- 通用查询记录总数 --> | |||||
<select id="selectCount" resultType="Integer"> | |||||
select count(0) as cou from ${table_name} t | |||||
<where> | |||||
<include refid="common_where" /> | |||||
</where> | |||||
</select> | |||||
<!-- 通用插入数据 --> | |||||
<insert id="insert"> | |||||
insert into ${table_name}( | |||||
<trim suffixOverrides=","> | |||||
<#list columnList as item> | |||||
<if test="_parameter.containsKey('${item.column_name}')">${item.column_name},</if> | |||||
</#list> | |||||
</trim>) | |||||
values( | |||||
<trim suffixOverrides=","> | |||||
<#list columnList as item> | |||||
<if test="_parameter.containsKey('${item.column_name}')">${"#"}{${item.column_name}},</if> | |||||
</#list> | |||||
</trim> | |||||
) | |||||
</insert> | |||||
<!-- 通用更新数据 --> | |||||
<update id="update"> | |||||
update ${table_name} t | |||||
<set> | |||||
<#list columnList as item> | |||||
<#if item.column_key?? && item.column_key!="PRI" || item.column_name?? && item.column_name != "id"> | |||||
<if test="_parameter.containsKey('${item.column_name}')">t.${item.column_name} = ${"#"}{${item.column_name}},</if> | |||||
</#if> | |||||
</#list> | |||||
</set> | |||||
<where> | |||||
<include refid="common_where" /> | |||||
</where> | |||||
</update> | |||||
<!-- 通用删除记录 --> | |||||
<delete id="delete"> | |||||
delete t from ${table_name} t | |||||
<where> | |||||
<include refid="common_where" /> | |||||
</where> | |||||
</delete> | |||||
</mapper> |
@@ -1,8 +1,5 @@ | |||||
package com.qmrz.service; | package com.qmrz.service; | ||||
import java.util.List; | |||||
import java.util.Map; | |||||
/** | /** | ||||
* ${table_name},${table_comment} | * ${table_name},${table_comment} | ||||
* Automatic generation | * Automatic generation | ||||
@@ -0,0 +1,10 @@ | |||||
package com.qmrz.service; | |||||
import com.qmrz.interfaces.baseservice.IServiceV2; | |||||
/** | |||||
* ${table_name},${table_comment} | |||||
*/ | |||||
public interface ${table_name2}Service extends IServiceV2 { | |||||
} |
@@ -0,0 +1,17 @@ | |||||
package com.qmrz.service.impl; | |||||
import com.qmrz.interfaces.baseservice.AbsServiceImplV2; | |||||
import com.qmrz.service.${table_name2}Service; | |||||
import lombok.extern.slf4j.Slf4j; | |||||
import org.springframework.stereotype.Service; | |||||
/** | |||||
* ${table_name},${table_comment} | |||||
*/ | |||||
@Slf4j | |||||
@Service | |||||
public class ${table_name2}ServiceImpl extends AbsServiceImplV2 implements ${table_name2}Service { | |||||
public ${table_name2}ServiceImpl(){ | |||||
super("${table_name}"); | |||||
} | |||||
} |
@@ -1,13 +1,9 @@ | |||||
package com.qmrz.service.impl; | package com.qmrz.service.impl; | ||||
import com.qmrz.service.${table_name2}Service; | import com.qmrz.service.${table_name2}Service; | ||||
import com.qmrz.utils.MapUtil; | |||||
import lombok.extern.slf4j.Slf4j; | import lombok.extern.slf4j.Slf4j; | ||||
import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||
import java.util.List; | |||||
import java.util.Map; | |||||
/** | /** | ||||
* ${table_name},${table_comment} | * ${table_name},${table_comment} | ||||
* Automatic generation | * Automatic generation | ||||
@@ -10,7 +10,9 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; | |||||
@RunWith(SpringJUnit4ClassRunner.class) | @RunWith(SpringJUnit4ClassRunner.class) | ||||
@SpringBootTest(classes = CodeGenerator.class) | @SpringBootTest(classes = CodeGenerator.class) | ||||
public class TestCodeGenerator { | public class TestCodeGenerator { | ||||
private String dbname="qmrzga-dev"; | |||||
// private String dbname="ga-dp-dev"; | |||||
private String dbname="psbd-dev"; | |||||
// private String dbname="ga-hotelmanage-dev"; | |||||
/** | /** | ||||
* 生成所有 | * 生成所有 | ||||
*/ | */ | ||||
@@ -18,13 +20,14 @@ public class TestCodeGenerator { | |||||
public void generatorAll() { | public void generatorAll() { | ||||
readme(); | readme(); | ||||
mapper(); | mapper(); | ||||
service(); | |||||
serviceImpl(); | |||||
// service(); | |||||
service2(); | |||||
// serviceImpl(); | |||||
service2Impl(); | |||||
controller(); | controller(); | ||||
interface2(); | interface2(); | ||||
} | } | ||||
/** | /** | ||||
* readme 生成 | * readme 生成 | ||||
*/ | */ | ||||
@@ -60,6 +63,15 @@ public class TestCodeGenerator { | |||||
generator.generator(); | generator.generator(); | ||||
} | } | ||||
/** | |||||
* service 生成 | |||||
*/ | |||||
@Test | |||||
public void service2() { | |||||
Service2Generator generator = new Service2Generator(dbname); | |||||
generator.generator(); | |||||
} | |||||
/** | /** | ||||
* serviceImpl 生成 | * serviceImpl 生成 | ||||
*/ | */ | ||||
@@ -69,6 +81,15 @@ public class TestCodeGenerator { | |||||
generator.generator(); | generator.generator(); | ||||
} | } | ||||
/** | |||||
* serviceImpl 生成 | |||||
*/ | |||||
@Test | |||||
public void service2Impl() { | |||||
Service2ImplGenerator generator = new Service2ImplGenerator(dbname); | |||||
generator.generator(); | |||||
} | |||||
/** | /** | ||||
* controller 生成 | * controller 生成 | ||||
*/ | */ | ||||
@@ -25,7 +25,7 @@ | |||||
<description>代码生成器</description> | <description>代码生成器</description> | ||||
<modules> | <modules> | ||||
<module>common</module> | <module>common</module> | ||||
<module>service</module> | |||||
<module>code-generator</module> | |||||
</modules> | </modules> | ||||
<!--<properties>--> | <!--<properties>--> | ||||