自动生成实体类(二)

  • 这次添加了生成layui的查询
  • package com.qsk.utils;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.PrintWriter;
    import java.sql.Connection;
    import java.sql.DatabaseMetaData;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Date;  
     
    public class GenEntityUtil {
    	private final String myProjectPath = "";//空为当前项目路径(也可以自己指定绝对路径)
    	
        //数据库连接  
    	private static final String DBNAME = ""; //数据库多连接名小写(不生成数据库连接就不用管)
    	private static final String URL ="";  
    	private static final String NAME = "";  
    	private static final String PASS = "";  
    	private static final String DRIVER ="com.microsoft.sqlserver.jdbc.SQLServerDriver"; 
       
    	private final String tablename = "";//表名  
        
        private final String entityName = ""; //.java文件名
        private final String authorName = "神转子"; //作者名字  
    	   
    	private final String baseJavaUrl = "/src/main/java/";
    	private final String baseResourceUrl = "/src/main/resources/";
    	
    	private final String COMMPATH = "com.qsk."; //项目总包路径
        private final String requestMappingName = "/lisreport/"; //controller层跳转路径前缀
    	
    	private final String ymlUrl = "config"; //配置路径,空就表示在resources目录下,否则请填 config
    	private final String mapperOutPath = "mappers"; //指定mapper.xml生成所在地,这里就放到resource下了
    	private final String entityPath = COMMPATH + "entity"; //指定实体生成所在包的路径 
    	private final String controllerPath = COMMPATH + "controller"; //指定表现层生成包所在的路径
        private final String servicePath = COMMPATH + "service"; //service层地址
        private final String serviceImplPath = servicePath + ".impl"; //serviceImpl层地址
        private final String mapperPath = COMMPATH + "mapper"; //mapper层地址
        private final String configPath = COMMPATH + "core.config"; //配置文件地址
        private final String resultPath = COMMPATH + "common.result";
        
        private final String resultName = initUp("DataGridResultInfo"); //公共返回类名(首字母大写)
        private final String connConfigPath = ".conndb"; //数据库配置路径(在配置文件地址下)
        private final String dataName = ""; //表名注释
        private final String divisionSymbol = "_"; //根据某个字符串进行分割
    
        private boolean f_yml = true; //是否生成连接数据库的 yml 文件(建议多数据库连接时使用)生成完之后请关闭,否则会一直生成
        private boolean f_dataSource = true; //是否在java中生成连接配置
        private boolean f_util = true; //是否需要导入包java.util.*
        private boolean f_sql = false; //是否需要导入包java.sql.*
        private boolean f_data = true; //是否需要使用 @Data注解
        private boolean f_divisionStr = true; //是否替换字段分割符号
        
        private boolean f_generateMapper = true; //是否生成 mapper
        private boolean f_service = true; //是否生成 service 服务层
        private boolean f_controller = true; //是否生成 Controller 层
        private boolean f_layuiHtml = true; //是否生成 layui 的html
        private final String htmlPath = ""; //默认是在 templates 下
    	private final String layuiUrl = 
    			"/coststatic/frame/layui/"; //配置 layui 文件路径,没有请从官网下载
    	private final String jsUrl = "/coststatic/js/"; //js生成路径(默认static目录下)
        
        private boolean f_sql_select = true; //是否需要查询(若不生成layui的html就不用管)
    	
        private String[] colnames; //列名数组  
        private String[] colTypes; //列名类型数组  
        private int[] colSizes; //列名大小数组  
        private String dbType;
    	private final File file = new File("");
    	private final String projectPath = file.getAbsolutePath(); 
      
        /* 
         * g构造函数 
         */  
        public GenEntityUtil(){  
            //创建连接  
            Connection con;  
            //查要生成实体类的表  
            String sql = "select * from " + tablename;  
            Statement pStemt = null;
            try {  
                try {  
                	//加载驱动
                    Class.forName(DRIVER);  
                } catch (ClassNotFoundException e1) {  
                    e1.printStackTrace();  
                }  
                //链接数据库
                con = DriverManager.getConnection(URL,NAME,PASS);  
                DatabaseMetaData metdata = con.getMetaData();
                this.dbType = metdata.getDatabaseProductName();
                pStemt = (Statement) con.createStatement();  
                ResultSet rs = pStemt.executeQuery(sql);  
                ResultSetMetaData rsmd = rs.getMetaData();  
                int size = rsmd.getColumnCount();   //统计列  
                colnames = new String[size];  
                colTypes = new String[size];  
                colSizes = new int[size];  
                for (int i = 0; i < size; i++) {  
                    colnames[i] = rsmd.getColumnName(i + 1);  
                    colTypes[i] = rsmd.getColumnTypeName(i + 1);  
                      
                    if(colTypes[i].equalsIgnoreCase("date") || colTypes[i].equalsIgnoreCase("timestamp")){  
                        f_util = true;  
                    }  
                    if(colTypes[i].equalsIgnoreCase("blob") || colTypes[i].equalsIgnoreCase("char")){  
                        f_sql = true;  
                    }  
                    colSizes[i] = rsmd.getColumnDisplaySize(i + 1);  
                }
                System.out.println("自动生成中...");
                init();
                System.out.println("生成成功!");
            } catch (SQLException e) {  
                e.printStackTrace();  
            } finally{  
    //          try {  
    //              con.close();  
    //          } catch (SQLException e) {  
    //              e.printStackTrace();  
    //          }  
            }  
        }  
        
        private void init() {
        	if(f_yml) {
            	initYml();
            }
            if(f_dataSource) {
            	initDataSource();
            }
            InitEntity(colnames,colTypes,colSizes); //生成实体类
            //是否生成 mapper
            if(f_generateMapper) {
                InitMapperService();
                InitMapper(colnames,colTypes,colSizes); //生成 mapper.xml
            }
            if(f_service) {
            	InitService();
            }
            if(f_controller) {
            	InitController();
            }
            if(f_layuiHtml) {
            	String path = this.resultPath.replace(".", "/") + "/" + this.resultName;
            	if(!isFileExists(path)) {
            		initResult();
            	}
            	initLayuiHtml();
            	
            }
        }
    
    	private void initLayuiHtml() {
    		// TODO Auto-generated method stub
    		String content = parseLayuiHtml();
    		String outputPath = this.baseResourceUrl + "/templates/" + this.htmlPath + "/" + initLower(this.entityName) + "/index.html"; 
    		commWrite("layuiHtml", content, outputPath);
    		content = parseLayuiJsHtml();
    		outputPath = this.baseResourceUrl + "/static/" + this.jsUrl + "/" + initLower(this.entityName) + "/index.js"; 
    		commWrite("layuiHtml", content, outputPath);
    		
    	}
    
    	private String parseLayuiJsHtml() {
    		// TODO Auto-generated method stub
    		StringBuffer sb = new StringBuffer();
    		sb.append("var table;\r\n");
    		sb.append("var layer;\r\n");
    		sb.append("var tableId = \"" + initLower(this.entityName) + "Table\";\r\n");
    		sb.append("layui.use([ 'layer', 'table', 'jquery' ], function() {\r\n");
    		sb.append("    table = layui.table\r\n");
    		sb.append("    ,layer = layui.layer\r\n");
    		sb.append("    $ = layui.$\r\n");
    		sb.append("    var cols = [ [ // 表头\r\n");
    		String colname = "";
    		for (int i = 0; i < colnames.length; i++) {
    			if(i == 0) {
    				sb.append("        {\r\n");
    			}else {
    				sb.append("{\r\n");
    			}
        		colname = colnames[i].toLowerCase();
            	if(f_divisionStr) {
            		colname = replaceSymbol(colname);
            	}
    			sb.append("             field : '" + colname + "',\r\n");
    			sb.append("             title : '字段" + (i+1) + "',\r\n");
    			sb.append("             align : 'center',\r\n");
    			sb.append("             templet : function(data){\r\n");
    			sb.append("                 var value = \"\";\r\n");
    			sb.append("                 if(data." + colname + " != null ){\r\n");
    			sb.append("                     value = data." + colname + "\r\n");
    			sb.append("                 }\r\n");
    			if(sqlType2JavaType(colTypes[i]).equals("int")) {
    				sb.append("                 return \"
    \" + value + \"
    \";\r\n"); }else { sb.append(" return \"
    \" + value + \"
    \";\r\n"); } sb.append(" }\r\n"); sb.append(" }, "); } sb.append("] ];\r\n\r\n"); sb.append(" myTable = table.render({\r\n"); sb.append(" elem : '#" + initLower(this.entityName) + "Table',\r\n"); sb.append(" id : \"" + initLower(this.entityName) + "Table\",\r\n"); sb.append(" url : '"+ this.requestMappingName +"selectList',\r\n"); sb.append(" page : true, // 开启分页\r\n"); sb.append(" parseData:function(res){\r\n"); sb.append(" return {\r\n"); sb.append(" \"code\" : 0,\r\n"); sb.append(" data : res.data,\r\n"); sb.append(" \"count\" : res.total,\r\n"); sb.append(" }\r\n"); sb.append(" },\r\n"); sb.append(" cols : cols\r\n"); sb.append(" });\r\n\r\n"); sb.append(" window.select = function(){\r\n"); sb.append(" var keyword = $(\"#keyword\").val();\r\n"); sb.append(" table.reload('" + initLower(this.entityName) + "Table', {\r\n"); sb.append(" where : {\r\n"); sb.append(" keyword : keyword\r\n"); sb.append(" },\r\n"); sb.append(" page : {\r\n"); sb.append(" curr : 1\r\n"); sb.append(" }\r\n"); sb.append(" });\r\n"); sb.append(" };\r\n\r\n"); sb.append("});\r\n"); return sb.toString(); } private String parseLayuiHtml() { // TODO Auto-generated method stub StringBuffer sb = new StringBuffer(); sb.append("\r\n"); sb.append("\r\n"); sb.append("\r\n"); sb.append(" \r\n"); sb.append(" \r\n"); sb.append(" 科室基本资料\r\n"); sb.append(" \r\n"); sb.append("\r\n"); sb.append("\r\n"); sb.append("
    \r\n"); sb.append("
    \r\n"); sb.append("
    \r\n"); sb.append("
    \r\n"); sb.append(" \r\n"); sb.append("
    \r\n"); sb.append("
    \r\n"); sb.append("
    \r\n"); sb.append(" 查询\r\n"); sb.append("
    \r\n"); sb.append("
    \r\n"); sb.append("
    \r\n"); sb.append("
    \r\n"); sb.append(" \r\n"); String jsUrl = this.jsUrl.equals("") ? "/" : this.jsUrl; sb.append(" \r\n"); sb.append("\r\n"); sb.append(""); return sb.toString(); } /** * s生成数据库yml文件 */ private void initYml() { String content = parseYml(); String outputPath = baseResourceUrl + this.ymlUrl + "/application-"+ DBNAME.toLowerCase() + ".yml"; commWrite("yml", content, outputPath); } /** * s生成连接数据库java文件 */ private void initDataSource() { String dbname = DBNAME.toLowerCase(); String content = parseDataSource(); String dataSourceUrl = baseJavaUrl + this.configPath.replace(".", "/"); String outputPath = dataSourceUrl +"/" + "DataSourceConfig.java"; if(!isFileExists(outputPath)) { commWrite("数据库连接", content, outputPath); }else { content = parseDBConfigAppend(); if(!"".equals(content)) { commWrite("", content, outputPath); } } String filePath = dataSourceUrl + this.connConfigPath.replace(".", "/") + "/Mybatis" + initUp(dbname) + "Config.java"; if(!isFileExists(filePath)) { content = parseDBConfig(); commWrite("", content, filePath); } } private String parseDBConfigAppend() { StringBuffer sb = new StringBuffer(); String thisPath = myProjectPath.equals("") ? this.projectPath : myProjectPath; File file = new File(thisPath + baseJavaUrl + configPath.replace(".", "/") + "/DataSourceConfig.java"); FileInputStream in = null; try { byte[] tembytes = new byte[1024]; int byteread = 0; in = new FileInputStream(file); showAvailableBytes(in); while ((byteread = in.read(tembytes)) != -1) { String str = new String(tembytes, 0, byteread); sb.append(str); } String str = sb.toString(); if(str.indexOf(DBNAME) == -1) { int index = str.lastIndexOf("}"); str = str.substring(0 , index) + str.substring(index + 1); sb = new StringBuffer(); sb.append(str); appendDataSource(sb); sb.append("}"); return sb.toString(); }; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return ""; } private void showAvailableBytes(InputStream in) { } /** * c初始化实体类 * @param colnames * @param colTypes * @param colSizes */ private void InitEntity(String[] colnames, String[] colTypes, int[] colSizes) { String content = parseEntity(colnames,colTypes,colSizes); String outputPath = baseJavaUrl + this.entityPath.replace(".", "/")+"/"+ entityName + ".java"; commWrite(entityName + "实体类", content, outputPath); } /** * s生成表现层 */ private void InitController() { String index = "index"; String rest = "rest"; String path = baseJavaUrl + this.controllerPath.replace(".", "/"); String content = parseControllerIndex(); String outputPath = path + "/" + index + "/" + entityName + "Controller" + initUp(index) + ".java"; commWrite(entityName + "访问表现层", content, outputPath); content = parseControllerRest(); outputPath = path + "/" + rest + "/" + entityName + "Controller" + initUp(rest) + ".java"; commWrite(entityName + "数据表现层", content, outputPath); } /** * 生成逻辑层接口与业务 */ private void InitService() { String content = parseService(); String outputPath = baseJavaUrl + this.servicePath.replace(".", "/")+"/"+ entityName + "Service.java"; commWrite(entityName + "逻辑层接口", content, outputPath); content = parseServiceImpl(); outputPath = baseJavaUrl + this.serviceImplPath.replace(".", "/")+"/"+ entityName + "ServiceImpl.java"; commWrite(entityName + "逻辑层实现", content, outputPath); } /** * c初始化 Mapper 服务层 */ private void InitMapperService() { String content = parseMapperService(); String outputPath = baseJavaUrl + this.mapperPath.replace(".", "/")+"/"+ entityName + "Mapper.java"; commWrite(entityName + "Mapper层", content, outputPath); } /** * c初始化 Mapper * @param colnames * @param colTypes * @param colSizes */ private void InitMapper(String[] colnames, String[] colTypes, int[] colSizes) { String content = parseMapper(colnames,colTypes,colSizes); String outputPath = baseResourceUrl + this.mapperOutPath +"/"+ entityName + "Mapper" + ".xml"; commWrite(entityName + "Mapper.xml", content, outputPath); } /** * 初始化公共返回类 */ private void initResult() { String content = parseResult(); String outputPath = baseJavaUrl + this.resultPath.replace(".", "/") + "/" + this.resultName + ".java"; commWrite(entityName + "公共返回类", content, outputPath); } public void commWrite(String fileName, String content, String outputPath) { String thisPath = myProjectPath.equals("") ? this.projectPath : myProjectPath; /*if(isFileExists(outputPath) && !"".equals(fileName)) { @SuppressWarnings("resource") Scanner scanner = new Scanner(System.in); System.out.print(fileName + "文件已存在!是否重新生成?(Y是,N否)"); String str = scanner.next(); while(str == null || str.equals("")) { System.out.println(); System.out.print("请重新输入:"); str = scanner.next(); } if(!str.equalsIgnoreCase("Y")) { return; } }*/ try { outputPath = thisPath + outputPath; File directory = new File(outputPath); if(!directory.getParentFile().exists()) { directory.getParentFile().mkdirs(); } FileWriter fw = new FileWriter(outputPath); PrintWriter pw = new PrintWriter(fw); pw.println(content); pw.flush(); pw.close(); } catch (IOException e) { e.printStackTrace(); } } /** * s功能:生成 yml 主体代码 * @return */ private String parseYml() { StringBuffer sb = new StringBuffer(); sb.append("spring:\r\n"); sb.append(" datasource:\r\n"); sb.append(" " + DBNAME.toLowerCase() + ":\r\n"); sb.append(" name: " + DBNAME.toLowerCase() + "\r\n"); sb.append(" jdbc-url: " + URL + "\r\n"); sb.append(" username: " + NAME + "\r\n"); sb.append(" password: " + PASS + "\r\n"); //使用druid数据源 sb.append(" type: com.alibaba.druid.pool.DruidDataSource\r\n"); sb.append(" driver-class-name: " + DRIVER + "\r\n"); sb.append(" filters: stat\r\n"); sb.append(" maxActive: 20\r\n"); sb.append(" initialSize: 1\r\n"); sb.append(" maxWait: 60000\r\n"); sb.append(" minIdle: 1\r\n"); sb.append(" timeBetweenEvictionRunsMillis: 60000\r\n"); sb.append(" minEvictableIdleTimeMillis: 300000\r\n"); sb.append(" validationQuery: select 'x'\r\n"); sb.append(" testWhileIdle: true\r\n"); sb.append(" testOnBorrow: false\r\n"); sb.append(" testOnReturn: false\r\n"); sb.append(" poolPreparedStatements: true\r\n"); sb.append(" maxOpenPreparedStatements: 20\r\n"); return sb.toString(); } /** * 生成数据库基础配置 * @return */ private String parseDataSource() { StringBuffer sb = new StringBuffer(); //导入包名 sb.append("package " + this.configPath + ";\r\n\r\n"); sb.append("import javax.sql.DataSource;\r\n\r\n"); sb.append("import org.springframework.boot.context.properties.ConfigurationProperties;\r\n"); sb.append("import org.springframework.boot.jdbc.DataSourceBuilder;\r\n"); sb.append("import org.springframework.context.annotation.Bean;\r\n"); sb.append("import org.springframework.context.annotation.Configuration;\r\n\r\n"); sb.append("@Configuration\r\n"); sb.append("public class DataSourceConfig {\r\n\r\n"); appendDataSource(sb); sb.append("}"); return sb.toString(); } private void appendDataSource(StringBuffer sb) { sb.append(" @Bean(name = \"" + DBNAME.toLowerCase() + "\")\r\n"); sb.append(" @ConfigurationProperties(prefix = \"spring.datasource." + DBNAME.toLowerCase() + "\")\r\n"); sb.append(" public DataSource dataSource" + initUp(DBNAME) + "() {\r\n"); sb.append(" return DataSourceBuilder.create().build();\r\n"); sb.append(" }\r\n"); } /** * 生成数据连接主体代码 * @return */ private String parseDBConfig() { StringBuffer sb = new StringBuffer(); String dbname = DBNAME.toLowerCase(); String sqlSessionFactory = "sqlSessionFactory" + dbname; String transactionManager = dbname + "TransactionManager"; sb.append("package " + this.configPath + this.connConfigPath + ";\r\n\r\n"); sb.append("import javax.sql.DataSource;\r\n\r\n"); sb.append("import org.apache.ibatis.session.SqlSessionFactory;\r\n"); sb.append("import org.mybatis.spring.SqlSessionFactoryBean;\r\n"); sb.append("import org.mybatis.spring.SqlSessionTemplate;\r\n"); sb.append("import org.mybatis.spring.annotation.MapperScan;\r\n"); sb.append("import org.springframework.beans.factory.annotation.Autowired;\r\n"); sb.append("import org.springframework.beans.factory.annotation.Qualifier;\r\n"); sb.append("import org.springframework.context.annotation.Bean;\r\n"); sb.append("import org.springframework.context.annotation.Configuration;\r\n"); sb.append("import org.springframework.core.io.support.PathMatchingResourcePatternResolver;\r\n"); sb.append("import org.springframework.jdbc.datasource.DataSourceTransactionManager;\r\n\r\n"); sb.append("@Configuration\r\n"); sb.append("@MapperScan(basePackages = {\"" + mapperPath + "\"}, sqlSessionFactoryRef = \"" + sqlSessionFactory + "\")\r\n"); sb.append("public class Mybatis" + initUp(dbname) + "Config {\r\n\r\n"); sb.append(" @Autowired\r\n"); sb.append(" @Qualifier(\"" + dbname + "\")\r\n"); sb.append(" private DataSource " + dbname + ";\r\n\r\n"); sb.append(" @Bean\r\n"); sb.append(" public SqlSessionFactory " + sqlSessionFactory + "() throws Exception {\r\n"); sb.append(" SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();\r\n"); sb.append(" factoryBean.setDataSource(" + dbname + ");\r\n"); sb.append(" factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(\"classpath*:" + mapperOutPath + "/*.xml\"));\r\n"); sb.append(" return factoryBean.getObject();\r\n"); sb.append(" }\r\n\r\n"); sb.append(" @Bean\r\n"); sb.append(" public SqlSessionTemplate sqlSessionTemplate" + dbname + "() throws Exception {\r\n"); sb.append(" SqlSessionTemplate template = new SqlSessionTemplate(" + sqlSessionFactory + "());\r\n"); sb.append(" return template;\r\n"); sb.append(" }\r\n\r\n"); sb.append(" @Bean(name = \"" + transactionManager + "\")\r\n"); sb.append(" public DataSourceTransactionManager " + transactionManager + "(@Qualifier(\"" + dbname + "\") DataSource dataSource) {\r\n"); sb.append(" return new DataSourceTransactionManager(dataSource);\r\n"); sb.append(" }\r\n"); sb.append("}\r\n"); return sb.toString(); } /** * g功能:生成实体类主体代码 * @param colnames * @param colTypes * @param colSizes * @return */ private String parseEntity(String[] colnames, String[] colTypes, int[] colSizes) { StringBuffer sb = new StringBuffer(); //导入包名 sb.append("package " + this.entityPath + ";\r\n\r\n"); //判断是否导入工具包 if(f_util) { sb.append("import java.util.Date;\r\n"); } if(f_data) { sb.append("import lombok.Data;\r\n"); } if(f_sql) { sb.append("import java.sql.*;\r\n"); } sb.append("\r\n"); //注释部分 sb.append(" /**\r\n"); sb.append(" * "+ dataName +"\r\n"); sb.append(" * "+ entityName +" 实体类\r\n"); sb.append(" * "+new Date()+" "+this.authorName+"\r\n"); sb.append(" */ \r\n"); //实体部分 sb.append("\r\n"); if(f_data) { sb.append("@Data"); } sb.append("\r\npublic class " + this.entityName + " {\r\n"); processAllAttrs(sb);//属性 //processAllMethod(sb);//get set方法 //processAllConstructor(sb); //生成有参和无参构造方法 sb.append("}\r\n"); return sb.toString(); } /** * s生成表现层代码 * @return */ private String parseControllerIndex() { String type = "index"; StringBuffer sb = new StringBuffer(); //导入包名 sb.append("package " + this.controllerPath + "." + type + ";\r\n\r\n"); sb.append("import org.springframework.beans.factory.annotation.Autowired;\r\n"); sb.append("import org.springframework.stereotype.Controller;\r\n"); sb.append("import org.springframework.web.bind.annotation.GetMapping;\r\n"); sb.append("import org.springframework.web.bind.annotation.RequestMapping;\r\n\r\n"); sb.append("import " + this.servicePath + "." + this.entityName + "Service;\r\n\r\n"); sb.append("@Controller\r\n"); sb.append("@RequestMapping(\"" + requestMappingName + "\")\r\n"); sb.append("public class " + this.entityName + "Controller" + initUp(type) + " {\r\n\r\n"); sb.append(" @Autowired\r\n"); sb.append(" private " + this.entityName + "Service " + initLower(this.entityName) + "Service;\r\n\r\n"); allControllerIndex(sb); sb.append("}\r\n"); return sb.toString(); } private void allControllerIndex(StringBuffer sb) { // TODO Auto-generated method stub sb.append(" @GetMapping(\"/" + initLower(this.entityName) + "Index\")\r\n"); sb.append(" public String " + initLower(this.entityName) + "Index() {\r\n"); sb.append(" return \"" + htmlPath + initLower(this.entityName) + "/index\";\r\n"); sb.append(" }\r\n\r\n"); System.out.println("服务器地址为:" + requestMappingName + initLower(this.entityName) + "Index"); } /** * s生成表现层代码 * @return */ private String parseControllerRest() { String type = "rest"; StringBuffer sb = new StringBuffer(); //导入包名 sb.append("package " + this.controllerPath + "." + type + ";\r\n\r\n"); sb.append("import org.springframework.beans.factory.annotation.Autowired;\r\n"); sb.append("import org.springframework.web.bind.annotation.RequestMapping;\r\n"); if(importResult()) { sb.append("import org.springframework.web.bind.annotation.RequestParam;\r\n"); sb.append("import " + this.resultPath + "." + resultName + ";\r\n"); } sb.append("import org.springframework.web.bind.annotation.RestController;\r\n"); sb.append("import " + this.servicePath + "." + this.entityName + "Service;\r\n\r\n"); sb.append("@RestController\r\n"); sb.append("@RequestMapping(\"" + requestMappingName + "\")\r\n"); sb.append("public class " + this.entityName + "Controller" + initUp(type) + " {\r\n\r\n"); sb.append(" @Autowired\r\n"); sb.append(" private " + this.entityName + "Service " + initLower(this.entityName) + "Service;\r\n\r\n"); allControllerRest(sb); sb.append("}\r\n"); return sb.toString(); } private void allControllerRest(StringBuffer sb) { if(f_sql_select) { sb.append(" @RequestMapping(\"/selectList\")\r\n"); sb.append(" public " + this.resultName + " getBaseDictList(\r\n"); sb.append(" @RequestParam(\"page\") Integer page,\r\n"); sb.append(" @RequestParam(\"limit\") Integer limit,\r\n"); sb.append(" @RequestParam(value = \"keyword\", required = false) String keyword) {\r\n\r\n"); sb.append(" return " + initLower(this.entityName) + "Service.selectList(\r\n"); sb.append(" page, limit, keyword);\r\n"); sb.append(" }\r\n\r\n"); } } /** * 生成逻辑层接口代码 * @return */ private String parseService() { StringBuffer sb = new StringBuffer(); //导入包名 sb.append("package " + this.servicePath + ";\r\n\r\n"); sb.append("import java.util.List;\r\n\r\n"); if(importResult()) { sb.append("import " + this.resultPath + "." + resultName + ";\r\n\r\n"); } sb.append("import " + this.entityPath + "." + entityName + ";\r\n\r\n"); //注释部分 sb.append(" /**\r\n"); sb.append(" * "+ dataName +"\r\n"); sb.append(" * "+ entityName +" 逻辑层接口\r\n"); sb.append(" * "+new Date()+" "+this.authorName+"\r\n"); sb.append(" */ \r\n"); sb.append("\r\npublic interface " + entityName + "Service {\r\n\r\n"); allService(sb); sb.append("}\r\n"); return sb.toString(); } private void allService(StringBuffer sb) { if(f_sql_select) { sb.append(" public DataGridResultInfo selectList("); sb.append("Integer page, Integer limit, String keyword"); sb.append(");\r\n\r\n"); } } /** * 生成逻辑层业务代码 * @return */ private String parseServiceImpl() { StringBuffer sb = new StringBuffer(); //导入包名 sb.append("package " + this.serviceImplPath + ";\r\n\r\n"); sb.append("import org.springframework.beans.factory.annotation.Autowired;\r\n"); sb.append("import org.springframework.stereotype.Service;\r\n\r\n"); sb.append("import com.github.pagehelper.Page;\r\n"); sb.append("import com.github.pagehelper.PageHelper;\r\n"); if(importResult()) { sb.append("import " + this.resultPath + "." + resultName + ";\r\n"); } sb.append("import " + this.entityPath + "." + this.entityName + ";\r\n"); sb.append("import " + this.mapperPath + "." + this.entityName + "Mapper;\r\n"); sb.append("import " + this.servicePath + "." + this.entityName + "Service;\r\n\r\n"); sb.append("@Service\r\n"); sb.append("public class " + this.entityName + "ServiceImpl implements " + this.entityName + "Service {\r\n\r\n"); sb.append(" @Autowired\r\n"); sb.append(" private " + this.entityName + "Mapper " + initLower(this.entityName) + "Mapper;\r\n\r\n"); allServiceImpl(sb); sb.append("}"); return sb.toString(); } private void allServiceImpl(StringBuffer sb) { if(f_sql_select) { sb.append(" @Override\r\n"); sb.append(" public " + resultName + " selectList(\r\n"); sb.append(" Integer page, Integer limit, String keyword) {\r\n"); sb.append(" " + this.resultName + " " + initLower(this.resultName) + " =\r\n"); sb.append(" " + this.resultName + ".get" + this.resultName + "();\r\n"); sb.append(" try {\r\n"); sb.append(" Page<" + this.entityName + "> pageHelper =\r\n"); sb.append(" PageHelper.startPage(page, limit);\r\n"); sb.append(" "+ initLower(this.entityName) +"Mapper.selectList(keyword);\r\n"); sb.append(" "+ initLower(this.resultName) +".setData(pageHelper.getResult());\r\n"); sb.append(" "+ initLower(this.resultName) +".setTotal((int)pageHelper.getTotal());\r\n"); sb.append(" return "+ initLower(this.resultName) +";\r\n"); sb.append(" } catch (Exception e) {\r\n"); sb.append(" e.printStackTrace();\r\n"); sb.append(" }\r\n\r\n"); sb.append(" return "+ initLower(this.resultName) +";\r\n"); sb.append(" }\r\n"); } } /** * 生成 mapper 服务层主体代码 * @return */ private String parseMapperService() { StringBuffer sb = new StringBuffer(); //导入包名 sb.append("package " + this.mapperPath + ";\r\n\r\n");//导入包名 sb.append("import java.util.List;\r\n\r\n"); sb.append("import org.apache.ibatis.annotations.Param;\r\n\r\n"); sb.append("import " + this.entityPath + "." + entityName + ";\r\n\r\n"); sb.append(" /**\r\n"); sb.append(" * "+ dataName +"\r\n"); sb.append(" * "+ entityName +" 服务层\r\n"); sb.append(" * "+new Date()+" "+this.authorName+"\r\n"); sb.append(" */ \r\n"); sb.append("\r\npublic interface " + entityName + "Mapper {\r\n"); allMapper(sb); sb.append("}\r\n"); return sb.toString(); } /** * 生成所有的 mapper * @param sb */ private void allMapper(StringBuffer sb) { if(f_sql_select) { sb.append("\r\n List<" + this.entityName + "> selectList(\r\n"); sb.append(" @Param(\"keyword\") String keyword\r\n"); sb.append(" );\r\n\r\n"); } } /** * g功能:生成mapper主体代码 * @param colnames * @param colTypes * @param colSizes * @return */ private String parseMapper(String[] colnames, String[] colTypes, int[] colSizes) { StringBuffer sb = new StringBuffer(); sb.append("\r\n"); sb.append("\r\n"); sb.append("\r\n"); sb.append(" \r\n"); processAllResult(sb); sb.append(" \r\n"); processAllSql(sb); sb.append("\r\n"); return sb.toString(); } /** * 生成公共返回类 * @return */ private String parseResult() { StringBuffer sb = new StringBuffer(); //导入包名 sb.append("package " + this.resultPath + ";\r\n\r\n"); sb.append("import java.util.List;\r\n"); sb.append("import java.util.Map;\r\n\r\n"); sb.append("import lombok.Data;\r\n\r\n"); sb.append("@Data\r\n"); sb.append("public class " + this.resultName + " {\r\n\r\n"); sb.append(" private volatile static " + resultName + " " + initLower(resultName) + ";\r\n\r\n"); sb.append(" private " + resultName + "() {}\r\n\r\n"); sb.append(" public static " + this.resultName + " get" + this.resultName + "() {\r\n"); sb.append(" if(" + initLower(this.resultName) + " == null) {\r\n"); sb.append(" synchronized (" + resultName + ".class) {\r\n"); sb.append(" if(" + initLower(this.resultName) + " == null)\r\n"); sb.append(" " + initLower(this.resultName) + " = new " + this.resultName + "();\r\n"); sb.append(" }\r\n"); sb.append(" }\r\n"); sb.append(" return " + initLower(this.resultName) + ";\r\n"); sb.append(" }\r\n\r\n"); sb.append(" private int total;\r\n"); sb.append(" private List rows;\r\n"); sb.append(" private List data;\r\n"); sb.append(" private Object objData;\r\n"); sb.append(" private boolean success;\r\n"); sb.append(" private boolean error;\r\n"); sb.append(" private String msg;\r\n"); sb.append(" private Map dataMap;\r\n"); sb.append(" private String code;\r\n\r\n"); sb.append("}\r\n"); return sb.toString(); } /** * 生成所有的 sql 语句 * @param sb */ private void processAllSql(StringBuffer sb) { // 生成查询语句 if(f_sql_select) { selectList(sb); } } private void selectList(StringBuffer sb) { sb.append(" \r\n\r\n"); } /** * g功能:生成所有result * @param sb */ private void processAllResult(StringBuffer sb) { String colname = ""; for (int i = 0; i < colnames.length; i++) { sb.append(" \r\n"); } } /** * g功能:生成所有属性 * @param sb */ private void processAllAttrs(StringBuffer sb) { String colname = ""; for (int i = 0; i < colnames.length; i++) { // 是否替换 colname = replaceSymbol(colnames[i].toLowerCase()); sb.append("\tprivate " + sqlType2JavaType(colTypes[i]) + " " + colname + ";\r\n"); } //换行 sb.append("\r\n"); } // 替换符号 private String replaceSymbol(String colname) { if(f_divisionStr) { String str = ""; String[] split = colname.split(divisionSymbol); for (int i = 0; i < split.length; i++) { if(i > 0) { str += initUp(split[i]); } else if(i == 0) { str += split[i]; } } return str; } return colname; } /** * g功能:生成所有方法 * @param sb */ private void processAllMethod(StringBuffer sb) { for (int i = 0; i < colnames.length; i++) { //生成set方法 sb.append("\tpublic void set" + initUp(colnames[i].toLowerCase()) + "(" + sqlType2JavaType(colTypes[i]) + " " + colnames[i].toLowerCase() + "){\r\n"); sb.append("\t\tthis." + colnames[i].toLowerCase() + "=" + colnames[i].toLowerCase() + ";\r\n"); sb.append("\t}\r\n\r\n"); //生成get方法 sb.append("\tpublic " + sqlType2JavaType(colTypes[i]) + " get" + initUp(colnames[i].toLowerCase()) + "(){\r\n"); sb.append("\t\treturn " + colnames[i].toLowerCase() + ";\r\n"); sb.append("\t}\r\n\r\n"); } } /** * g功能:生成无参和有参构造方法 * @param sb */ private void processAllConstructor(StringBuffer sb){ //生成无参构造方法 sb.append("\tpublic " + entityName + "(){\r\n"); sb.append("\t\tsuper();\r\n"); sb.append("\t}\r\n\r\n"); //生成有参构造函数 sb.append("\tpublic " + entityName + "("); for (int i = 0; i < colnames.length; i++) { if(i == colnames.length - 1){ sb.append(sqlType2JavaType(colTypes[i].toLowerCase()) + " " + colnames[i].toLowerCase() + "){\r\n"); }else{ sb.append(sqlType2JavaType(colTypes[i].toLowerCase()) + " " + colnames[i].toLowerCase() + ", "); } } //函数内容 for (int i = 0; i < colnames.length; i++) { sb.append("\t\tthis." + colnames[i].toLowerCase() + " = " + colnames[i].toLowerCase() + ";\r\n"); } sb.append("\t}"); //换行 sb.append("\r\n"); } /** * g功能:将输入字符串的首字母改成大写 * @param str * @return */ private String initUp(String str) { char[] ch = str.toCharArray(); if(ch[0] >= 'a' && ch[0] <= 'z'){ ch[0] = (char)(ch[0] - 32); } return new String(ch); } /** * g功能:将输入字符串的首字母改成小写 * @param str * @return */ private String initLower(String s){ if(Character.isLowerCase(s.charAt(0))) return s; else return (new StringBuilder()).append(Character.toLowerCase(s.charAt(0))).append(s.substring(1)).toString(); } /** * g功能:获得列的数据类型 ,转化为java中的类型 * @param sqlType * @return */ private String sqlType2JavaType(String sqlType) { if(this.dbType.indexOf("SQL Server") != -1) { return sqlServereJavaType(sqlType); }else if(this.dbType.indexOf("Oracle") != -1) { return oracleJavaType(sqlType); } return "String"; } private String sqlServereJavaType(String sqlType) { // TODO Auto-generated method stub if(sqlType.equalsIgnoreCase("char") || sqlType.equalsIgnoreCase("varchar") || sqlType.equalsIgnoreCase("nchar") || sqlType.equalsIgnoreCase("nvarchar") || sqlType.equalsIgnoreCase("ntext") || sqlType.equalsIgnoreCase("uniqueidentifier") || sqlType.indexOf("varchar") != -1 || sqlType.equalsIgnoreCase("text")) { return "String"; }else if(sqlType.equalsIgnoreCase("int")) { return "int"; }else if(sqlType.equalsIgnoreCase("bigint")) { return "Long"; }else if(sqlType.equalsIgnoreCase("float")) { return "double"; }else if(sqlType.equalsIgnoreCase("image")) { return "char[]"; }else if(sqlType.equalsIgnoreCase("date") || sqlType.equalsIgnoreCase("datetime2") || sqlType.equalsIgnoreCase("datetime")) { return "Date"; } return "String"; } private String oracleJavaType(String sqlType) { // TODO Auto-generated method stub if(sqlType.equalsIgnoreCase("binary_double")){ return "double"; }else if(sqlType.equalsIgnoreCase("binary_float")){ return "float"; }else if(sqlType.equalsIgnoreCase("blob")){ return "byte[]"; }else if(sqlType.equalsIgnoreCase("blob")){ return "byte[]"; }else if(sqlType.equalsIgnoreCase("char") || sqlType.equalsIgnoreCase("nvarchar2") || sqlType.equalsIgnoreCase("varchar2")){ return "String"; }else if(sqlType.equalsIgnoreCase("date") || sqlType.equalsIgnoreCase("timestamp") || sqlType.equalsIgnoreCase("timestamp with local time zone") || sqlType.equalsIgnoreCase("timestamp with time zone")){ return "Date"; }else if(sqlType.equalsIgnoreCase("number")){ return "int"; } return "String"; } /** * 数据库类型转换成 mybatis 看得懂的类型 * @param dataType * @return */ private String sql2Mybatis(String dataType) { if(this.dbType.indexOf("SQL Server") != -1) { return sqlServerMybatis(dataType); }else if(this.dbType.indexOf("Oracle") != -1) { return oracleMybatis(dataType); } return dataType; } private String sqlServerMybatis(String dataType) { if(dataType.equalsIgnoreCase("char") || dataType.equalsIgnoreCase("varchar") || dataType.equalsIgnoreCase("nchar") || dataType.equalsIgnoreCase("nvarchar") || dataType.equalsIgnoreCase("ntext") || dataType.equalsIgnoreCase("uniqueidentifier") || dataType.indexOf("varchar") != -1 || dataType.equalsIgnoreCase("text")) { dataType = "VARCHAR"; }else if(dataType.equalsIgnoreCase("int")) { dataType = "INTEGER"; }else if(dataType.equalsIgnoreCase("bigint")) { dataType = "BIGINT"; }else if(dataType.equalsIgnoreCase("float")) { dataType = "DOUBLE"; }else if(dataType.equalsIgnoreCase("image")) { dataType = "LONGVARBINARY"; }else if(dataType.equalsIgnoreCase("date") || dataType.equalsIgnoreCase("datetime2") || dataType.equalsIgnoreCase("datetime")) { dataType = "DATE"; } return dataType; } private String oracleMybatis(String dataType) { if (dataType.equalsIgnoreCase("VARCHAR2") || dataType.equalsIgnoreCase("CHAR") || dataType.equalsIgnoreCase("VARCHAR")) { dataType = "VARCHAR"; } else if(dataType.equalsIgnoreCase("NUMBER") || dataType.equalsIgnoreCase("INT")) { dataType = "INTEGER"; } else if(dataType.equalsIgnoreCase("DATETIME")) { dataType = "DATETIME"; } else if(dataType.equalsIgnoreCase("FLOAT")) { dataType = "DOUBLE"; } else if(dataType.equalsIgnoreCase("CHAR")) { dataType = "CHAR"; } return dataType; } /** * 是否引进公共返回类 * @return */ private boolean importResult() { if(f_sql_select) { return true; } return false; } private boolean isFileExists(String path) { String thisPath = myProjectPath.equals("") ? this.projectPath : myProjectPath; path = thisPath + path; File file = new File(path); return file.exists(); } /** * c出口 * @param args */ public static void main(String[] args) { new GenEntityUtil(); } }

     

你可能感兴趣的:(springboot,自动生成,多数据源)