精华内容
参与话题
问答
  • 推荐几个代码自动生成器,神器!!!

    万次阅读 多人点赞 2019-06-23 22:15:46
    20个代码生成框架 老的代码生成器的地址:https://www.cnblogs.com/skyme/archive/2011/12/22/2297592.html 以下是大家推荐的最近很火爆的代码生成器神器。如果有更好的希望大家多多留言,我会及时补充上去。 ---...

     

    20个代码生成框架

    老的代码生成器的地址:https://www.cnblogs.com/skyme/archive/2011/12/22/2297592.html

    以下是大家推荐的最近很火爆的代码生成器神器。如果有更好的希望大家多多留言,我会及时补充上去。

    -------------------------更新补充---------------------------------

    2.1懒猴子CG

    懒猴子CG支持在线搭建dubbo、springboot、springcloud等框架,支持在线生成swagger实体类等,支持自定义模版,支持多种语言的代码生成。这款生成器是国人研发的,站长迭代速度快,社区活跃,文档齐全。是一款及其灵活的生成器!推荐使用!

    官方网址:http://cg.lazy-monkey.com/

    QQ技术交流群:877957236

    版权形式:免费

     

    2.2IT猿网

    在线代码生成器,好处就是方便。重点是连验证码都能在线调试好生成java代码直接使用。

    官方网址:https://tool.ityuan.com/captcha

    版权形式:免费

     

    2.3listcode

           一个超级强大的代码生成器网站,这个代码生成器非常完善, java,php,python,nodejs都支持,前后端分离,翻页,联合查询都做了,当之无愧的代码生成器中的战斗机。

     

    官网地址:https://www.listcode.cn/

    版权:付费

    2.4magicalcoder

          机械的增删改查基础代码和界面功能,自由拖拽定制,面向零基础,拖拽式编程,赋能企业,前后端代码一键生成,能够有效的提升效率。先不讲东西好不好,但他们的理念很贴心-->把简单的重复劳动交给我们,把高大上的智力输出交给您,最终提高个人和团队的整体开发效率;我们希望您省下来的时间能多陪陪家人

    官网:http://bbs.magicalcoder.com/

    版权:免费

     

     

    展开全文
  • Java代码生成

    万次阅读 2019-06-10 17:28:47
    本项目基于是基于 renren-generator 定制的代码生成器 文章目录**项目说明**不同点:效果原理分析如何定制开发?更多可能存在的坑代码地址 不同点: 因为本人的公司使用的是 tkmyabtis + swagger 构建 rest api,...

    项目说明

    • 本项目基于是基于 renren-generator 定制的代码生成器

    不同点:

    因为本人的公司使用的是 tkmyabtis + swagger 构建 rest api,而 renren-generator 用的是 mybatis-plus,而且不支持 swagger,所以有了本项目

    效果

    00.png

    01.png

    02.png

    03.png

    04.png

    05.png

    06.png

    原理分析

    其实代码生成的原理非常简单,就是查询数据库的信息,然后通过模板引擎渲染出来

    如何定制开发?

    • 1 将写好的模板文件放入 template 目录下, 我是放到了 template/rzx 目录下
    • 2 修改 GenUtils 类,getTemplates(模板资源加载的方法),getFileName(文件路径的方法,不一定要改)
    • 3 关于模板的可用字段可以参考 GenUtils.generatorCode 方法

    更多

    可能存在的坑

    • 因为是自动生成的代码,所以拷贝到自己的项目中的时候 要修改一下引用。包括 实体类 和 xml 的引用。

    代码地址

    https://gitee.com/junjun888/code-generator

    展开全文
  • 开发自己的代码生成工具

    千次阅读 2018-05-27 16:04:56
    c#里边的代码生成自带的有t4,是一个非常好用的代码生成工具,可以自己编写生成逻辑,但是如果不是很熟悉的话,自己控制起来还是有点麻烦,其实我们完全可以自己写一个简单的代码生成工具。 ...

     

    在一个项目中其实有很多代码都是重复的,几乎每个基础模块的代码都有增删改查的功能,而这些功能都是大同小异,如果这些功能都要自己去写,将会大大浪费我们的精力降低效率。所以这种重复性的代码完全可以由代码生成器生成。

    c#里边的代码生成自带的有t4,是一个非常好用的代码生成工具,可以自己编写生成逻辑,但是如果不是很熟悉的话,自己控制起来还是有点麻烦,其实我们完全可以自己写一个简单的代码生成工具。

     

    要生成代码其实很简单,其实不过就是写文件,把我们需要的代码用StringBuilder写好,然后生成文件即可。

     

    生成成功后我们可以在指定的位置到生成的文件

    文件的内容就是我们写入的字符串内容

     

     

    这样虽然代码和文件能够成功的生成,但是会出现一个问题:文件不是自动包含在项目中

     

    需要点击:显示所有文件才能看到生成的代码文件

    然后右键保存就可以把文件包含在项目中

     

    虽然这样可行,但是显然不科学,如果我一次生成的文件很大,会手动做很多工作

    其实可以稍微分析一下就能发现,之所以vs能把文件包含到项目中其实是在配置文件写入了配置的

    就是在csproj文件中

    通过记事本打开就能够看到里边加入的配置,也就是说如果我们在生成代码的同事去向这个csporj文件写入一条配置就能让生成的代码文件自动加入vs的配置中了

     

    然后发现微软有提供专门的类操作csporj文件的类库:Microsoft.Build,vs自带

    但是这个并没有那么一下就会用哇,尝试了比较久发现其实几句代码就能实现向csproj加入配置

    1:先找到csporj所在的目录

    2:打开文件

    3:加入配置

    4:保存文件即可

     

    示例代码如下:

    该项目是单独新建的一个dll,类型为控制台专门用户生成代码的工具,当然生成代码的项目类型都可以

    这样一来我们在生成代码的同时就能自动把生成的文件包含在vs中了,不过还有一个问题就是:通过代码修改了csporj文件需要重新加载才行

     

    虽然点一下就行了,但是如果不用点的话岂不是更完美,尝试用c#执行命令去重新编译项目,但是还是没有成功的自动包含,

    想想ef修改了数据库也需要去保存一下就先放放了。

     

    原文地址:http://www.tnblog.net/aojiancc2/article/details/2406

     

     

     

     

     

     

     

     

      

     

     

    展开全文
  • 代码生成

    千次阅读 2018-06-22 22:17:56
    笔者由于觉得很多东西都用工具可以做到很便利 公司由于换成Springboot和用Springdata JPA开发 所以本人觉得什么都要手写效率不高(觉得超级烦好不好)故使用freemaker生成了一些通用的代码 这里生成用到了两种...

    笔者由于觉得很多东西都用工具可以做到很便利 公司由于换成Springboot和用Springdata JPA开发 所以本人觉得什么都要手写效率不高(觉得超级烦好不好)故使用freemaker生成了一些通用的代码

     

    这里生成用到了两种方式 一种用模板 一种直接在内存生成(字符串拼接) 

    这里用maven来构建项目 后面会等基本功能完善好会扩展到项目里面 这里只能当初单独的生成工程来使用了

    https://gitee.com/TangHuihuang/process  源码放在码云

    大概思路在下面

    1. jdbc连接数据库 循环查找出表


    2. 取得表的列 加入colnames


    3. 取得表的列名类型


    4. 在内存生成bean java文件和Vo的java文件


    5.生成service和dao和controller 用模板生成


    6.编译java文件 获得class对象 

     

     

     

    7.生成页面 完成

     

     

     

     

    先上效果图

    话不多话 直接撸码

    工程结构

    annotation包:

    首先是自定义注解

    package annotation;
    
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    @Retention(RetentionPolicy.RUNTIME)  
    @Target(ElementType.FIELD)//
    public @interface Caption {
    	
    	String value() default "";
    }

    这是用来生成字段对应的文字跟数据库的字段注释对应 后面用来生成jsp页面的label标签的值

    javaclass包下 

    :自定义classLoader 由于我要寻找自己的路径的class 所以继承了ClassLoader 来装饰 这里参考某个博客的写法 但是当时没有记下来~

    package javaclass;
    
    import java.io.IOException;
    
    import javax.tools.*;
    
    
    public class ClassFileManager extends ForwardingJavaFileManager {
    
        private JavaClassFileObject classFileObject;
        /**
         * Creates a new instance of ForwardingJavaFileManager.
         *
         * @param fileManager delegate to this file manager
         */
        public ClassFileManager(JavaFileManager fileManager) {
            super(fileManager);
        }
    
        /**
         * Gets a JavaFileObject file object for output
         * representing the specified class of the specified kind in the given location.
         */
        @Override
        public JavaFileObject getJavaFileForOutput(Location location, String className, JavaFileObject.Kind kind, 
        FileObject sibling) throws IOException {
            classFileObject = new JavaClassFileObject(className, kind);
            return classFileObject;
        }
    
        @Override
        //获得一个定制ClassLoader,返回我们保存在内存的类
        public ClassLoader getClassLoader(Location location) {
            return new ClassLoader() {
                @Override
                protected Class<?> findClass(String name) throws ClassNotFoundException {
                    byte[] classBytes = classFileObject.getClassBytes();
                    return super.defineClass(name, classBytes, 0, classBytes.length);
                }
            };
        }
    }
    package javaclass;
    
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.URI;
    import java.nio.file.WatchEvent.Kind;
    import javax.tools.*;
    
    public class JavaClassFileObject extends SimpleJavaFileObject {
        //用于存储class字节
        ByteArrayOutputStream outputStream;
    
        public JavaClassFileObject(String className, Kind kind) {
            super(URI.create("string:///" + className.replace('.', '/') + kind.extension), kind);
            outputStream = new ByteArrayOutputStream();
        }
    
        @Override
        public OutputStream openOutputStream() throws IOException {
            return outputStream;
        }
    
        public byte[] getClassBytes() {
            return outputStream.toByteArray();
        }
    }
    package javaclass;
    import java.net.URI;
    
    import javax.tools.*;
    
    /**
     * A file object used to represent source coming from a string.
    */
    public class JavaSourceFromString extends SimpleJavaFileObject {
    	/**
    	 * The source code of this "file".
    	 */
    	final String code;
    	/**
    	 * Constructs a new JavaSourceFromString.
    	 * @param name the name of the compilation unit represented by this file object
    	 * @param code the source code for the compilation unit represented by this file object
    	 */
    	public JavaSourceFromString(String name, String code) {
    	    super(URI.create("string:///" + name.replace('.','/') + Kind.SOURCE.extension), Kind.SOURCE);
    	    this.code = code;
    	}
    	
    	@Override
    	public CharSequence getCharContent(boolean ignoreEncodingErrors) {
    	    return code;
    	}
    }

     

    package javaclass;
    
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    
    public class MyClassLoader extends ClassLoader {
    	
    	  private String mLibPath;
    	  
    	  public MyClassLoader(String path) {
    	        // TODO Auto-generated constructor stub
    	        mLibPath = path;
    	    }
    	  
    	  @Override
    	    protected Class<?> findClass(String name) throws ClassNotFoundException {
    	        // TODO Auto-generated method stub
    
    	        String fileName = getFileName(name);
    
    	        File file = new File(mLibPath,fileName);
    
    	        try {
    	            FileInputStream is = new FileInputStream(file);
    
    	            ByteArrayOutputStream bos = new ByteArrayOutputStream();
    	            int len = 0;
    	            try {
    	                while ((len = is.read()) != -1) {
    	                    bos.write(len);
    	                }
    	            } catch (IOException e) {
    	                e.printStackTrace();
    	            }
    
    	            byte[] data = bos.toByteArray();
    	            is.close();
    	            bos.close();
    
    	            return defineClass(name,data,0,data.length);
    
    	        } catch (IOException e) {
    	            // TODO Auto-generated catch block
    	            e.printStackTrace();
    	        }
    
    	        return super.findClass(name);
    	    }
    
    	    //获取要加载 的class文件名
    	    private String getFileName(String name) {
    	        // TODO Auto-generated method stub
    	        int index = name.lastIndexOf('.');
    	        
    	        if(index == -1){ 
    	        	System.out.println(name);
    	            return name+".class";
    	        }else{
    	        	System.out.println(name);
    	            return name.substring(index+1)+".class";
    	        }
    	    }
    
    }
    

     

     

    说下util包:用到的

    jdbc数据库链接

    package util;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class DB {
    	
    	public static String  path = "";   
        public static String url = "";  
        public static String driver = "";  
        public static String user = "";  
        public static String password = "";  
        static{
        	 path = PathUitl.getFilePath("all.properties");
        	 if(path==null){
        		 throw new NullPointerException("获取配置文件路径错误!找不到配置");
        	 }
        	 String jdbcPropertiesPath = PathUitl.getClasspath()+PropertyUtil.getPro(path, "jdbc.url");
        	
        	 driver = PropertyUtil.getPro(jdbcPropertiesPath, "jdbc.classname");
        	 url = PropertyUtil.getPro(jdbcPropertiesPath, "jdbc.url");
        	 user =  PropertyUtil.getPro(jdbcPropertiesPath, "jdbc.username");
        	 password = PropertyUtil.getPro(jdbcPropertiesPath, "jdbc.password");
        }
        	
    
    	public static PreparedStatement getPStmt(Connection connection,String sql) throws SQLException{
    		/*Statement st=connection.createStatement();
    		ResultSet rs=st.executeQuery(sql);*/
    		PreparedStatement pst=connection.prepareStatement(sql);
    	//	pst.execute();
    		return pst;
    	}
    
    	public static void close(PreparedStatement pstmt) throws SQLException {
    		if(pstmt!=null){
    			pstmt.close();
    		}
    		
    	}
    
    	public static Connection getConn() throws SQLException {
    		Connection conn=DriverManager.getConnection(url, user, password);
    		return conn;
    	}
    
    	public static void close(Connection conn) {
    		if(conn!=null){
    			try {
    				conn.close();
    			} catch (SQLException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    		
    	}
    	
    }
    

     

    package util;
    
    import java.io.File;
    
    public class FileUtil {
    
    	public static boolean checkDir(File dir){
    		  return dir.exists()&&dir.isDirectory();
    	}
    }
    
    package util;
    
    import java.io.File;
    
    /**
     * 用separator()方法代替路径中的”/”或”\” 。
     * 用pathSeptarator()方法代替路径中的 ” : ” 或 ” ;” 。
     * @author kaizen
     *
     */
    public class PathUitl {
    
    	 	/**
    	   * 
    	   * @return 获取绝对路径
    	   * 然后在项目路径后面拼接"properties/sysConfig.properties"; 
    	   */
    	 public static String getClasspath()
    	  {
    	    String path = (String.valueOf(Thread.currentThread().getContextClassLoader().getResource(""))).replaceAll("file:/", "").replaceAll("%20", " ").trim();
    	    if (path.indexOf(":") != 1) {
    	      path = File.separator + path;
    	    }
    	    return path;
    	  }
    	 
    	  public static String getPorjectPath()
    	  {
    	    String nowpath = "";
    	    nowpath = System.getProperty("user.dir") + "/";
    	    return nowpath;
    	  }
    	  
    	  public static String getFilePath(String fileName)
    	  {
    	    String nowpath = "";
    	    nowpath =ClassLoader.getSystemResource(fileName).toString().replaceAll("file:/", "");
    	    return nowpath;
    	  }
    	  
    	 
    	  public static void main(String[] args) {
    			System.out.println( PathUitl.getFilePath("jdbc.properties"));//D:/eclipse_workspace/test/target/classes/jdbc.properties
    	    	//String jdbcPropertiesPath = PathUitl.getClasspath()+PropertyUtil.getPro(path, "jdbc.url");
    
    		}
    	  
    }
    

     

    package util;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.Properties;
    
    public class PropertyUtil {
    	private static Properties prop;  
        
        public static void load(String path){  
            //这里的path是项目文件的绝对路径  
            //先获取项目绝对路径:Thread.currentThread().getContextClassLoader().getResource("").getPath();  
            //然后在项目路径后面拼接"properties/sysConfig.properties";  
            prop= new Properties();// 属性集合对象     
            FileInputStream fis = null;    
            try {    
                System.out.println(path);  
                fis = new FileInputStream(path);  
                prop.load(fis);  
            } catch (FileNotFoundException e) {    
                e.printStackTrace();    
            } catch (IOException e) {    
                e.printStackTrace();    
            }finally{
            	try {
            		if(null!=fis){
            			fis.close();
            		}
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}// 关闭流    
            }   
        }  
          
        //参数为要修改的文件路径  以及要修改的属性名和属性值    
        public static Boolean updatePro(String path,String key,String value){  
            if(prop==null){  
                load(path);  
                System.out.println("修改前重新加载一遍");  
            }  
            System.out.println("获取添加或修改前的属性值:"+key+"=" + prop.getProperty(key));  
            prop.setProperty(key, value);    
            FileOutputStream fos = null;
            // 文件输出流     
            try {    
            	fos = new FileOutputStream(path);     
                // 将Properties集合保存到流中     
                prop.store(fos, "Copyright (c) Boxcode Studio");     
                
            } catch (FileNotFoundException e) {    
                // TODO Auto-generated catch block    
                e.printStackTrace();    
                return false;    
            } catch (IOException e) {    
                // TODO Auto-generated catch block    
                e.printStackTrace();    
                return false;    
            }finally{
            	try {
            		if(null!=fos){
            			fos.close();
            		}
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}// 关闭流     
            }   
            System.out.println("获取添加或修改后的属性值:"+key+"=" + prop.getProperty(key));  
            return true;    
        }    
          
      //参数为要修改的文件路径  以及要修改的属性名和属性值    
        public static String getPro(String path,String key){    
            if(prop==null){  
                load(path);  
                System.out.println("重新加载一遍");  
            }  
            FileInputStream fis = null;    
            try {    
                fis = new FileInputStream(path);    
                prop.load(fis);// 将属性文件流装载到Properties对象中     
            } catch (FileNotFoundException e) {    
                e.printStackTrace();    
            } catch (IOException e) {    
                e.printStackTrace();    
            }finally{
            	try {
            		if(null!=fis){
            			fis.close();
            		}
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}// 关闭流    
            }      
            System.out.println("查询到的"+key+"的值:"+prop.getProperty(key));  
            return prop.getProperty(key);    
        }    
        
        public static void main(String[] args) {
        	String path = PathUitl.getFilePath("all.properties");
        	String vaule = PropertyUtil.getPro(path, "jdbc.url");
        	System.out.println(vaule);// /jdbc.properties
    	}
    }
    
    package util;
    
    public class StringUtil {
    
    	
    	 /**
         * 功能:将输入字符串的首字母改成大写
         * 
         * @param str
         * @return
         */
        public static String initcap(String str) {
            char[] ch = str.toCharArray();
            if (ch[0] >= 'a' && ch[0] <= 'z') {
                ch[0] = (char) (ch[0] - 32);
            }
            return new String(ch);
        }
        /**
         * 功能:将输入字符串的首字母改成小写
         * 
         * @param str
         * @return
         */
        public static String initLowerCase(String str) {
            char[] ch = str.toCharArray();
            if (ch[0] >= 'A' && ch[0] <= 'Z') {
                ch[0] = (char) (ch[0] + 32);
            }
            return new String(ch);
        }
        /**
         *  字符转换成大写的字符String
         * @param ch
         * @return
         */
        public static String initChar(char ch){
        	 if (ch >= 'a' && ch <= 'z') {
                 ch = (char) (ch- 32);
             }
             return String.valueOf(ch);
        }
        
        public static String initCapAndUnderline(String str){
        	str = str.substring(0, 1).toUpperCase()+str.substring(1);
        	
        	int i = str.indexOf("_");
        	while(i!=(-1)){
        			if(str.length()-1>i){
        				str = str.substring(0,i)+initChar(str.charAt(i+1))+str.substring(i+2);
        			}else{
        				str = str.substring(0,i);
        			}
        			i = str.indexOf("_");
        	}
        	
        	return str;
        	
        }
        
        public static String initUnderline(String str){
        	int i = str.indexOf("_");
        	while(i!=(-1)){
        			if(str.length()-1>i){
        				str = str.substring(0,i)+initChar(str.charAt(i+1))+str.substring(i+2);
        			}else{
        				str = str.substring(0,i);
        			}
        			i = str.indexOf("_");
        	}
        	
        	return str;
        	
        }
    }
    


    test包下:

     

    生成类在这里

     

    package test;
    
    import java.io.File;
    import java.io.FileWriter;
    import java.io.PrintWriter;
    import java.net.URL;
    import java.net.URLClassLoader;
    import java.sql.Connection;
    import java.sql.DatabaseMetaData;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Date;
    import java.util.List;
    
    import javax.tools.JavaCompiler;
    import javax.tools.StandardJavaFileManager;
    import javax.tools.ToolProvider;
    
    import javaclass.MyClassLoader;
    import util.DB;
    import util.FileUtil;
    import util.PathUitl;
    import util.PropertyUtil;
    import util.StringUtil;
    
    public class ReverseEntity2 {
    	
    
        private static String packageOutPath;// 指定实体生成所在包的路径
        private static String authorName;// 作者名字
        private static String tablename;// 表名
        private static String databasename;// 数据库名
        private List<String> tablenames;// 拿到对应数据库中所有的实体类(实体类需要与其他表明做区分)
        private List<String> colnames; // 列名集合
        private List<String> colTypes; // 列名类型集合
        private List<String> colAnnotation;//注释
        
        public static final String ENTER = "\n";//换行
    
        
        
        private boolean f_util = false; // 是否需要导入包java.util.*
        private boolean f_sql = false; // 是否需要导入包java.sql.*
        
    	public static String  path = "";   //存放配置文件的路径的配置文件
    	private static String jdbcPropertiesPath = "";//获取jdbc的配置文件路径
    
        static{
        	 path = PathUitl.getFilePath("all.properties");
        	 if(path==null){
        		 throw new NullPointerException("获取配置文件路径错误!找不到配置");
        	 }
        	 jdbcPropertiesPath = PathUitl.getClasspath()+PropertyUtil.getPro(path, "jdbc.url");
        	 databasename = PropertyUtil.getPro(jdbcPropertiesPath, "databasename");
        	 packageOutPath = PropertyUtil.getPro(jdbcPropertiesPath, "packageOutPath");
        	 tablename =  PropertyUtil.getPro(jdbcPropertiesPath, "tablename");
        	 authorName = PropertyUtil.getPro(jdbcPropertiesPath, "authorName");
        }
        	 
        	 
        
        // 创建多个实体类
        private void genEntity(List<String> tablenames, Connection conn) {
            // 使用第归生成文件
            for (String tablename : tablenames) {
                this.genEntity(tablename, conn);
            }
        }
    
        // 创建单个实体类
        private void genEntity(String tablename, Connection conn) {
            String sql = "select * from " + tablename;
            
            DatabaseMetaData dbmd = null;  
            try {
    	         dbmd = conn.getMetaData();
    	         ResultSet resultSet = dbmd.getTables(null, "%", tablename, new String[] { "TABLE" });  
    	        
    	         while (resultSet.next()) {  
    	        	 
    	        	 String table=resultSet.getString("TABLE_NAME");  
                     System.out.println(table);
                     
                     if(table.equals(tablename))
                     {
                    	 ResultSet rs = conn.getMetaData().getColumns(null,  conn.getMetaData().getUserName(), tablename, "%");  
                    	 if(rs!=null)
                    	 {
                    		 colnames = new ArrayList<String>();
             	            
                    		 colTypes = new ArrayList<String>();
             	            
                    		 colAnnotation = new ArrayList<String>();
                    		 
                    		 while(rs.next())
                    		 {  
                    			 colnames.add(rs.getString("COLUMN_NAME"));
                    			 colTypes.add(rs.getString("TYPE_NAME"));
                    			 if(null!=rs.getString("REMARKS")){
                    				 colAnnotation.add(rs.getString("REMARKS"));
                    			 }else{
                    				 colAnnotation.add(rs.getString(" "));
                    			 }
                    		 }
                    	 }
                    	 
                     }
    	        	 
    	         }
               
                if (colTypes.contains("datetime")) {
                    f_util = true;
                }
                if (colTypes.contains("image")
                        || colTypes.contains("text")) {
                    f_sql = true;
                }
                System.out.println(colnames);
                System.out.println(colTypes);
            } catch (SQLException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } finally {
            }
            
            // 在内存中生成代码
            String entityContent = parse(tablename);
            String voContent = parseVo(tablename);
    
            // 写入到文件中
            try {
               // File directory = new File("");
               // String outputPath = directory.getAbsolutePath() + "/src/"
                       // + this.packageOutPath.replace(".",File.separator) + StringUtil.initCapAndUnderline(tablename) +File.separator;
                
                String entityOutputPath = PathUitl.getClasspath()
                        /*+ this.packageOutPath.replace(".",File.separator) +File.separator*/
                        +  StringUtil.initCapAndUnderline(tablename) +File.separator;
                
                // 检测路径是否存在,不存在就创建路径
                File entityPath = new File(entityOutputPath);
                
                if(!FileUtil.checkDir(entityPath)){
                	entityPath.mkdirs();
                }
                // 创建文件
                String entityOutputPathJava = entityOutputPath+StringUtil.initCapAndUnderline(tablename) + ".java";
                String voOutputPathJava = entityOutputPath+StringUtil.initCapAndUnderline(tablename) + "Vo.java";
                 System.out.println(entityOutputPathJava);
                File entityFile = new File(entityOutputPathJava);
                File voFile = new File(voOutputPathJava);
    
                
                
                if (!entityFile.exists()) {
                	entityFile.createNewFile();
                }
                if (!voFile.exists()) {
                	voFile.createNewFile();
                }
                
                // 写出到硬盘
                FileWriter fw = new FileWriter(entityFile);
                PrintWriter pw = new PrintWriter(fw);
                
                FileWriter vofw = new FileWriter(voFile);
                PrintWriter vopw = new PrintWriter(vofw);
    
             
                pw.println(entityContent);
                pw.flush();
                pw.close();
                vopw.println(voContent);
                vopw.flush();
                vopw.close();
                
                //编译
                JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
                StandardJavaFileManager fileManager = compiler.getStandardFileManager(null,null, null);
                Iterable fileObject = fileManager.getJavaFileObjects(entityOutputPathJava);
                JavaCompiler.CompilationTask task = compiler.getTask(
                        null, fileManager, null, null, null, fileObject);
                task.call();
                fileManager.close();
                
                //获得实例
                MyClassLoader myClassLoader = new MyClassLoader(entityOutputPath);
                //URLClassLoader classLoader = new URLClassLoader(new URL[]{new URL("file:" +  PathUitl.getClasspath()+ this.packageOutPath.replace(".",File.separator) +File.separator+ initCapAndUnderline(tablename) +File.separator)});
               //这里与Bean  packger的路径一样
                Class beanClass = myClassLoader.loadClass(this.packageOutPath+".bean."+StringUtil.initCapAndUnderline(tablename));
                Object obj = beanClass.newInstance();
                
                
              /*  SimpleJavaFileObject fileObject = new JavaSourceFromString(initCapAndUnderline(tablename),entityContent);
                JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
                JavaFileManager fileManager = new ClassFileManager(compiler.getStandardFileManager(null, null, null));
                JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, null, null, null, Arrays.asList(fileObject));
                task.call();
                
                //获得ClassLoader,加载class文件
                ClassLoader classLoader = fileManager.getClassLoader(null);
                Class beanClass = classLoader.loadClass(initCapAndUnderline(tablename));*/
                
                //生成dao,Service,vo
                Process.processDao(this.packageOutPath,StringUtil.initCapAndUnderline(tablename),entityOutputPath);
                Process.processService(this.packageOutPath,StringUtil.initCapAndUnderline(tablename),entityOutputPath);
                Process.processMService(this.packageOutPath,StringUtil.initCapAndUnderline(tablename), entityOutputPath, obj);
                Process.processServiceImpl(this.packageOutPath,StringUtil.initCapAndUnderline(tablename),entityOutputPath);
                Process.processController(this.packageOutPath,StringUtil.initCapAndUnderline(tablename),entityOutputPath);
                Process.processMController(this.packageOutPath,StringUtil.initCapAndUnderline(tablename),entityOutputPath);
    
                
                //生成jsp页面
                Process.processJsp(obj,entityOutputPath);
                beanClass=null;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        private String parseVo(String tablename2) {
        	 StringBuffer sb = new StringBuffer();
             sb.append("package " + this.packageOutPath + ".vo;\r\n");
             // 判断是否导入工具包
             if (f_util) {
                 sb.append("import java.util.Date;\r\n");
             }
             if (f_sql) {
                 sb.append("import java.sql.*;\r\n");
             }
             sb.append("import annotation.*;\r\n");
            
             sb.append("\r\n");
             // 注释部分
             sb.append("   /**\r\n");
             sb.append("    * " + tablename + " VO类\r\n");
             sb.append("    * " + new Date() + " " + this.authorName + "\r\n");
             sb.append("    */ \r\n");
             // 实体部分 class
             sb.append("\r\n\r\npublic class " + StringUtil.initCapAndUnderline(tablename) + "Vo {\r\n");
             sb.append(ENTER);
             processAllAttrsWithOutAnno(sb);// 属性
             processAllMethod(sb);// get set方法
             sb.append("}\r\n");
    
             
             return sb.toString();
    	}
    
    	private void getAllEntityTable(Connection conn, List<String> tablenames) {
            ResultSet rs = null;
            try {
                DatabaseMetaData dmd = (DatabaseMetaData) conn.getMetaData();
                /*
                 * TABLE_CAT String => 表类别(可为 null) 
                 * TABLE_SCHEM String => 表模式(可为null) 
                 * TABLE_NAME String => 表名称 
                 * TABLE_TYPE String => 表类型
                 */
                rs = dmd.getTables(null, null, "%", null);
                while (rs.next()) {
                    tablenames.add(rs.getString("TABLE_NAME"));
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    
        /**
         * 
         * @param tablename
         * @return
         */
        private String parse(String tablename) {
            StringBuffer sb = new StringBuffer();
            sb.append("package " + this.packageOutPath + ".bean;\r\n");
            // 判断是否导入工具包
            if (f_util) {
                sb.append("import java.util.Date;\r\n");
            }
            if (f_sql) {
                sb.append("import java.sql.*;\r\n");
            }
            sb.append("import annotation.*;\r\n");
            sb.append("import javax.persistence.Column;\r\n");
            sb.append("import javax.persistence.Entity;\r\n");
            sb.append("import javax.persistence.GeneratedValue;\r\n");
            sb.append("import javax.persistence.Id;\r\n");
            sb.append("import javax.persistence.Table;\r\n");
           
            sb.append("\r\n");
            // 注释部分
            sb.append("   /**\r\n");
            sb.append("    * " + tablename + " 实体类\r\n");
            sb.append("    * " + new Date() + " " + this.authorName + "\r\n");
            sb.append("    */ \r\n");
            // 实体部分 class
            sb.append("\r\n@Table(name = \""+tablename+"\")\r\n");
            sb.append("\r\n\r\npublic class " + StringUtil.initCapAndUnderline(tablename) + "{\r\n");
            sb.append(ENTER);
            processAllAttrs(sb);// 属性
            processAllMethod(sb);// get set方法
            sb.append("}\r\n");
    
            
            return sb.toString();
        }
    
        /**
         * 功能:生成所有属性(含有注解)
         * 
         * @param sb
         */
        private void processAllAttrs(StringBuffer sb) {
    
            for (int i = 0; i < colnames.size(); i++) {
            	if(null!=colAnnotation.get(i)&&!colAnnotation.get(i).equals("")){
            		
            		sb.append("\t@Caption(\""+colAnnotation.get(i)+"\")\n");
            	}
            	if(colnames.get(i).equals("seq_id")){
        			sb.append("\t@Id\n");
        			sb.append("\t@GeneratedValue\n");
        			sb.append("\t@Column(name = \""+colnames.get(i)+"\",unique=true,nullable=false)\n");
        		}else{
        			sb.append("\t@Column(name = \""+colnames.get(i)+"\")\n");
        		}
                sb.append("\tprivate " + sqlType2JavaType(colTypes.get(i)) + " "
                        + StringUtil.initUnderline(colnames.get(i)) + ";\r\n");
                sb.append("\n");
            }
            sb.append("\n");
    
        }
        
        /**
         * 功能:生成所有属性(无注解)
         * 
         * @param sb
         */
        private void processAllAttrsWithOutAnno(StringBuffer sb) {
    
            for (int i = 0; i < colnames.size(); i++) {
            	if(null!=colAnnotation.get(i)&&!colAnnotation.get(i).equals("")){
            		
            		sb.append("\t@Caption(\""+colAnnotation.get(i)+"\")\n");
            	}
                sb.append("\tprivate " + sqlType2JavaType(colTypes.get(i)) + " "
                        + StringUtil.initUnderline(colnames.get(i)) + ";\r\n");
                sb.append("\n");
            }
            sb.append("\n");
    
        }
    
        /**
         * 功能:生成所有方法
         * 
         * @param sb
         */
        private void processAllMethod(StringBuffer sb) {
    
            for (int i = 0; i < colnames.size(); i++) {
                sb.append("\tpublic void set" + StringUtil.initCapAndUnderline(colnames.get(i)) + "("
                        + sqlType2JavaType(colTypes.get(i)) + " " + StringUtil.initUnderline(colnames.get(i))
                        + "){\r\n");
                sb.append("\t\tthis." + StringUtil.initUnderline(colnames.get(i)) + "=" + StringUtil.initUnderline(colnames.get(i))
                        + ";\r\n");
                sb.append("\t}\r\n");
                sb.append("\tpublic " + sqlType2JavaType(colTypes.get(i)) + " get"
                        + StringUtil.initCapAndUnderline(colnames.get(i)) + "(){\r\n");
                sb.append("\t\treturn " + StringUtil.initUnderline(colnames.get(i)) + ";\r\n");
                sb.append("\t}\r\n");
            }
    
        }
    
       
        
        
    
        /**
         * 功能:获得列的数据类型
         * 
         * @param sqlType
         * @return
         */
        private String sqlType2JavaType(String sqlType) {
    
            if (sqlType.equalsIgnoreCase("bit")) {
                return "Boolean";
            } else if (sqlType.equalsIgnoreCase("tinyint")) {
                return "Byte";
            } else if (sqlType.equalsIgnoreCase("smallint")) {
                return "Short";
            } else if (sqlType.equalsIgnoreCase("int")) {
                return "Integer";
            } else if (sqlType.equalsIgnoreCase("bigint")) {
                return "Long";
            } else if (sqlType.equalsIgnoreCase("float")) {
                return "Float";
            } else if (sqlType.equalsIgnoreCase("decimal")
                    || sqlType.equalsIgnoreCase("numeric")
                    || sqlType.equalsIgnoreCase("real")
                    || sqlType.equalsIgnoreCase("money")
                    || sqlType.equalsIgnoreCase("smallmoney")) {
                return "Double";
            } else if (sqlType.equalsIgnoreCase("varchar")
                    || sqlType.equalsIgnoreCase("char")
                    || sqlType.equalsIgnoreCase("nvarchar")
                    || sqlType.equalsIgnoreCase("nchar")
                    || sqlType.equalsIgnoreCase("text")) {
                return "String";
            } else if (sqlType.equalsIgnoreCase("datetime")) {
                return "Date";
            } else if (sqlType.equalsIgnoreCase("image")||
            		sqlType.equalsIgnoreCase("blob")||sqlType.equalsIgnoreCase("binary")) {
                return "byte[]";
            }
    
            return null;
        }
    
        /**
         * 出口 TODO
         * 
         * @param args
         */
        public static void main(String[] args) {
        	//String a ="a_a_b_v_";
        	//System.out.println("this is "+StringUtil.initCapAndUnderline(a));
            new ReverseEntity2().start();
    
        }
    
        private void start() {
            // 创建连接
            Connection conn = null;
    		try {
    			conn = DB.getConn();
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    
            if (databasename != null && !databasename.equals("")
                    && tablename != null && !tablename.equals("")) {
                System.out.println("databasename 和 tablename 不能同时存在");
            } else {
                // 如果配置文件中有数据库名字,则可以拿到其中所有的实体类
                if (databasename != null && !databasename.equals("")) {
                    // 获取所有实体表名字
                    tablenames = new ArrayList<String>();
                    getAllEntityTable(conn, tablenames);
                    System.out.println("tablenames"+tablenames);
                    // 为每个实体表生成实体类
                    genEntity(tablenames, conn);
                } else {
                	String[] tablenames = tablename.split(",");
                    // 为指定实体表生成实体类
                	for (int i = 0; i < tablenames.length; i++) {
                		genEntity(tablenames[i], conn);
    				}
                }
    
                // 关闭数据库连接
                if (conn != null) {
                    DB.close(conn);
                }
            }
    
        }
    }

     

     

    根据模板生成的细节在这里

    package test;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStreamWriter;
    import java.io.Writer;
    import java.lang.reflect.Field;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import annotation.Caption;
    import freemarker.template.Configuration;
    import freemarker.template.DefaultObjectWrapper;
    import freemarker.template.Template;
    import freemarker.template.TemplateException;
    import util.PathUitl;
    import util.StringUtil;
    
    /**
     * version 1.0
     * @author kaizen
     *
     */
    public class Process {
    	
    	 public static final String prefix="${bean.";
         public static final String suffix="}";
         public static final String jspFilePrefix="/jsp/";
         public static final String ftlFilePrefix="/templetes/";
         public static final String ENTER = "\n";//换行
    
       //创建一个合适的Configration对象 
         private static Configuration configuration = new Configuration();
         
         static{
        	 
    	     try 
    	     {
    			configuration.setDirectoryForTemplateLoading(new File(PathUitl.getClasspath()));
    			configuration.setObjectWrapper(new DefaultObjectWrapper());  
    	        configuration.setDefaultEncoding("UTF-8");   //这个一定要设置,不然在生成的页面中 会乱码  
    	        
    	     } catch (IOException e) {
    	    	 // TODO Auto-generated catch block
    	    	 e.printStackTrace();
    	     }  
            
         }
    
    	
    	
    	
    	public static void processJsp(Object obj,String path){
    		if(obj==null||path==null){
    			throw new NullPointerException();
    		}
    		
    		 try {  
    	            
    	            //获取或创建一个模版。  
    	            Template template = configuration.getTemplate(jspFilePrefix+"input.jsp");
    	            Template template2 = configuration.getTemplate(jspFilePrefix+"list.jsp");
    	            Template template3 = configuration.getTemplate(jspFilePrefix+"view.jsp");
    	            
    	            Map<String, Object> inputParamMap = new HashMap<String, Object>();
    	            Map<String, Object> listParamMap = new HashMap<String, Object>();
    	           
    
    	            
    	            Map<String,Object> captions = new  HashMap<String, Object>();
    	            Map<String,Object> listCaptions = new  HashMap<String, Object>();
    	            
    	            //List fields = new ArrayList();
    	            Map<String, Object> fields = new HashMap<String, Object>();
    	            
    	            Field[] fs =  obj.getClass().getDeclaredFields();
    	            for (Field f : fs) {
    	            	Caption caption = f.getAnnotation(Caption.class);
    	            	if(null!=caption){
    	            		if(caption.value().equals("主键")){
    		            		inputParamMap.put("seqId", f.getName());
    		            		inputParamMap.put("seqIdValue",prefix+f.getName()+suffix);
    		            	}else{
    		            		captions.put(f.getName(),caption.value());
    		            	}
    	            		fields.put( f.getName(),prefix+f.getName()+suffix);
    	            		listCaptions.put(prefix+f.getName()+suffix, caption.value());
    	            	}
    				}
    	            //Input
    	            inputParamMap.put("fields", fields); 
    	            inputParamMap.put("captions", captions); 
    	            inputParamMap.put("lowercaseBean", StringUtil.initLowerCase(obj.getClass().getSimpleName())); 
    	            
    	            //List
    	            listParamMap.put("listCaptions", listCaptions); 
    	            listParamMap.put("page", "page"); 
    	            listParamMap.put("fields", fields);  
    	            listParamMap.put("pageNumber", "${page.pageNumber}");
    	            listParamMap.put("totalPages", "${page.totalPages}");
    	            listParamMap.put("search", "search"); 
    	            listParamMap.put("lowercaseBean", StringUtil.initLowerCase(obj.getClass().getSimpleName())); 
    	            //File file = new File("");
    	            //FileOutputStream fos = new FileOutputStream(file);
    	            Writer writer  = new OutputStreamWriter(new FileOutputStream(path+StringUtil.initLowerCase(obj.getClass().getSimpleName())+"Input.jsp"),"UTF-8"); 
    	            Writer writer2 = new OutputStreamWriter(new FileOutputStream(path+StringUtil.initLowerCase(obj.getClass().getSimpleName())+"List.jsp"),"UTF-8");
    	            Writer writer3 = new OutputStreamWriter(new FileOutputStream(path+StringUtil.initLowerCase(obj.getClass().getSimpleName()+"View.jsp")),"UTF-8");
    
    	            template.process(inputParamMap, writer);  
    	            template2.process(listParamMap, writer2);
    	            template3.process(inputParamMap, writer3); 
    	            System.out.println("恭喜,生成成功~~");  
    	        } catch (IOException e) {  
    	            e.printStackTrace();  
    	        } catch (TemplateException e) {  
    	            e.printStackTrace();  
    	        } 
    	}
    	
    	public static void processDao(String packgerOutPath,String beanName,String path){
    		
    		//获取或创建一个模版。  
            try 
            {
    			Template template = configuration.getTemplate(ftlFilePrefix+"dao.ftl");
               
    			Map<String, Object> ParamMap = new HashMap<String, Object>();
                ParamMap.put("packageOutPath", packgerOutPath);
                ParamMap.put("bean", beanName);
    
                Writer writer  = new OutputStreamWriter(new FileOutputStream(path+"I"+beanName+"Dao.java"),"UTF-8"); 
                template.process(ParamMap, writer);  
    
    
    			
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    	public static void processService(String packgerOutPath,String beanName,String path){
    		//获取或创建一个模版。  
            try 
            {
    			Template template = configuration.getTemplate(ftlFilePrefix+"iservice.ftl");
               
    			Map<String, Object> ParamMap = new HashMap<String, Object>();
                ParamMap.put("packageOutPath", packgerOutPath);
                ParamMap.put("bean", beanName);
    
                Writer writer  = new OutputStreamWriter(new FileOutputStream(path+"I"+beanName+"Service.java"),"UTF-8"); 
                template.process(ParamMap, writer);  
    
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    	public static void processMService(String packgerOutPath,String beanName,String path,Object obj){
    		//获取或创建一个模版。  
            try 
            {
    			Template template = configuration.getTemplate(ftlFilePrefix+"mservice.ftl");
    			Map<String, Object> ParamMap = new HashMap<String, Object>();
    			
    			Map<String, Object> fields = new HashMap<String, Object>();
    			 Field[] fs =  obj.getClass().getDeclaredFields();
    	            for (Field f : fs) {
                		fields.put( f.getName(),"get"+StringUtil.initCapAndUnderline(f.getName()));
    				}
                ParamMap.put("packageOutPath", packgerOutPath);
                ParamMap.put("bean", beanName);
                ParamMap.put("fields", fields);
                Writer writer  = new OutputStreamWriter(new FileOutputStream(path+"M"+beanName+"Service.java"),"UTF-8"); 
                template.process(ParamMap, writer);  
    
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		
    	}
    	public static void processServiceImpl(String packgerOutPath,String beanName,String path){
    		//获取或创建一个模版。  
            try 
            {
    			Template template = configuration.getTemplate(ftlFilePrefix+"service.ftl");
               
    			Map<String, Object> ParamMap = new HashMap<String, Object>();
                ParamMap.put("packageOutPath", packgerOutPath);
                ParamMap.put("bean", beanName);
    
                Writer writer  = new OutputStreamWriter(new FileOutputStream(path+beanName+"Service.java"),"UTF-8"); 
                template.process(ParamMap, writer);  
    
    
    			
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		
    	}
    	public static void processController(String packgerOutPath,String beanName,String path){
    		
    		//获取或创建一个模版。  
            try 
            {
    			Template template = configuration.getTemplate(ftlFilePrefix+"controller.ftl");
    			Template template2 = configuration.getTemplate(ftlFilePrefix+"url.ftl");
    			
    			
    			Map<String, Object> ParamMap = new HashMap<String, Object>();
                ParamMap.put("packageOutPath", packgerOutPath);
                ParamMap.put("bean", beanName);
                ParamMap.put("lowercaseBean", StringUtil.initLowerCase(beanName));
    
                Writer writer  = new OutputStreamWriter(new FileOutputStream(path+beanName+"Controller.java"),"UTF-8"); 
                Writer writer1  = new OutputStreamWriter(new FileOutputStream(path+"URL.java"),"UTF-8"); 
    
                template.process(ParamMap, writer);  
                template2.process(ParamMap, writer1); 
    			
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    	public static void processMController(String packgerOutPath,String beanName,String path){
    		
    		//获取或创建一个模版。  
            try 
            {
    			Template template = configuration.getTemplate(ftlFilePrefix+"mcontroller.ftl");
    			Template template2 = configuration.getTemplate(ftlFilePrefix+"murl.ftl");
    
    			Map<String, Object> ParamMap = new HashMap<String, Object>();
                ParamMap.put("packageOutPath", packgerOutPath);
                ParamMap.put("bean", beanName);
                ParamMap.put("lowercaseBean", StringUtil.initLowerCase(beanName));
    
                Writer writer  = new OutputStreamWriter(new FileOutputStream(path+"M"+beanName+"Controller.java"),"UTF-8"); 
                Writer writer1  = new OutputStreamWriter(new FileOutputStream(path+"Murl.java"),"UTF-8"); 
    
                template.process(ParamMap, writer);  
                template2.process(ParamMap, writer1); 
    
    			
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    	
    
    
    	/*public static void main(String[] args) {
    	  System.out.println(PathUitl.getClasspath());
        System.out.println(PathUitl.getPorjectPath());
        //System.out.println(ClassLoader.getSystemResource("static.html"));
        System.out.println(Bean.class.getSimpleName());//Bean
        System.out.println(Bean.class.getName());//bean.Bean
        
       
        
        Bean bean = new Bean();
    	 try {  
              //创建一个合适的Configration对象 
              Configuration configuration = new Configuration();  
              
            
             configuration.setDirectoryForTemplateLoading(new File(PathUitl.getClasspath()));  
              configuration.setObjectWrapper(new DefaultObjectWrapper());  
              configuration.setDefaultEncoding("UTF-8");   //这个一定要设置,不然在生成的页面中 会乱码  
              //获取或创建一个模版。  
              Template template = configuration.getTemplate(filePrefix+"input.jsp");
              Template template2 = configuration.getTemplate(filePrefix+"list.jsp");
              Template template3 = configuration.getTemplate(filePrefix+"view.jsp");
              
              Map<String, Object> inputParamMap = new HashMap<String, Object>();
              Map<String, Object> listParamMap = new HashMap<String, Object>();
             
    
              
              Map<String,Object> captions = new  HashMap<String, Object>();
              Map<String,Object> listCaptions = new  HashMap<String, Object>();
              
              //List fields = new ArrayList();
              Map<String, Object> fields = new HashMap<String, Object>();
              
              Field[] fs =  bean.getClass().getDeclaredFields();
              for (Field f : fs) {
              	Caption caption = f.getAnnotation(Caption.class);
              	if(caption.value().equals("主键")){
              		inputParamMap.put("seqId", f.getName());
              		inputParamMap.put("seqIdValue",prefix+f.getName()+suffix);
              	}else{
              		captions.put(f.getName(),caption.value());
              	}
              	
              	fields.put( f.getName(),prefix+f.getName()+suffix);
              	listCaptions.put(prefix+f.getName()+suffix, caption.value());
    			}
              //Input
              inputParamMap.put("fields", fields);  
              inputParamMap.put("captions", captions); 
              //List
              listParamMap.put("listCaptions", listCaptions); 
              listParamMap.put("page", "page"); 
              listParamMap.put("fields", fields);  
              listParamMap.put("pageNumber", "${page.pageNumber}");
              listParamMap.put("totalPages", "${page.totalPages}");
              listParamMap.put("search", "search"); 
              
              Writer writer  = new OutputStreamWriter(new FileOutputStream(bean.getClass().getSimpleName()+"Input.jsp"),"UTF-8"); 
              Writer writer2 = new OutputStreamWriter(new FileOutputStream(bean.getClass().getSimpleName()+"List.jsp"),"UTF-8");
              Writer writer3 = new OutputStreamWriter(new FileOutputStream(bean.getClass().getSimpleName()+"View.jsp"),"UTF-8");
    
              template.process(inputParamMap, writer);  
              template2.process(listParamMap, writer2);
              template3.process(inputParamMap, writer3); 
              System.out.println("恭喜,生成成功~~");  
          } catch (IOException e) {  
              e.printStackTrace();  
          } catch (TemplateException e) {  
              e.printStackTrace();  
          } 
    }*/
    	
    }

     

    基本java代码都在上面了 有需要ftl模板的可以加我QQ:964388652 但是每个人实现都不同 熟悉一下freemarker就能写出简单的代码生成了 这里的代码就做了简单的划分 没有做得很完善

    展开全文
  • Mybatis Plus————代码生成

    万次阅读 多人点赞 2018-06-17 21:10:49
    代码生成器MyBatis Plus是MyBatis的扩展框架,而代码生成器是MP的核心功能之一,另外还有 “条件构造器”和“通用CRUD”等功能。步骤演示mp的代码生成器有两种方式自动生成代码,一种是通过main方法来执行程序,另一...
  • 代码生成技术

    2019-03-22 02:15:35
    NULL 博文链接:https://winjoys.iteye.com/blog/975940
  • MATLAB/Simulink自动代码生成(一)

    万次阅读 多人点赞 2019-02-27 19:29:32
    Simulink自带了种类繁多、功能强大的模块库,在基于模型设计的开发流程下,Simulink不仅通过仿真可以进行早期设计的验证,还可以生成C/C++、PLC等代码直接应用于PC、MCU、DSP等平台。在嵌入式软件开发中发挥着...
  • java代码自动生成

    万次阅读 多人点赞 2018-10-15 17:46:41
    Java代码自动生成(优化封装版) 一、前言  最近自己做了个项目,为了提升开发效率,节约不必要的开发时间,特意花时间优化了下代码自动生成工具。成果不错,效率提高了不少,空闲时间特意写下这篇文章,希望对...
  • ssm框架通用代码生成工具

    千次阅读 热门讨论 2018-05-25 17:48:58
    做了俩三个月吧,发现通用代码确实很多。由于忙,没时间做工具,于是用excel公式,勉强算个工具使用。 网上搜了一下,没找到什么很顺手的工具。想自己写一个。做了几天有点小成果。发上来看看有没有同行需要,...
  • 牛牛代码生成器是一款功能齐全,操作灵活,使用简单的c#代码生成器,它能支持Oracle及Sql Server两种数据库,生成的代码规范、完整且高效,尤其与本站中的 牛牛C# 程序开发平台 配合使用,堪称经典组合。下面,...
  • 动软.Net代码生成器源码

    千次下载 热门讨论 2013-12-25 13:35:04
    动软.Net代码生成器V2.41源码
  • 开源C#代码生成器

    热门讨论 2016-01-18 17:01:37
    开源C#代码生成器基于winform+DevExpress+RazorEngine.NET 支持SQLSERVER,ORACLE,MYSQL,自定义模板
  • 最新版java代码生成器基于springMvc+mysql 后台功能一键生成 压缩包里的jdk文件目录 请自行下载jdk1.8.0_45版本并覆盖进去 没有jdk是运行不起来的 也可以下载其他jdk版本 但是jdk1.8.0_45这个文件目录名称不要更改 ...
  • 很牛的带Ajax功能的ASP.NET+C#代码生成工具,能生成从表示层到SQL脚本的所有代码,只需使用VS2008+SQL2005(无需编码,生成后将代码加入我提供的框架就成一个项目,编译后即可使用)生成前需将数据库按要求设计好,...
  • 基于Freemarker模板的纯Java代码实现的代码生成器工具
  • 写过三层的人都知道,那代码的重复量有多少,看了传智博客的教程,自己做一个代码生成器也是很简单的。 需要了解的知识点:查询指定数据库中包含那些表,用到系统视图:1.select * from INFORMATION_SCHEMA.Tables...
  • MyBatis学习之代码生成器Generator

    万次阅读 2016-12-31 23:45:50
    MyBatis Generator (MBG) 是一个Mybatis的代码生成器,它可以帮助我们根据数据库中表的设计生成对应的实体类,xml Mapper文件,接口以及帮助类(也就是我们可以借助该类来进行简单的CRUD操作),这样就避免了我们每...
  • JavaScript代码生成器

    2009-02-23 15:02:48
    是不是在为编写JS而烦恼呢? 呵呵,现在终于不用担心了,这里有专门的代码生成, 能自动生成JavaScript的好工具,试试你就知道了
  • 图片代码生成器

    2013-04-19 12:21:35
    图片代码生成器,对刚入门HTML的初学者很有帮助
  • 常用代码生成工具汇总(转)

    万次阅读 2016-11-01 17:09:23
    一款人气很旺国外的基于模板的dotnet代码生成器 官方网站:http://www.codesmithtools.com 官方论坛:http://forum.codesmithtools.com/default.aspx 版权形式:30天试用 开源:否 需要先注册确认...
  • 免费代码生成器,直接生成后台和前端代码 现在不管是哪个公司进行互联网程序的开发,都有自己的一套代码生成器。大部分公司都是直接从网上找源码,进行适当的修改变成自己的代码生成器。 如果公司业务主要是后台管理...
  • c++代码生成器

    千次阅读 2015-04-21 23:12:22
    一个C++类代码生成器 2013-10-30 14:12 457人阅读 评论(0) 收藏 举报 类something程序员c语言语言 目录(?)[+] 引言 make_cpp_class.py这个项目的目的是使产生c++类的头文件和实现文件更容易。...
  • 垃圾代码生成器

    2018-02-26 10:19:47
    iOS 垃圾代码生成器 用来提审iOS马甲包。。。。。。。。。。
  • SpringBoot代码生成器

    2020-02-03 18:48:15
    Code-Generate 代码生成器 简介 ???? 一个基于原生Mysql & SpringBoot & Mybatis 的代码生成器,建表之后即可完全解放双手,适合: 规律性定制化开发 解决双手,一键完成固有代码 原生...
  • G代码生成器

    2018-10-12 17:19:51
    软件G代码自动生成,很方便的小编程软件。对于那些切割和机床上都很有用的小工具
  • 题外话:最近搭建ssm框架写项目,重复功能太多,数据库表也很多,于是依靠了代码生成器去提高开发效果,下面是本人正在使用的一个代码生成器,亲测可用,按着步骤来会实现的,相信你一定会受益匪浅! 前言: 我们...
  • 动软代码生成器

    千次阅读 2012-07-19 10:05:13
    动软代码: public Add( model) C#代码: public int Add(BW_MinPressure.Model.m_Group model) 动软代码: { #>private _; C#代码: private int _id; private string _vc_name; privat
  • ABP代码生成器

    千次阅读 2019-06-09 22:51:44
    ABP代码生成器 基于.NET Core、RazorPage,借鉴SmartCode,完成ABP的代码生成器。 github地址如下: https://github.com/i542873057/SJNScaffolding 代码生成器计划 1、中文转英文字段,自动起名字,主要关键字段...
  • 我的springboot代码生成器

    千次阅读 2019-06-24 11:43:31
    ​ spring-boot-code-generator项目背景 ...    我记得是刚毕业出来的时候,接触到好几个项目,发现每次开发后台管理模块的时候,发现都是做的事情都是一样的,做的逻辑都是一样的,只是业务不一样而已,并且在...
  • 本压缩包已经解密,具体使用方法,参见 http://www.cnblogs.com/mienreal/p/4931263.html

空空如也

1 2 3 4 5 ... 20
收藏数 3,036,874
精华内容 1,214,749
关键字:

代码生成