自己手写一个代码生成器(java)
新建一个maven项目,pom文件引入依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>daimashengcheng</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.0.3</version>
</dependency>
<!-- Mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>com.github.miemiedev</groupId>
<artifactId>mybatis-paginator</artifactId>
<version>1.2.17</version>
</dependency>
<!-- MySql -->
<!-- <dependency>-->
<!-- <groupId>mysql</groupId>-->
<!-- <artifactId>mysql-connector-java</artifactId>-->
<!-- <version>5.1.30</version>-->
<!-- </dependency>-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>6.2.2.jre8</version>
</dependency>
<!-- 连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.5</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-solr</artifactId>
<version>1.5.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.5.0.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<!--mybatis代码自动生成插件-->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.6</version>
<configuration>
<!--配置文件的位置-->
<configurationFile>GeneratorMapper.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
</plugins>
</build>
</project>
1.创建代码自动生成配置类(ConfigCode)
package util;
import java.util.List;
import java.util.Map;
public class ConfigCode {
//数据库连接
public static String driver = "com.mysql.jdbc.Driver";
public static String mysqlUrl = "jdbc:mysql://localhost:3306/bi?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT";
public static String userName = "root";
public static String passWord = "root";
//实体类生成位置
public static String entityPackName = "com.test.entity";
//XML生成位置
public static String mapperPackName = "mapper.basic";
//dao生成位置
public static String daoPackName = "com.test.mapper.basic";
//service生成位置
public static String servicePackName = "com.test.service.basic";
//serviceImpl生成位置
public static String serviceImplPackName = "com.test.service.basic.impl";
//controlelr生成位置
public static String controlelrPackName = "com.test.controller.basic";
//生成文件的编码
public static String BaseCode = "UTF-8";
//作者
public static String author = "zwb";
//数据库表-实体类名称
public static String[] data = {"user,UserPo","role,RolePo"};
}
2.创建代码自动生成模板类(CodeTemplate)
package util;
public class CodeTemplate {
public static String entityTemplate = "package ${[packageName]};\n" +
"\n" +
"import lombok.Data;\n" +
"\n" +
"import java.io.Serializable;\n"+
"import java.util.Date;\n"+
"import java.math.BigDecimal;\n" +
"\n" +
"/**\n" +
" * @author ${[author]}\n" +
" * 实体类 \n" +
" */ \n"+
"@Data\n"+
"public class ${[entityName]} implements Serializable {\n" +
" ${[body]}\n" +
"}\n";
public static String daoTemplate = "package ${[packageName]};\n" +
"\n" +
"import ${[entityPackName]}\n" +
"import org.apache.ibatis.annotations.Mapper;\n" +
"import java.util.List;\n" +
"import org.apache.ibatis.annotations.Param;;\n" +
"\n" +
"/**\n" +
" * @author ${[author]}\n" +
" * dao层 \n" +
" */ \n"+
"@Mapper\n" +
"public interface ${[daoName]} {\n" +
"\n" +
" List<${[tableName]}> findList();\n" +
"\n" +
" Integer findCount();\n" +
"\n" +
" int deleteByPrimaryKey(${[keyType]} ${[keyValue]});\n" +
"\n" +
" int insert(${[tableName]} ${[tableVal]});\n" +
"\n" +
" int insertSelective(${[tableName]} ${[tableVal]});\n" +
"\n" +
" int createAll(@Param(\"list\") List<${[tableName]}> list);\n" +
"\n" +
" ${[tableName]} selectByPrimaryKey(${[keyType]} ${[keyValue]});\n" +
"\n" +
" int updateByPrimaryKeySelective(${[tableName]} ${[tableVal]});\n" +
"\n" +
" int updateByPrimaryKey(${[tableName]} ${[tableVal]});\n"+
"}";
public static String mapperTemplate ="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">\n" +
"<mapper namespace=\"${[daoPackName]}\">\n" +
"\n" +
" <sql id=\"Base_Column_List\">\n" +
" ${[cloums]}\n" +
" </sql>\n"+
"\n"+
" <select id=\"findList\" resultType=\"${[entityPackName]}\">\n" +
" select\n" +
" <include refid=\"Base_Column_List\" />\n" +
" from ${[entityName]}\n" +
" <where>\n" +
" <include refid=\"sqlBlack\"></include>\n" +
" </where>\n" +
" </select>\n"+
"\n"+
" <select id=\"findCount\" resultType=\"java.lang.Integer\">\n" +
" select\n" +
" count(*)\n" +
" from ${[entityName]}\n" +
" <where>\n" +
" <include refid=\"sqlBlack\"></include>\n" +
" </where>\n" +
" </select>\n"+
"\n" +
" <select id=\"selectByPrimaryKey\" parameterType=\"java.lang.${[type]}\" resultType=\"${[entityPackName]}\">\n" +
" select\n" +
" <include refid=\"Base_Column_List\" />\n" +
" from ${[entityName]}\n" +
" where ${[tOne]} = #{${[one]}}\n" +
" </select>\n"+
"\n"+
" <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.${[type]}\">\n" +
" delete from ${[entityName]}\n" +
" where ${[tOne]} = #{${[one]}}\n" +
" </delete>\n"+
"\n"+
" <insert id=\"insert\" parameterType=\"${[entityPackName]}\">\n" +
" insert into ${[entityName]} \n" +
" (${[cloums]})\n" +
" values \n" +
" (${[tCloums]})\n" +
" </insert>\n"+
"\n"+
" <insert id=\"createAll\" parameterType=\"java.util.List\">\n" +
" insert into ${[entityName]} \n" +
" (${[cloums]})\n" +
" values \n" +
" <foreach collection=\"list\" item=\"item\" index=\"index\" separator=\",\">\n"+
" (${[itemTCloums]})\n" +
" </foreach>\n"+
" </insert>\n"+
"\n"+
" <insert id=\"insertSelective\" parameterType=\"${[entityPackName]}\">\n" +
" insert into ${[entityName]}\n" +
" <trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">\n" +
"${[addUp]}"+
" </trim>\n" +
" <trim prefix=\"values (\" suffix=\")\" suffixOverrides=\",\">\n" +
"${[addBlw]}"+
" </trim>\n" +
" </insert>\n"+
"\n"+
" <update id=\"updateByPrimaryKeySelective\" parameterType=\"${[entityPackName]}\">\n" +
" update ${[entityName]}\n" +
" <set>\n" +
"${[updData]}"+
" </set>\n" +
" where ${[tOne]} = #{${[one]}}\n" +
" </update>\n"+
"\n"+
" <update id=\"updateByPrimaryKey\" parameterType=\"${[entityPackName]}\">\n" +
" update ${[entityName]}\n" +
" set ${[updData2]}\n"+
" where ${[tOne]} = #{${[one]}}\n" +
" </update>\n"+
"\n"+
" <!--sql块 主要用于查询条件的判断和添加条件-->\n" +
" <sql id=\"sqlBlack\">\n" +
" \n" +
" </sql>\n" +
"</mapper>";
public static String serviceTemplate ="package ${[packageName]};\n" +
"\n" +
"import ${[entityPackName]};\n" +
"\n" +
"import java.util.*;\n" +
"\n" +
"\n" +
"/**\n" +
" * @author ${[author]}\n" +
" * service层 \n" +
" */ \n"+
"public interface ${[entityService]} {\n" +
"\n" +
" Map<String,Object> findAll();\n" +
"\n" +
" ${[tableName]} findById(${[type]} ${[cloum]});\n" +
"\n" +
" int add(${[tableName]} ${[tableVal]});\n" +
"\n" +
" int upd(${[tableName]} ${[tableVal]});\n" +
"\n" +
" int del(${[type]} ${[cloum]});\n" +
"}\n";
public static String serviceImplTemplate = "package ${[packageName]};\n" +
"\n" +
"import ${[entityPackName]};\n" +
"import ${[daoPackName]};\n" +
"import ${[servicePackName]};\n" +
"import org.springframework.beans.factory.annotation.Autowired;\n" +
"import org.springframework.stereotype.Service;\n" +
"\n" +
"import java.util.*;\n" +
"/**\n" +
" * @author ${[author]}\n" +
" * serviceImpl层 \n" +
" */\n" +
"@Service\n" +
"public class ${[serviceImplName]} implements ${[serviceName]}{\n" +
"\n" +
" @Autowired\n" +
" private ${[daoName]} ${[daoVal]};\n" +
"\n" +
" public Map<String,Object> findAll() {\n" +
" Map<String,Object> map = new HashMap();\n" +
" int count = ${[daoVal]}.findCount();\n" +
" List<${[tableName]}> list = ${[daoVal]}.findList();\n" +
" map.put(\"count\",count);\n" +
" map.put(\"list\",list);\n" +
" return map;\n" +
" }\n" +
"\n" +
" public ${[tableName]} findById(${[type]} ${[cloum]}) {\n" +
" return ${[daoVal]}.selectByPrimaryKey(${[cloum]});\n" +
" }\n" +
"\n" +
" public int add(${[tableName]} ${[tableVal]}) {\n" +
" return ${[daoVal]}.insertSelective(${[tableVal]});\n" +
" }\n" +
"\n" +
" public int upd(${[tableName]} ${[tableVal]}) {\n" +
" return ${[daoVal]}.updateByPrimaryKeySelective(${[tableVal]});\n" +
" }\n" +
"\n" +
" public int del(${[type]} ${[cloum]}) {\n" +
" return ${[daoVal]}.deleteByPrimaryKey(${[cloum]});\n" +
" }\n" +
"}\n";
public static String controllerTemplate = "package ${[packageName]};\n" +
"\n" +
"import ${[entityPackName]};\n" +
"import ${[servicePackName]};\n" +
"import org.springframework.beans.factory.annotation.Autowired;\n" +
"import org.springframework.web.bind.annotation.*;\n" +
"\n" +
"import java.util.*;\n" +
"\n" +
"/**\n" +
" * @author ${[author]}\n" +
" * controller层 \n" +
" */ \n"+
"@RequestMapping(\"/${[controllerVal]}\")\n" +
"@RestController\n" +
"public class ${[controllerName]} {\n" +
" @Autowired\n" +
" private ${[serviceName]} ${[serviceVal]};\n" +
"\n" +
" @GetMapping(\"/findAll\")\n" +
" public Map<String,Object> findAll(){\n" +
" return ${[serviceVal]}.findAll();\n" +
" }\n" +
"\n" +
" @GetMapping(\"/findById/{${[cloum]}}\")\n" +
" public ${[entityName]} findById(@PathVariable(\"${[cloum]}\") ${[type]} ${[cloum]}){\n" +
" return ${[serviceVal]}.findById(${[cloum]});\n" +
" }\n" +
"\n" +
" @PostMapping(\"/add\")\n" +
" public void add(@RequestBody ${[entityName]} ${[tableVal]}){\n" +
" ${[serviceVal]}.add(${[tableVal]});\n" +
" }\n" +
"\n" +
" @PostMapping(\"/upd\")\n" +
" public void upd(@RequestBody ${[entityName]} ${[tableVal]}){\n" +
" ${[serviceVal]}.upd(${[tableVal]});\n" +
" }\n" +
"\n" +
" @GetMapping(\"/del/{${[cloum]}}\")\n" +
" public void del(@PathVariable(\"${[cloum]}\") ${[type]} ${[cloum]}){\n" +
" ${[serviceVal]}.del(${[cloum]});\n" +
" }\n" +
"}\n";
}
3.创建代码自动生成主类(CreateCode)
package util;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.common.TemplateParserContext;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import sun.security.krb5.Config;
import java.io.*;
import java.net.PortUnreachableException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.*;
public class CreateCode {
public static String packName="src/main/java/";
public static String packNames="src/main/resources/";
//内容替换
static ExpressionParser parser = new SpelExpressionParser();
static TemplateParserContext parserContext = new TemplateParserContext("${","}");
//根据路径内容生成文件
public static void createFile(String url,String body){
FileWriter fw = null;
try{
File file = new File(url);
if (!file.exists()){
file.createNewFile();
}
fw = new FileWriter(url);
// BufferedWriter bw=new BufferedWriter(fw);
OutputStreamWriter bw = new OutputStreamWriter(
new FileOutputStream(file), ConfigCode.BaseCode);
bw.write(body);
bw.close();
}catch (Exception e){
e.printStackTrace();
}finally{
try{
fw.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
//生成实体类
public static void initEntity(String packName,String entityPackName,Map<String,List<Map>> listLinkedHashMap){
File file = new File( packName+entityPackName.replaceAll("\\.","/"));
if (!file .exists() && !file .isDirectory()) {
file .mkdirs();
}
for(Map.Entry<String,List<Map>> entry:listLinkedHashMap.entrySet()){
String tableName = entry.getKey();
//生成路径
String url = packName+entityPackName.replaceAll("\\.","/")+"/"+tableName+".java";
Map map = new HashMap();
map.put("author",ConfigCode.author);
map.put("packageName",entityPackName);
map.put("entityName",tableName);
String body = "\n";
List<Map> list = entry.getValue();
if (list!=null&&list.size()>0){
for (Map maps : list) {
body+= " /**\n" +
" *"+maps.get("annotation")+"\n" +
" */\n" +
" private "+maps.get("type")+" "+maps.get("cloum")+";\n\n";
}
}
map.put("body",body);
String entity = CodeTemplate.entityTemplate;
String content = parser.parseExpression(entity,parserContext).getValue(map, String.class);
createFile(url,content);
}
}
//生成dao
public static void initDao(String packName,String daoPackName,Map<String,List<Map>> listLinkedHashMap){
File file = new File( packName+daoPackName.replaceAll("\\.","/"));
if (!file .exists() && !file .isDirectory()) {
file .mkdirs();
}
for(Map.Entry<String,List<Map>> entry:listLinkedHashMap.entrySet()){
String tableName = entry.getKey();
//生成路径
String url = packName+daoPackName.replaceAll("\\.","/")+"/"+tableName+"Mapper.java";
Map map = new HashMap();
map.put("author",ConfigCode.author);
map.put("packageName",daoPackName);
map.put("entityPackName",ConfigCode.entityPackName+"."+tableName+";");
map.put("daoName",tableName+"Mapper");
map.put("keyType",entry.getValue().get(0).get("type"));
map.put("keyValue",entry.getValue().get(0).get("cloum"));
map.put("tableName",tableName);
map.put("tableVal",tableName.substring(0,1).toLowerCase()+tableName.substring(1));
String entity = CodeTemplate.daoTemplate;
String content = parser.parseExpression(entity,parserContext).getValue(map, String.class);
createFile(url,content);
}
}
//生成mapper
public static void initMapper(String packNames,String mapperPackName,Map<String,List<Map>> listLinkedHashMap){
File file = new File( packNames+mapperPackName.replaceAll("\\.","/"));
if (!file .exists() && !file .isDirectory()) {
file .mkdirs();
}
for(Map.Entry<String,List<Map>> entry:listLinkedHashMap.entrySet()){
String tableName = entry.getKey();
//生成路径
String url = packNames+mapperPackName.replaceAll("\\.","/")+"/"+tableName+"Mapper.xml";
List<Map> list = entry.getValue();
String cloums = "";
String tCloums = "";
String itemTCloums = "";
String addUp = "";
String addBlw = "";
String updData = "";
String updData2 = "";
if (list!=null&&list.size()>0){
int i=0;
for (Map maps : list) {
cloums+=","+maps.get("orailCloum");
tCloums+=",#{"+maps.get("cloum")+"}";
itemTCloums+=",#{item."+maps.get("cloum")+"}";
addUp+= " <if test=\""+maps.get("cloum")+" != null\">\n" +
" "+maps.get("orailCloum")+",\n" +
" </if>\n";
addBlw+=" <if test=\""+maps.get("cloum")+" != null\">\n" +
" #{"+maps.get("cloum")+"},\n" +
" </if>\n";
if (i!=0){
updData+=" <if test=\""+maps.get("cloum")+" != null\">\n" +
" "+maps.get("orailCloum")+" = #{"+maps.get("cloum")+"},\n" +
" </if>\n";
updData2+=","+maps.get("orailCloum")+" = #{"+maps.get("cloum")+"}";
}
i++;
}
}
Map map = new HashMap();
map.put("cloums",cloums.substring(1));
map.put("tCloums",tCloums.substring(1));
map.put("itemTCloums",itemTCloums.substring(1));
map.put("addUp",addUp);
map.put("addBlw",addBlw);
map.put("updData",updData);
map.put("updData2",updData2.substring(1));
map.put("daoPackName",ConfigCode.daoPackName+"."+tableName+"Mapper");
map.put("type",list.get(0).get("type"));
map.put("entityPackName",ConfigCode.entityPackName+"."+tableName);
map.put("entityName",list.get(0).get("tableName"));
map.put("tOne",list.get(0).get("orailCloum"));
map.put("one",list.get(0).get("cloum"));
String entity = CodeTemplate.mapperTemplate;
String content = parser.parseExpression(entity,parserContext).getValue(map, String.class);
createFile(url,content);
}
}
//生成service
public static void initService(String packName,String servicePackName,Map<String,List<Map>> listLinkedHashMap){
File file = new File( packName+servicePackName.replaceAll("\\.","/"));
if (!file .exists() && !file .isDirectory()) {
file .mkdirs();
}
for(Map.Entry<String,List<Map>> entry:listLinkedHashMap.entrySet()){
String tableName = entry.getKey();
//生成路径
String url = packName+servicePackName.replaceAll("\\.","/")+"/"+tableName+"Service.java";
Map map = new HashMap();
map.put("author",ConfigCode.author);
map.put("packageName",servicePackName);
map.put("entityPackName",ConfigCode.entityPackName+"."+tableName);
map.put("entityService",tableName+"Service");
map.put("tableName",tableName);
map.put("tableVal",tableName.substring(0,1).toLowerCase()+tableName.substring(1));
map.put("type",entry.getValue().get(0).get("type"));
map.put("cloum",entry.getValue().get(0).get("cloum"));
String entity = CodeTemplate.serviceTemplate;
String content = parser.parseExpression(entity,parserContext).getValue(map, String.class);
createFile(url,content);
}
}
//生成serviceimpl
public static void initServiceImpl(String packName,String serviceImplPackName,Map<String,List<Map>> listLinkedHashMap){
File file = new File( packName+serviceImplPackName.replaceAll("\\.","/"));
if (!file .exists() && !file .isDirectory()) {
file .mkdirs();
}
for(Map.Entry<String,List<Map>> entry:listLinkedHashMap.entrySet()){
String tableName = entry.getKey();
//生成路径
String url = packName+serviceImplPackName.replaceAll("\\.","/")+"/"+tableName+"ServiceImpl.java";
Map map = new HashMap();
map.put("author",ConfigCode.author);
map.put("packageName",serviceImplPackName);
map.put("entityPackName",ConfigCode.entityPackName+"."+tableName);
map.put("servicePackName",ConfigCode.servicePackName+"."+tableName+"Service");
map.put("daoPackName",ConfigCode.daoPackName+"."+tableName+"Mapper");
map.put("serviceImplName",tableName+"ServiceImpl");
map.put("serviceName",tableName+"Service");
map.put("daoName",tableName+"Mapper");
map.put("daoVal",tableName.substring(0,1).toLowerCase()+tableName.substring(1)+"Mapper");
map.put("tableName",tableName);
map.put("tableVal",tableName.substring(0,1).toLowerCase()+tableName.substring(1));
map.put("type",entry.getValue().get(0).get("type"));
map.put("cloum",entry.getValue().get(0).get("cloum"));
String entity = CodeTemplate.serviceImplTemplate;
String content = parser.parseExpression(entity,parserContext).getValue(map, String.class);
createFile(url,content);
}
}
//生成controller
public static void initController(String packName,String controllerPackName,Map<String,List<Map>> listLinkedHashMap){
File file = new File( packName+controllerPackName.replaceAll("\\.","/"));
if (!file .exists() && !file .isDirectory()) {
file .mkdirs();
}
for(Map.Entry<String,List<Map>> entry:listLinkedHashMap.entrySet()){
String tableName = entry.getKey();
//生成路径
String url = packName+controllerPackName.replaceAll("\\.","/")+"/"+tableName+"Controller.java";
Map map = new HashMap();
map.put("author",ConfigCode.author);
map.put("packageName",controllerPackName);
map.put("entityPackName",ConfigCode.entityPackName+"."+tableName);
map.put("servicePackName",ConfigCode.servicePackName+"."+tableName+"Service");
map.put("controllerVal",tableName.substring(0,1).toLowerCase()+tableName.substring(1));
map.put("controllerName",tableName+"Controller");
map.put("serviceName",tableName+"Service");
map.put("serviceVal",tableName.substring(0,1).toLowerCase()+tableName.substring(1)+"Service");
map.put("entityName",tableName);
map.put("tableVal",tableName.substring(0,1).toLowerCase()+tableName.substring(1));
map.put("type",entry.getValue().get(0).get("type"));
map.put("cloum",entry.getValue().get(0).get("cloum"));
String entity = CodeTemplate.controllerTemplate;
String content = parser.parseExpression(entity,parserContext).getValue(map, String.class);
createFile(url,content);
}
}
public static void exectSql(){
String[] data = ConfigCode.data;
Map<String,List<Map>> listLinkedHashMap = new LinkedHashMap<String, List<Map>>();
if (data!=null&&data.length>0){
for (int i = 0; i < data.length; i++) {
String[] split = data[i].split(",");
try {
Class.forName(ConfigCode.driver);
String url = ConfigCode.mysqlUrl;
String username = ConfigCode.userName;
String password = ConfigCode.passWord;
String databases = url.replaceAll("//","").substring(url.replaceAll("//","").indexOf("/")+1,url.replaceAll("//","").indexOf("?"));
Connection con = DriverManager.getConnection(url, username, password);
Statement stat = con.createStatement();
String sql = "SELECT\n" +
"distinct \n"+
"COLUMN_NAME 字段名称,\n" +
"COLUMN_COMMENT 字段注释,\n" +
"COLUMN_TYPE 字段类型,\n" +
"IF\n" +
"( column_key = 'PRI', '是', '否' ) 主键,\n" +
"IF\n" +
"( IS_NULLABLE = 'YES', '是', '否' ) 允许为空,\n" +
"ordinal_position\n"+
"FROM\n" +
"INFORMATION_SCHEMA.COLUMNS \n" +
"WHERE\n" +
"table_name = '"+split[0]+"'\n"+
"and TABLE_SCHEMA = '"+databases+"'\n"+
"order by ordinal_position";
System.out.println(sql);
ResultSet rs = stat.executeQuery(sql);
List<Map> list = new ArrayList<Map>();
while(rs.next()) {
Map map = new HashMap();
String cloum = replaceUnderlineAndFirstToUpper(rs.getString("字段名称"),"_","");
String annotation = rs.getString("字段注释");
String type = rs.getString("字段类型");
map.put("tableName",split[0]);
map.put("orailCloum",rs.getString("字段名称"));
map.put("cloum",cloum);
map.put("annotation",annotation);
map.put("type",type.indexOf("varchar")!=-1?"String":(type.indexOf("bigint")!=-1?"Long":(type.indexOf("int")!=-1?"Integer":(type.indexOf("date")!=-1?"Date":(type.indexOf("datetime")!=-1?"Date":(type.indexOf("double")!=-1?"Double":(type.indexOf("timestamp")!=-1?"Date":(type.indexOf("decimal")!=-1?"BigDecimal":"String"))))))));
list.add(map);
}
listLinkedHashMap.put(split[1],list);
rs.close();
stat.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
initEntity(packName, ConfigCode.entityPackName,listLinkedHashMap);
initDao(packName, ConfigCode.daoPackName,listLinkedHashMap);
initMapper(packNames,ConfigCode.mapperPackName,listLinkedHashMap);
initService(packName,ConfigCode.servicePackName,listLinkedHashMap);
initServiceImpl(packName,ConfigCode.serviceImplPackName,listLinkedHashMap);
initController(packName,ConfigCode.controlelrPackName,listLinkedHashMap);
}
/**
* 替换字符串并让它的下一个字母为大写
*
* @param filed 对应字符串
* @param split 分隔符
* @param replace 替换字符
*/
public static String replaceUnderlineAndFirstToUpper(String filed, String split, String replace) {
StringBuilder newString = new StringBuilder();
int first;
while (filed.contains(split)) {
first = filed.indexOf(split);
if (first != filed.length()) {
newString.append(filed, 0, first).append(replace);
filed = filed.substring(first + split.length());
filed = firstCharacterToUpper(filed);
}
}
newString.append(filed);
return newString.toString();
}
/**
* 首字母大写
*
* @param filed 对应字符串
*/
public static String firstCharacterToUpper(String filed) {
return filed.substring(0, 1).toUpperCase() + filed.substring(1);
}
public static void main(String[] args) {
exectSql();
// initEntity(packName, ConfigCode.entityPackName,"user");
}
}
4.执行CreateCode中的main方法生成代码
查看生成的目录结构和代码
生成后的目录
查看生成后的代码,这里只展示controller层和dao层