赵冬冬 před 4 roky
rodič
revize
5f7148542a

+ 70 - 0
pom.xml

@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>org.example</groupId>
+    <artifactId>gen-code-local</artifactId>
+    <version>1.0.0</version>
+    
+    <dependencies>
+        <!--jdbc驱动包-->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <version>5.1.35</version>
+        </dependency>
+        <!--mybatis-generator核心包-->
+        <dependency>
+            <groupId>org.mybatis.generator</groupId>
+            <artifactId>mybatis-generator-core</artifactId>
+            <version>1.3.2</version>
+        </dependency>
+        <!--vm模版生产器-->
+        <dependency>
+            <groupId>org.apache.velocity</groupId>
+            <artifactId>velocity-engine-core</artifactId>
+            <version>2.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.velocity</groupId>
+            <artifactId>velocity-tools</artifactId>
+            <version>2.0</version>
+        </dependency>
+        <!--mybatis-->
+        <dependency>
+            <groupId>org.mybatis</groupId>
+            <artifactId>mybatis</artifactId>
+            <version>3.4.6</version>
+        </dependency>
+        <!-- SpringBoot Web容器 -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+            <version>2.4.0</version>
+        </dependency>
+
+        <!--防止进入swagger页面报类型转换错误,排除2.9.2中的引用,手动增加1.5.21版本-->
+        <dependency>
+            <groupId>io.swagger</groupId>
+            <artifactId>swagger-annotations</artifactId>
+            <version>1.5.21</version>
+        </dependency>
+
+
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <configuration>
+                    <source>8</source>
+                    <target>8</target>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>

+ 244 - 0
src/main/java/gencode/AjaxResultVo.java

@@ -0,0 +1,244 @@
+package gencode;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+@ApiModel("实体返回")
+public class AjaxResultVo<T> {
+    /**
+     * 状态码
+     */
+    @ApiModelProperty("状态码")
+    private int code;
+    /**
+     * 消息
+     */
+
+    @ApiModelProperty(" 消息")
+    private String msg;
+
+    /**
+     * 数据对象
+     */
+    @ApiModelProperty("数据对象")
+    private T data;
+
+    public int getCode() {
+        return code;
+    }
+
+    public void setCode(int code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    public T getData() {
+        return data;
+    }
+
+    public void setData(T data) {
+        this.data = data;
+    }
+
+    /**
+     * 初始化一个新创建的 AjaxResultVo 对象,使其表示一个空消息。
+     */
+    public AjaxResultVo() {
+    }
+
+    /**
+     * 初始化一个新创建的 AjaxResultVo 对象
+     *
+     * @param code 状态码
+     * @param msg  返回内容
+     */
+    public AjaxResultVo(int code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    /**
+     * 初始化一个新创建的 AjaxResultVo 对象
+     *
+     * @param code 状态码
+     * @param msg  返回内容
+     * @param data 数据对象
+     */
+    public AjaxResultVo(int code, String msg, T data) {
+        this.code = code;
+        this.msg = msg;
+        if (null != data) {
+            this.data = data;
+        }
+    }
+
+    /**
+     * 返回成功消息
+     *
+     * @return 成功消息
+     */
+    public static AjaxResultVo success() {
+        return AjaxResultVo.success("操作成功");
+    }
+
+    /**
+     * 返回成功数据
+     *
+     * @return 成功消息
+     */
+    public static <T> AjaxResultVo success(T data) {
+        return AjaxResultVo.success("操作成功", data);
+    }
+
+    /**
+     * 返回成功消息
+     *
+     * @param msg 返回内容
+     * @return 成功消息
+     */
+    public static AjaxResultVo success(String msg) {
+        return AjaxResultVo.success(msg, null);
+    }
+
+    /**
+     * 返回成功消息
+     *
+     * @param msg  返回内容
+     * @param data 数据对象
+     * @return 成功消息
+     */
+    public static <T> AjaxResultVo success(String msg, T data) {
+
+        return new AjaxResultVo(HttpStatus.SUCCESS, msg, data);
+    }
+
+    /**
+     * 返回错误消息
+     *
+     * @return
+     */
+    public static AjaxResultVo error() {
+        return AjaxResultVo.error("操作失败");
+    }
+
+    /**
+     * 返回错误消息
+     *
+     * @param msg 返回内容
+     * @return 警告消息
+     */
+    public static AjaxResultVo error(String msg) {
+        return AjaxResultVo.error(msg, null);
+    }
+
+    /**
+     * 返回错误消息
+     *
+     * @param msg  返回内容
+     * @param data 数据对象
+     * @return 警告消息
+     */
+    public static AjaxResultVo error(String msg, Object data) {
+        return new AjaxResultVo(HttpStatus.ERROR, msg, data);
+    }
+
+    /**
+     * 返回错误消息
+     *
+     * @param code 状态码
+     * @param msg  返回内容
+     * @return 警告消息
+     */
+    public static AjaxResultVo error(int code, String msg) {
+        return new AjaxResultVo(code, msg, null);
+    }
+}
+
+class HttpStatus {
+    /**
+     * 操作成功
+     */
+    public static final int SUCCESS = 200;
+
+    /**
+     * 对象创建成功
+     */
+    public static final int CREATED = 201;
+
+    /**
+     * 请求已经被接受
+     */
+    public static final int ACCEPTED = 202;
+
+    /**
+     * 操作已经执行成功,但是没有返回数据
+     */
+    public static final int NO_CONTENT = 204;
+
+    /**
+     * 资源已被移除
+     */
+    public static final int MOVED_PERM = 301;
+
+    /**
+     * 重定向
+     */
+    public static final int SEE_OTHER = 303;
+
+    /**
+     * 资源没有被修改
+     */
+    public static final int NOT_MODIFIED = 304;
+
+    /**
+     * 参数列表错误(缺少,格式不匹配)
+     */
+    public static final int BAD_REQUEST = 400;
+
+    /**
+     * 未授权
+     */
+    public static final int UNAUTHORIZED = 401;
+
+    /**
+     * 访问受限,授权过期
+     */
+    public static final int FORBIDDEN = 403;
+
+    /**
+     * 资源,服务未找到
+     */
+    public static final int NOT_FOUND = 404;
+
+    /**
+     * 不允许的http方法
+     */
+    public static final int BAD_METHOD = 405;
+
+    /**
+     * 资源冲突,或者资源被锁
+     */
+    public static final int CONFLICT = 409;
+
+    /**
+     * 不支持的数据,媒体类型
+     */
+    public static final int UNSUPPORTED_TYPE = 415;
+
+    /**
+     * 系统内部错误
+     */
+    public static final int ERROR = 500;
+
+    /**
+     * 接口未实现
+     */
+    public static final int NOT_IMPLEMENTED = 501;
+}

+ 160 - 0
src/main/java/gencode/CommentGenerator.java

@@ -0,0 +1,160 @@
+package gencode;
+
+import org.mybatis.generator.api.IntrospectedColumn;
+import org.mybatis.generator.api.IntrospectedTable;
+import org.mybatis.generator.api.dom.java.*;
+import org.mybatis.generator.internal.DefaultCommentGenerator;
+import org.mybatis.generator.internal.util.StringUtility;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Properties;
+
+public class CommentGenerator extends DefaultCommentGenerator {
+
+    private static final String authorName = "zdd";
+
+    private static final String EXAMPLE_SUFFIX = "Example";
+    private static final String API_MODEL_PROPERTY_FULL_CLASS_NAME = "io.swagger.annotations.ApiModelProperty";
+    private static final String API_MODEL_FULL_CLASS_NAME = "io.swagger.annotations.ApiModel";
+
+
+    private Properties properties;
+    private Properties systemPro;
+    private boolean suppressDate;
+    private boolean suppressAllComments;
+    private String currentDateStr;
+
+    public CommentGenerator() {
+        super();
+        properties = new Properties();
+        systemPro = System.getProperties();
+        suppressDate = false;
+        suppressAllComments = false;
+        currentDateStr = (new SimpleDateFormat("yyyy-MM-dd")).format(new Date());
+    }
+
+    public void addFieldComment(Field field, IntrospectedTable introspectedTable,
+                                IntrospectedColumn introspectedColumn) {
+        if (suppressAllComments) {
+            return;
+        }
+        StringBuilder sb = new StringBuilder();
+        field.addJavaDocLine("/**");
+        sb.append(" * ");
+        sb.append(introspectedColumn.getRemarks());
+        sb.append("\n");
+        sb.append("	* 列名:" + introspectedColumn.getActualColumnName() + " 类型:" + introspectedColumn.getJdbcTypeName()
+                + "(" + introspectedColumn.getLength() + ")" + " 允许空:" + introspectedColumn.isNullable() + " 缺省值:"
+                + introspectedColumn.getDefaultValue());
+        field.addJavaDocLine(sb.toString());
+        String remarks = introspectedColumn.getRemarks();
+        //根据参数和备注信息判断是否添加备注信息
+        if (StringUtility.stringHasValue(remarks)) {
+//            addFieldJavaDoc(field, remarks);
+            //数据库中特殊字符需要转义
+            if (remarks.contains("\"")) {
+                remarks = remarks.replace("\"", "'");
+            }
+            //给model的字段添加swagger注解
+        }
+        field.addJavaDocLine(" */");
+        field.addJavaDocLine("@ApiModelProperty(value = \"" + remarks + "\")");
+
+    }
+
+    public void addFieldComment(Field field, IntrospectedTable introspectedTable) {
+
+    }
+
+    public void addGeneralMethodComment(Method method, IntrospectedTable introspectedTable) {
+
+        if (suppressAllComments) {
+            return;
+        }
+        StringBuilder sb = new StringBuilder();
+        sb.append("/**");
+        sb.append("\n");
+        sb.append("	* ");
+        sb.append("\n");
+        sb.append("	* @author "+authorName + "\n");
+        if (!suppressDate) {
+
+            sb.append("	* @date " + currentDateStr + "\n");
+
+        }
+
+        List<Parameter> parameters = method.getParameters();
+
+        for (Parameter parameter : parameters) {
+
+            sb.append("	* @param " + parameter.getName() + "\n");
+
+        }
+
+        sb.append("	* @return " + method.getReturnType());
+        sb.append("\n" + "	*/");
+        method.addJavaDocLine(sb.toString());
+    }
+
+    public void addGetterComment(Method method, IntrospectedTable introspectedTable,
+                                 IntrospectedColumn introspectedColumn) {
+
+    }
+
+    public void addSetterComment(Method method, IntrospectedTable introspectedTable,
+                                 IntrospectedColumn introspectedColumn) {
+
+    }
+
+    public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable, boolean markAsDoNotDelete) {
+
+        super.addClassComment(innerClass, introspectedTable, markAsDoNotDelete);
+    }
+
+    public void addClassComment(InnerClass innerClass, IntrospectedTable introspectedTable) {
+
+    }
+
+
+    public void addModelClassComment(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
+
+        if (suppressAllComments) {
+            return;
+        }
+        StringBuilder sb = new StringBuilder();
+        sb.append("/**");
+        sb.append("\n");
+        sb.append("* ");
+        sb.append("\n");
+        sb.append("* @author "+authorName + "\n");
+        if (!suppressDate) {
+
+            sb.append("* @date " + currentDateStr + "\n");
+
+        }
+        String tableName = introspectedTable.getFullyQualifiedTableNameAtRuntime();
+        sb.append("* 数据表" + introspectedTable.getFullyQualifiedTableNameAtRuntime() + "映射bean,由Mybaits自动生成工具生成");
+        sb.append("\n" + "*/");
+        topLevelClass.addJavaDocLine(sb.toString());
+
+//        topLevelClass.addJavaDocLine("@ApiModel(value = \""+tableName+"\")");
+
+
+    }
+
+    @Override
+    public void addJavaFileComment(CompilationUnit compilationUnit) {
+        super.addJavaFileComment(compilationUnit);
+        //只在model中添加swagger注解类的导入
+        if (!compilationUnit.isJavaInterface() && !compilationUnit.getType().getFullyQualifiedName().contains(EXAMPLE_SUFFIX)) {
+            compilationUnit.addImportedType(new FullyQualifiedJavaType(API_MODEL_PROPERTY_FULL_CLASS_NAME));
+        }
+        if (!compilationUnit.isJavaInterface() && !compilationUnit.getType().getFullyQualifiedName().contains(EXAMPLE_SUFFIX)) {
+//            compilationUnit.addImportedType(new FullyQualifiedJavaType(API_MODEL_FULL_CLASS_NAME));
+            compilationUnit.addImportedType(new FullyQualifiedJavaType(API_MODEL_PROPERTY_FULL_CLASS_NAME));
+        }
+    }
+
+}

+ 249 - 0
src/main/java/gencode/GeneratorCode.java

@@ -0,0 +1,249 @@
+package gencode;
+
+import org.apache.velocity.Template;
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.VelocityEngine;
+import org.mybatis.generator.api.MyBatisGenerator;
+import org.mybatis.generator.config.Configuration;
+import org.mybatis.generator.config.xml.ConfigurationParser;
+import org.mybatis.generator.internal.DefaultShellCallback;
+
+import java.io.*;
+import java.sql.*;
+import java.util.ArrayList;
+import java.util.List;
+
+public class GeneratorCode {
+    //数据驱动
+    final static String DRIVER_CLASS = "com.mysql.jdbc.Driver";
+    //数据库名
+    final static String DATABASE_NAME = "future";
+    //数据连接地址
+    final static String CONNECTION_URL = "jdbc:mysql://49.235.127.212:3306/" + DATABASE_NAME + "?characterEncoding=UTF-8";
+    //数据库登录名
+    final static String USER_ID = "root";
+    //密码
+    final static String PASS_WORD = "123456";
+    //数据库表名
+    final static String TABLE_NAME = "pms_base_position";
+    //实体名称首字母小写
+    final static String ENTITY_NAME = "position";
+    //基础目录(不允许修改)
+    final static String BASE_PACKAGE_NAME = "src.main.java.";
+    //controller模版文件包结构
+    final static String PACKAGE_NAME = BASE_PACKAGE_NAME + "com.activiti6";
+    //controller模版文件包结构
+    final static String CONTROLLER_PACKAGE_NAME = "com.activiti6.controller";
+
+    //service模版文件包结构
+    final static String SERVICE_PACKAGE_NAME = "com.activiti6.service";
+    //service模版文件包结构
+    final static String SERVICE_IMPL_PACKAGE_NAME = "com.activiti6.service.impl";
+    //实体生产包名
+    final static String ENTITY_PACKAGE_NAME = "com.activiti6.model.entity";
+    //接口mybatis mapper
+    final static String MAPPER_PACKAGE_NAME = "com.activiti6.mapper";
+    //mybatis xml文件
+    final static String XMLMAPPER_PACKAGE_NAME = "com.activiti6.mapper";
+
+
+    /**
+     * 不能修改
+     */
+    //controller模版文件目录
+    final static String CONTROLLER_DIR = "src/main/resources/vm/java/controller/ModelController.java.vm";
+    //service 模版文件目录
+    final static String SERVICE_DIR = "src/main/resources/vm/java/service/ModelSeevice.java.vm";
+    //serviceImpl模版文件目录
+    final static String SERVICEIMPL_DIR = "src/main/resources/vm/java/service/impl/ModelServiceImpl.java.vm";
+    //my_batis_config模版文件目录
+    final static String MY_BATIS_CONFIG_DIR = "src/main/resources/vm/mybatis/generatorConfig.xml.vm";
+
+
+    private static void productionJavaFiles() throws Exception {
+        VelocityEngine ve = new VelocityEngine();
+        ve.init();
+
+        VelocityContext ctx = new VelocityContext();
+        ctx.put("controller_package_name", CONTROLLER_PACKAGE_NAME);
+        ctx.put("service_package_name", SERVICE_PACKAGE_NAME);
+        ctx.put("service_impl_package_name", SERVICE_IMPL_PACKAGE_NAME);
+        ctx.put("ENTITY_PACKAGE_NAME", ENTITY_PACKAGE_NAME);
+        ctx.put("XMLMAPPER_PACKAGE_NAME", XMLMAPPER_PACKAGE_NAME);
+        ctx.put("MAPPER_PACKAGE_NAME", MAPPER_PACKAGE_NAME);
+        ctx.put("entity", ENTITY_NAME);
+        //获取主键类型
+        MysqlDataType mysqlDataType = getIdType();
+        if (null == mysqlDataType) {
+            throw new Exception("数据库连接错误");
+        }
+        ctx.put("mysqlDataType", mysqlDataType);
+        String entityName = ENTITY_NAME.substring(0, 1).toUpperCase() + ENTITY_NAME.substring(1);
+        ctx.put("Entity", entityName);
+        saveController(ve, ctx, entityName);
+        saveService(ve, ctx, entityName);
+        saveServiceImpl(ve, ctx, entityName);
+
+        return;
+    }
+
+    private static void saveController(VelocityEngine ve, VelocityContext ctx, String entityName) throws IOException {
+        Template t = ve.getTemplate(CONTROLLER_DIR);
+        //创建文件
+        String substring = entityName + "Controller.java";
+        //输出文件
+        String replace = PACKAGE_NAME.replace('.', '/') + "/controller/";
+        String s = replace + substring;
+        File controllerFile = new File(s);
+        saveFile(t, ctx, controllerFile);
+    }
+
+    private static void saveService(VelocityEngine ve, VelocityContext ctx, String entityName) throws IOException {
+        Template t = ve.getTemplate(SERVICE_DIR);
+        //创建文件
+        String substring = entityName + "Service.java";
+        //输出文件
+        String replace = PACKAGE_NAME.replace('.', '/') + "/service/";
+        String s = replace + substring;
+        File controllerFile = new File(s);
+        saveFile(t, ctx, controllerFile);
+    }
+
+    private static void saveServiceImpl(VelocityEngine ve, VelocityContext ctx, String entityName) throws IOException {
+        Template t = ve.getTemplate(SERVICEIMPL_DIR);
+        //创建文件
+        String substring = entityName + "ServiceImpl.java";
+        //输出文件
+        String replace = PACKAGE_NAME.replace('.', '/') + "/service/impl/";
+        String s = replace + substring;
+        File controllerFile = new File(s);
+        saveFile(t, ctx, controllerFile);
+    }
+
+    private static void saveFile(Template t, VelocityContext ctx, File saveFile) throws IOException {
+        //获得它的父类文件,如果不存在,就创建
+        if (!saveFile.getParentFile().exists()) {
+
+            saveFile.getParentFile().mkdirs();
+        }
+        //创建文件输出流
+        FileOutputStream outStream = new FileOutputStream(saveFile);
+
+        //因为模板整合的时候,需要提供一个Writer,所以创建一个Writer
+        OutputStreamWriter writer = new OutputStreamWriter(outStream);
+
+        //创建一个缓冲流
+        BufferedWriter bufferWriter = new BufferedWriter(writer);
+
+        //5 Merge the template and you data toproduce the output
+        t.merge(ctx, bufferWriter);
+
+        bufferWriter.flush();//强制刷新
+
+        outStream.close();
+
+        bufferWriter.close();
+    }
+
+    public static void saveMybatisFile() throws IOException {
+
+        VelocityEngine ve = new VelocityEngine();
+        ve.init();
+
+        VelocityContext ctx = new VelocityContext();
+        ctx.put("DRIVER_CLASS", DRIVER_CLASS);
+        ctx.put("CONNECTION_URL", CONNECTION_URL);
+        ctx.put("USER_ID", USER_ID);
+        ctx.put("PASS_WORD", PASS_WORD);
+        ctx.put("ENTITY_NAME", ENTITY_NAME);
+        ctx.put("entity", ENTITY_NAME);
+        String entityName = ENTITY_NAME.substring(0, 1).toUpperCase() + ENTITY_NAME.substring(1);
+        ctx.put("Entity", entityName);
+        ctx.put("TABLE_NAME", TABLE_NAME);
+        ctx.put("ENTITY_PACKAGE_NAME", ENTITY_PACKAGE_NAME);
+        ctx.put("XMLMAPPER_PACKAGE_NAME", XMLMAPPER_PACKAGE_NAME);
+        ctx.put("MAPPER_PACKAGE_NAME", MAPPER_PACKAGE_NAME);
+        Template t = ve.getTemplate(MY_BATIS_CONFIG_DIR);
+        String s = "src/main/resources/mybatis/generator/generatorConfig.fxml";
+        File controllerFile = new File(s);
+        saveFile(t, ctx, controllerFile);
+        try {
+            GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap();
+            generatorSqlmap.generator();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * mybatis文件生成
+     *
+     * @throws Exception
+     */
+    public void generator() throws Exception {
+
+        List<String> warnings = new ArrayList<String>();
+        boolean overwrite = true;
+        //指定 逆向工程配置文件
+        File configFile = new File("src/mybatis/generator/generatorConfig.xml");
+        ConfigurationParser cp = new ConfigurationParser(warnings);
+        Configuration config = cp.parseConfiguration(configFile);
+        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
+        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,
+                callback, warnings);
+        myBatisGenerator.generate(null);
+
+    }
+
+    public static MysqlDataType getIdType() {
+        MysqlDataType enumType = null;
+        try {
+            //1、注册JDBC驱动
+            Class.forName(DRIVER_CLASS);
+            //2、获取数据库连接
+            Connection connection = DriverManager.getConnection(CONNECTION_URL, USER_ID, PASS_WORD);
+            //3、操作数据库
+            Statement statement = connection.createStatement();//获取操作数据库的对象
+            String sql = "SELECT COLUMN_NAME,COLUMN_COMMENT,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,COLUMN_KEY " +
+                    "FROM information_schema. COLUMNS WHERE table_schema = '" + DATABASE_NAME + "' AND table_name = '" + TABLE_NAME + "'";
+            ResultSet resultSet = statement.executeQuery(sql);//执行sql,获取结果集
+
+            while (resultSet.next()) { //遍历结果集,取出数据
+                //输出数据
+                String key = resultSet.getString("COLUMN_KEY");
+                if ("PRI".equals(key)) {
+                    String column_name = resultSet.getString("COLUMN_NAME");
+                    System.out.println("主键名称:" + column_name);
+                    String data_type = resultSet.getString("DATA_TYPE");
+                    System.out.println("主键类型:" + data_type);
+                    enumType = MysqlDataType.getEnumType(data_type);
+                    if (null != enumType) {
+                        enumType.setColumn(column_name);
+                    }
+                    break;
+                }
+            }
+            //4、关闭结果集、数据库操作对象、数据库连接
+            resultSet.close();
+            statement.close();
+            connection.close();
+
+        } catch (ClassNotFoundException e) {
+            e.printStackTrace();
+        } catch (SQLException e) {
+            e.printStackTrace();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return enumType;
+    }
+
+    public static void main(String[] args) throws Exception {
+        //使用mybatis文件
+        saveMybatisFile();
+        //生产java文件
+        productionJavaFiles();
+
+    }
+
+}

+ 41 - 0
src/main/java/gencode/GeneratorSqlmap.java

@@ -0,0 +1,41 @@
+package gencode;
+
+import org.mybatis.generator.api.MyBatisGenerator;
+import org.mybatis.generator.config.Configuration;
+import org.mybatis.generator.config.xml.ConfigurationParser;
+import org.mybatis.generator.internal.DefaultShellCallback;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+public class GeneratorSqlmap {
+	/**
+	 * mybatis文件生成
+	 * @throws Exception
+	 */
+	public void generator() throws Exception{
+
+		List<String> warnings = new ArrayList<String>();
+		boolean overwrite = true;
+		//指定 逆向工程配置文件
+		File configFile = new File("src/main/resources/mybatis/generator/generatorConfig.fxml");
+		ConfigurationParser cp = new ConfigurationParser(warnings);
+		Configuration config = cp.parseConfiguration(configFile);
+		DefaultShellCallback callback = new DefaultShellCallback(overwrite);
+		MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,
+				callback, warnings);
+		myBatisGenerator.generate(null);
+
+	}
+
+	public static void main(String[] args)  {
+		try {
+			GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap();
+			generatorSqlmap.generator();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+}

+ 180 - 0
src/main/java/gencode/MysqlDataType.java

@@ -0,0 +1,180 @@
+package gencode;
+
+import java.util.Arrays;
+
+/**
+ * @Author Miracle Luna
+ * @Date 2019/6/9 23:40
+ * @Version 1.0
+ */
+public enum MysqlDataType {
+
+    INT("int", "Integer", "java.lang.Integer"),
+    INTEGER("integer", "Long", "java.lang.Long"),
+    BIGINT("bigint", "Long", "java.lang.Long"),
+    TINYINT("tinyint", "Integer", "java.lang.Integer"),
+    SMALLINT("smallint", "Integer", "java.lang.Integer"),
+    MEDIUMINT("mediumint", "Integer", "java.lang.Integer"),
+    DOUBLE("double", "Double", "java.lang.Double"),
+    DECIMAL("decimal", "BigDecimal", "java.math.BigDecimal"),
+    VARCHAR("varchar", "String", "java.lang.String"),
+    CHAR("char", "String", "java.lang.String"),
+    TEXT("text", "String", "java.lang.String"),
+    DATE("date", "Date", "java.sql.Date"),
+    ERROR(null, null, null);
+    private String key;
+
+    private String value;
+
+    private String column;
+
+    private String javaPackage;
+
+    /**
+     * @param key
+     * @param value
+     */
+    MysqlDataType(String key, String value, String javaPackage) {
+        this.key = key;
+        this.value = value;
+        this.javaPackage = javaPackage;
+    }
+
+    public String getColumn() {
+        return column;
+    }
+
+    public void setColumn(String column) {
+        this.column = upperTable(column);
+    }
+
+
+    /**
+     * 方法说明 :将首字母和带 _ 后第一个字母 转换成大写
+     *
+     * @return :String
+     * @author :HFanss
+     * @date :2018年5月31日下午9:52:19
+     */
+    public static String upperTable(String str) {
+        // 字符串缓冲区
+        StringBuffer sbf = new StringBuffer();
+        // 如果字符串包含 下划线
+        if (str.contains("_")) {
+            // 按下划线来切割字符串为数组
+            String[] split = str.split("_");
+            // 循环数组操作其中的字符串
+            for (int i = 0, index = split.length; i < index; i++) {
+                // 递归调用本方法
+                String upperTable = upperTable(split[i]);
+                // 添加到字符串缓冲区
+                sbf.append(upperTable);
+            }
+        } else {// 字符串不包含下划线
+            // 转换成字符数组
+            char[] ch = str.toCharArray();
+            // 判断首字母是否是字母
+            if (ch[0] >= 'a' && ch[0] <= 'z') {
+                // 利用ASCII码实现大写
+                ch[0] = (char) (ch[0] - 32);
+            }
+            // 添加进字符串缓存区
+            sbf.append(ch);
+        }
+        // 返回
+        return sbf.toString();
+    }
+
+    /**
+     * @return Returns the key.
+     */
+    public String getKey() {
+        return key;
+    }
+
+    /**
+     * @return Returns the name.
+     */
+    public String getValue() {
+        return value;
+    }
+
+    /**
+     * @return Returns the name.
+     */
+    public String getJavaPackage() {
+        return javaPackage;
+    }
+
+    /**
+     * 根据Key得到枚举的Value
+     * 普通for循环遍历,比较判断
+     *
+     * @param key
+     * @return
+     */
+    public static MysqlDataType getEnumType(String key) {
+        MysqlDataType[] alarmGrades = MysqlDataType.values();
+        for (int i = 0; i < alarmGrades.length; i++) {
+            if (alarmGrades[i].getKey().equals(key)) {
+                return alarmGrades[i];
+            }
+        }
+        return MysqlDataType.ERROR;
+    }
+
+    /**
+     * 根据Key得到枚举的Value
+     * 增强for循环遍历,比较判断
+     *
+     * @param key
+     * @return
+     */
+    public static MysqlDataType getEnumType1(String key) {
+        MysqlDataType[] alarmGrades = MysqlDataType.values();
+        for (MysqlDataType alarmGrade : alarmGrades) {
+            if (alarmGrade.getKey().equals(key)) {
+                return alarmGrade;
+            }
+        }
+        return MysqlDataType.ERROR;
+    }
+
+    /**
+     * 根据Key得到枚举的Value
+     * Lambda表达式,比较判断(JDK 1.8)
+     *
+     * @param key
+     * @return
+     */
+    public static MysqlDataType getEnumType2(String key) {
+        MysqlDataType[] alarmGrades = MysqlDataType.values();
+        MysqlDataType result = Arrays.asList(alarmGrades).stream()
+                .filter(alarmGrade -> alarmGrade.getKey().equals(key))
+                .findFirst().orElse(MysqlDataType.ERROR);
+
+        return result;
+    }
+
+    /**
+     * 根据Key得到枚举的Value
+     * Lambda表达式,比较判断(JDK 1.8)
+     *
+     * @param key
+     * @return
+     */
+    public static MysqlDataType getEnumType3(String key) {
+        return Arrays.asList(MysqlDataType.values()).stream()
+                .filter(alarmGrade -> alarmGrade.getKey().equals(key))
+                .findFirst().orElse(MysqlDataType.ERROR);
+    }
+
+    public static void main(String[] args) {
+        String dataType = "tinyint";
+        MysqlDataType enumType = MysqlDataType.getEnumType(dataType);
+        System.out.println("第一种方式:普通for循环遍历,比较判断:" + enumType.getJavaPackage());
+//        System.out.println("\n第二种方式:增强for循环遍历,比较判断 \n" + grade + ": " + MysqlDataType.getEnumType1(grade).getValue());
+//        System.out.println("\n第三种方式:Lambda表达式,比较判断 \n" + grade + ": " + MysqlDataType.getEnumType2(grade).getValue());
+//        System.out.println("\n第四种方式:Lambda表达式,比较判断 \n" + grade + ": " + MysqlDataType.getEnumType3(grade).getValue());
+    }
+}

+ 8 - 0
src/main/java/strategy/Car.java

@@ -0,0 +1,8 @@
+package strategy;
+
+public class Car implements Vehicle {
+    @Override
+    public void go() {
+        System.out.print("汽车出行");
+    }
+}

+ 8 - 0
src/main/java/strategy/Motorcycle.java

@@ -0,0 +1,8 @@
+package strategy;
+
+public class Motorcycle implements Vehicle{
+    @Override
+    public void go() {
+        System.out.print("摩托车出现");
+    }
+}

+ 19 - 0
src/main/java/strategy/Trip.java

@@ -0,0 +1,19 @@
+package strategy;
+
+public class Trip {
+    private Vehicle vehicle;
+
+    public void go() {
+        vehicle.go();
+    }
+
+    public void setVehicle(Vehicle vehicle) {
+        this.vehicle = vehicle;
+    }
+
+    public static void main(String[] args) {
+        Trip trip= new Trip();
+        trip.setVehicle(new Car());
+        trip.go();
+    }
+}

+ 6 - 0
src/main/java/strategy/Vehicle.java

@@ -0,0 +1,6 @@
+package strategy;
+
+public interface Vehicle {
+
+    public void go();
+}

+ 53 - 0
src/main/resources/mybatis/generator/generatorConfig.fxml

@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE generatorConfiguration
+        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
+        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
+
+<generatorConfiguration>
+    <context id="testTables" targetRuntime="MyBatis3">
+
+        <commentGenerator type="gencode.CommentGenerator">
+            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
+            <property name="suppressAllComments" value="true"/>
+            <property name="suppressDate" value="true"/>
+            <property name="addRemarkComments" value="true"/>
+        </commentGenerator>
+        <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
+        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
+                        connectionURL="jdbc:mysql://49.235.127.212:3306/future?characterEncoding=UTF-8"
+                        userId="root"
+                        password="123456">
+        </jdbcConnection>
+        <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
+            NUMERIC 类型解析为java.math.BigDecimal -->
+        <javaTypeResolver>
+            <property name="forceBigDecimals" value="false"/>
+        </javaTypeResolver>
+
+        <!-- targetProject:生成PO类的位置 -->
+        <javaModelGenerator targetPackage="com.activiti6.model.entity"
+                            targetProject="src/main/java">
+            <!-- enableSubPackages:是否让schema作为包的后缀 -->
+            <property name="enableSubPackages" value="false"/>
+            <!-- 从数据库返回的值被清理前后的空格 -->
+            <property name="trimStrings" value="true"/>
+        </javaModelGenerator>
+        <!-- targetProject:mapper映射文件生成的位置 -->
+        <sqlMapGenerator targetPackage="com.activiti6.mapper"
+                         targetProject="src/main/java">
+            <!-- enableSubPackages:是否让schema作为包的后缀 -->
+            <property name="enableSubPackages" value="false"/>
+        </sqlMapGenerator>
+        <!-- targetPackage:mapper接口生成的位置 -->
+        <javaClientGenerator type="XMLMAPPER"
+                             targetPackage="com.activiti6.mapper"
+                             targetProject="src/main/java">
+            <!-- enableSubPackages:是否让schema作为包的后缀 -->
+            <property name="enableSubPackages" value="false"/>
+        </javaClientGenerator>
+        <!-- 指定数据库表 -->
+        <table schema="root" tableName="pms_base_position" domainObjectName="Position">
+        </table>
+
+    </context>
+</generatorConfiguration>

+ 63 - 0
src/main/resources/vm/java/controller/ModelController.java.vm

@@ -0,0 +1,63 @@
+package $!{controller_package_name};
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import gencode.AjaxResultVo;
+
+import java.util.List;
+
+import $!{service_package_name}.$!{Entity}Service;
+
+import $!{ENTITY_PACKAGE_NAME}.$!{Entity};
+
+
+@RestController
+@RequestMapping("/$!{entity}")
+public class $!{Entity}Controller {
+
+    @Autowired
+    private $!{Entity}Service $!{entity}Service;
+
+    @PostMapping
+    @ResponseBody
+    public AjaxResultVo add(@RequestBody $!{Entity} $!{entity}) {
+        return AjaxResultVo.success($!{entity}Service.add($!{entity}));
+    }
+
+
+    @GetMapping("/list")
+    @ResponseBody
+    public AjaxResultVo list() {
+
+        List<$!{Entity}> list = $!{entity}Service.list();
+        return AjaxResultVo.success(list);
+    }
+
+    @GetMapping("/{id}")
+    @ResponseBody
+    public AjaxResultVo get(@PathVariable("id") $!{mysqlDataType.value} id) {
+        return AjaxResultVo.success($!{entity}Service.get(id));
+    }
+
+    @PutMapping
+    @ResponseBody
+    public AjaxResultVo update(@RequestBody $!{Entity} $!{entity}) {
+        return AjaxResultVo.success($!{entity}Service.update($!{entity}));
+    }
+    /**
+     * 批量删除请假业务
+     */
+    @DeleteMapping("/{id}")
+    @ResponseBody
+    public AjaxResultVo delete(@PathVariable("id") $!{mysqlDataType.value} id) {
+        return AjaxResultVo.success($!{entity}Service.delete(id));
+    }
+    /**
+     * 批量删除请假业务
+     */
+    @DeleteMapping
+    @ResponseBody
+    public AjaxResultVo deleteByIds(@RequestBody List<$!{mysqlDataType.value}> ids) {
+        return AjaxResultVo.success($!{entity}Service.deleteByIds(ids));
+    }
+}

+ 21 - 0
src/main/resources/vm/java/service/ModelSeevice.java.vm

@@ -0,0 +1,21 @@
+package $!{service_package_name};
+
+import $!{ENTITY_PACKAGE_NAME}.$!{Entity};
+import $!{mysqlDataType.javaPackage};
+import java.util.List;
+
+public interface  $!{Entity}Service {
+
+    public int add($!{Entity} $!{entity});
+
+    public List<$!{Entity}> list();
+
+    public $!{Entity} get($!{mysqlDataType.value} id);
+
+    public int update($!{Entity} $!{entity});
+
+    public int delete($!{mysqlDataType.value} id);
+
+    public int deleteByIds(List<$!{mysqlDataType.value}> ids);
+
+}

+ 53 - 0
src/main/resources/vm/java/service/impl/ModelServiceImpl.java.vm

@@ -0,0 +1,53 @@
+package $!{service_impl_package_name};
+
+import org.springframework.stereotype.Service;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import $!{service_package_name}.$!{Entity}Service;
+import $!{ENTITY_PACKAGE_NAME}.$!{Entity};
+import $!{MAPPER_PACKAGE_NAME}.$!{Entity}Mapper;
+import $!{ENTITY_PACKAGE_NAME}.$!{Entity}Example;
+
+import $!{mysqlDataType.javaPackage};
+import java.util.List;
+
+@Service
+public class $!{Entity}ServiceImpl implements $!{Entity}Service {
+
+    @Autowired
+    private $!{Entity}Mapper $!{entity}Mapper;
+
+    @Override
+    public int add($!{Entity} $!{entity}) {
+        return $!{entity}Mapper.insertSelective($!{entity});
+    }
+
+    @Override
+    public List<$!{Entity}> list() {
+        $!{Entity}Example $!{entity}Example = new $!{Entity}Example();
+        return $!{entity}Mapper.selectByExample($!{entity}Example);
+    }
+
+    @Override
+    public $!{Entity} get($!{mysqlDataType.value} id) {
+        return $!{entity}Mapper.selectByPrimaryKey(id);
+    }
+
+    @Override
+    public int update($!{Entity} $!{entity}) {
+        return $!{entity}Mapper.updateByPrimaryKeySelective($!{entity});
+    }
+
+    @Override
+    public int delete($!{mysqlDataType.value} id) {
+        return $!{entity}Mapper.deleteByPrimaryKey(id);
+    }
+
+    @Override
+    public int deleteByIds(List<$!{mysqlDataType.value}> ids) {
+        $!{Entity}Example $!{entity}Example = new $!{Entity}Example();
+        $!{Entity}Example.Criteria criteria = $!{entity}Example.createCriteria();
+        criteria.and$!{mysqlDataType.column}In(ids);
+        return $!{entity}Mapper.deleteByExample($!{entity}Example);
+    }
+}

+ 53 - 0
src/main/resources/vm/mybatis/generatorConfig.xml.vm

@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE generatorConfiguration
+        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
+        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
+
+<generatorConfiguration>
+    <context id="testTables" targetRuntime="MyBatis3">
+
+        <commentGenerator type="gencode.CommentGenerator">
+            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
+            <property name="suppressAllComments" value="true"/>
+            <property name="suppressDate" value="true"/>
+            <property name="addRemarkComments" value="true"/>
+        </commentGenerator>
+        <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
+        <jdbcConnection driverClass="$!{DRIVER_CLASS}"
+                        connectionURL="$!{CONNECTION_URL}"
+                        userId="$!{USER_ID}"
+                        password="$!{PASS_WORD}">
+        </jdbcConnection>
+        <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
+            NUMERIC 类型解析为java.math.BigDecimal -->
+        <javaTypeResolver>
+            <property name="forceBigDecimals" value="false"/>
+        </javaTypeResolver>
+
+        <!-- targetProject:生成PO类的位置 -->
+        <javaModelGenerator targetPackage="$!{ENTITY_PACKAGE_NAME}"
+                            targetProject="src/main/java">
+            <!-- enableSubPackages:是否让schema作为包的后缀 -->
+            <property name="enableSubPackages" value="false"/>
+            <!-- 从数据库返回的值被清理前后的空格 -->
+            <property name="trimStrings" value="true"/>
+        </javaModelGenerator>
+        <!-- targetProject:mapper映射文件生成的位置 -->
+        <sqlMapGenerator targetPackage="$!{XMLMAPPER_PACKAGE_NAME}"
+                         targetProject="src/main/java">
+            <!-- enableSubPackages:是否让schema作为包的后缀 -->
+            <property name="enableSubPackages" value="false"/>
+        </sqlMapGenerator>
+        <!-- targetPackage:mapper接口生成的位置 -->
+        <javaClientGenerator type="XMLMAPPER"
+                             targetPackage="$!{MAPPER_PACKAGE_NAME}"
+                             targetProject="src/main/java">
+            <!-- enableSubPackages:是否让schema作为包的后缀 -->
+            <property name="enableSubPackages" value="false"/>
+        </javaClientGenerator>
+        <!-- 指定数据库表 -->
+        <table schema="root" tableName="$!{TABLE_NAME}" domainObjectName="$!{Entity}">
+        </table>
+
+    </context>
+</generatorConfiguration>