Giter VIP home page Giter VIP logo

web_template_generate's Introduction

简介

快速生成web开发后台代码模版,操作简单,导入依赖后一行代码即可生成所有模版,配合MyBatisX使用效果更佳

生成的内容包括maven依赖yaml配置基本模板代码,同时也支持自定义生成器

v2.0 基于 MyBatisFlex 代码生成器进行二次开发,保持 v1.0 功能的同时,支持根据表生成对应的业务类

快速开始

第一步:下载lib文件夹中的jar包

第二步:新建一个maven工程

第三步:将lib中的jar包导入项目中

第四步:在项目任意地方,编写一个类,用于生成模版代码,参考如下

import tech.beanmak1r.generate.project.Project;
import tech.beanmak1r.generate.project.Projects;
import tech.beanmak1r.generate.starter.datebase.mybatis.MyBatisGenerateConfig;

/**
 * 效果演示
 */
public class Main {
    public static void main(String[] args) {
        // MyBatis 生成器配置对象
        MyBatisGenerateConfig myBatisGenerateConfig = new MyBatisGenerateConfig();
        // 生成实体类时,忽略表的前缀
        myBatisGenerateConfig.setTablePrefix("tb_");
        // 需要生成的表
        myBatisGenerateConfig.setGenerateTable("tb_user", "tb_account");
        // 获取 Project 对象 参数1数据库名称 参数2数据库用户密码
        Project project = Projects.all("db_flex", "dk18111448638", myBatisGenerateConfig);
        // 设置 作者
        project.setAuthor("beanmak1r");
        // 执行生成
        project.generate();
    }
}

整体项目结构如下

截屏2023-05-04 10.16.13

完成后,运行main方法即可生成代码

生成的模板

即可以生成哪些相关代码

模板可选项

默认支持生成Spring boot parentSpring boot WebSpring boot ValidationMybatis-PlusMybatis-FlexLombokRedisTemplateSpringDocredisson、的模版代码。可以通过Projects工具类快速构建需要的模板

knife4j 已被移除,由 SpringFox 替代

装配简单模板(Spring boot + SpringWeb + MybatisFlex + lombok)

/**
 * 简单配置 ssm + lombok
 *
 * @param dbName     数据库名称
 * @param dbPassword 数据库密码
 * @return Project对象
 */
public static Project simple(String dbName, String dbPassword);


/**
 * 简单配置 ssm + lombok,使用 MyBatis 代码生成器
 *
 * @param dbName     数据库名称
 * @param dbPassword 数据库密码
 * @param config     MyBatis 代码生成器配置对象
 * @return Project对象
 */
public static Project simple(String dbName, String dbPassword, MyBatisGenerateConfig config);

装配所有模板(除 redissonmybatisplus

/**
 * 全部装配
 *
 * @param dbName     数据库名称
 * @param dbPassword 数据库密码
 * @return Project对象
 */
public static Project all(String dbName, String dbPassword);

/**
 * 全部装配,使用 MyBatis 代码生成器
 *
 * @param dbName     数据库名称
 * @param dbPassword 数据库密码
 * @param config     MyBatis 代码生成器配置对象
 * @return Project对象
 */
public static Project all(String dbName, String dbPassword, MyBatisGenerateConfig config);

按需装配模版 按照约定大于配置的原则,所有配置均有默认值,可以自行选配

// 自己按需定制模板
Project customerProject = Projects.customer();
// basePackage,默认为 groupId
customerProject.setBasePackage("com.xxx.xxx");
// 更改版本控制,由 jdk8-SpringBoot2.3.6.RELEASE 修改为 jdk17-SpringBoot2.6.13
customerProject.setVersionControls(new Jdk17VersionControl());

// Starter 工厂,单例实现
StarterFactory factory = StarterFactorySingleImpl.getStarterFactory();

// 构建一个 MyBatisFlexStarter,用于生成 MyBatisFlex 相关代码
MyBatisFlexStarter myBatisFlexStarter = factory.getInstance(MyBatisFlexStarter.class);
// 用于 MyBatisFlex 代码生成器的配置信息
MyBatisGenerateConfig myBatisGenerateConfig = new MyBatisGenerateConfig();
// 生成实体类时,忽略表的前缀
myBatisGenerateConfig.setTablePrefix("tb_");
// 需要生成的表
myBatisGenerateConfig.setGenerateTable("tb_user", "tb_account");
myBatisFlexStarter
        // MyBatisFlex 依赖版本
        .version("1.5.5")
        // 开启 MyBatisFlex 代码生成
        .enableMyBatisFlexGenerate(myBatisGenerateConfig);
customerProject.addStarter(myBatisFlexStarter);

// Spring Boot Parent依赖
SpringBootParentStarter parentStarter = factory.getInstance(SpringBootParentStarter.class);
parentStarter
        // 启动类名称,默认为 artifactId + 'Application'
        .mainBootName("MainApplication")
        // yaml 中的 spring.application.name 配置项,,默认为 artifactId
        .yamlAppName("test-app")
        // 是否导入spring-boot-test-starter,默认导入
        .test(true)
        // 是否导入spring-boot-devtools-starter,默认不导入(MyBatisFlex 与 devtools 整合会有一些小 bug)
        .devtools(false);
customerProject.addStarter(parentStarter);

// web 场景依赖 + validation 场景依赖
SpringBootWebStarter webStarter = factory.getInstance(SpringBootWebStarter.class);
webStarter
        // 是否配置数据校验,默认开启
        .valid(true)
        // 是否导入断言工具类,默认开启
        .asserts(true)
        // 端口号,默认8080
        .serverPort(8080)
        // 是否配置跨域,默认开启
        .cors(true);
customerProject.addStarter(webStarter);


// mybatisPlus 场景依赖
MyBatisPlusStarter myBatisPlusStarter = factory.getInstance(MyBatisPlusStarter.class);
myBatisPlusStarter
        // 是否开启逻辑删除(isDeleted属性,0未删除,1删除),默认开启
        .logicDelete(true)
        // mysql版本
        .version("8.0.32");
// MyBatisPlusStarter 与 MyBatisFlexStarter 只能存在一个
//customerProject.addStarter(myBatisPlusStarter);

// MySql 场景依赖
MySqlStarter mySqlStarter = factory.getInstance(MySqlStarter.class)
        // 数据库用户名,默认root
        .username("root")
        // 数据库密码,默认'123456'
        .password("dk18111448638")
        // 数据库名称,默认为 artifactId
        .dbName("db_flex")
        // 数据库端口号,默认为 3306
        .port(3306);
customerProject.addStarter(mySqlStarter);

// Lombok 依赖
LombokStarter lombokStarter = factory.getInstance(LombokStarter.class);
customerProject.addStarter(lombokStarter);

// redisTemplate,暂时支持单机
RedisStarter redisStarter = factory.getInstance(RedisStarter.class)
        // redis 服务器ip,默认本地地址
        .host("localhost")
        // redis端口号,默认 6379
        .port(6379)
        // 密码,默认无
        .password("123456")
        // 哪个数据库,取值0~15,默认0
        .database(1);
customerProject.addStarter(redisStarter);

// redisson 场景依赖,暂支持单机配置
RedissonStarter redissonStarter = factory.getInstance(RedissonStarter.class);
redissonStarter
        // 哪个数据库,取值0~15,默认0
        .database(0)
        // redisson依赖版本
        .version("3.13.6")
        // redis端口号,默认 6379
        .port(6379)
        // redis 服务器ip,默认本地地址
        .host("127.0.0.1")
        // redis 密码
        .password("123456");
customerProject.addStarter(redissonStarter);


// SpringDocStarter 场景依赖
SpringDocStarter springDocStarter = factory.getInstance(SpringDocStarter.class);
springDocStarter
        // SpringDoc 版本
        .version("1.7.0")
        // open API 访问路径,默认 /api-docs
        .openAPIPath("/api-docs")
        // ui 接口访问路径,默认 /swagger-ui.html
        .swaggerUIPath("/swagger-ui.html");
customerProject.addStarter(springDocStarter);

// 开始执行生成代码
customerProject.generate();

自定义模板

提供了自定义模板功能,自定义模板只需要继承StarterAdapter,按需重写addCode()addDependency()addYaml()方法即可

public class CustomerStarter extends StarterAdapter {
    
    @Override
    protected void addDependency(BaseDependency dependency) {
        DependencyItem dependencyItem = new DependencyItem();
      	// 必须配置
        dependencyItem.setGroupId("org.springframework.boot");
        dependencyItem.setArtifactId("spring-boot-starter-web");
        dependencyItem.setTabName(DependencyConst.DEPENDENCY.getTabName());
        dependencyItem.setParentNodeName(DependencyConst.DEPENDENCIES.getTabName());
      
      	// 选配
        dependencyItem.setScope("runtime");
        dependencyItem.setOptional("true");
        dependencyItem.setVersion("2.3.6.RELEASE");
      
      	// 添加到dependency中
        dependency.addDependencyItem(web);

    }
    
    @Override
    protected void addYaml(BaseYaml yaml) {
      	// 添加yaml配置项
        yaml.addYamlConfig("spring.mvc.format.date", "yyyy-MM-dd");
        yaml.addYamlConfig("spring.mvc.format.date-time", "yyyy-MM-dd HH:mm:ss");
        yaml.addYamlConfig("spring.jackson.date-format", "yyyy-MM-dd");
        yaml.addYamlConfig("spring.jackson.time-zone", "Asia/Shanghai");
    }
    
    
    @Override
    protected void addCode(BaseCode code) {
        // 添加代码模板
      	CodeItem cors = new CodeItem();
      	// basePackage下的路径
      	// 例如:完整包名'com.xxx.xxx.config.web',其中'com.xxx.xxx'为basePackage,只需要添加'config/web'即可
        cors.setPath("config/web");
      	// 类的名字
        cors.setFileName("CORSConfig.java");
      	// 代码模板
        cors.setCodeTemplate(
                "import org.springframework.context.annotation.Configuration;\n" +
                        "import org.springframework.core.Ordered;\n" +
                        "import org.springframework.core.annotation.Order;\n" +
                        "import org.springframework.web.servlet.config.annotation.CorsRegistry;\n" +
                        "import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;\n" +
                        "\n" +
                        "@Configuration\n" +
                        "@Order(Ordered.HIGHEST_PRECEDENCE)\n" +
                        "public class CORSConfig implements WebMvcConfigurer {\n" +
                        "    \n" +
                        "    @Override\n" +
                        "    public void addCorsMappings(CorsRegistry registry) {\n" +
                        "        //允许所有的访问请求(访问路径)\n" +
                        "        registry.addMapping(\"/**\")\n" +
                        "                //允许所有的请求方法访问该跨域资源服务器\n" +
                        "                .allowedMethods(\"*\")\n" +
                        "                //允许所有的请求域名访问我们的跨域资源\n" +
                        "                .allowedOrigins(\"*\")\n" +
                        "                //允许所有的请求header访问\n" +
                        "                .allowedHeaders(\"*\")\n" +
                        "                .allowCredentials(true).maxAge(3600);\n" +
                        "    }\n" +
                        "}"
        );
      	// 添加到代码模板中
        code.addCodeItem(cors);
    }
}

处理器

处理器用于执行生成模板的逻辑,处理器统一实现了handler.tech.beanmak1r.generate.GenerateHandler,默认提供代码生成处理器yaml生成处理器pom生成处理器,可以自行删减

下面示例删除了pom生成处理器,生成模板时不会添加pom依赖

Project project = Projects.customer();
project.deleteGenerateHandlerByType(PomHandler.class);

也可以自定义处理器,并添加到处理器执行列表中

// 自定义一个处理器
GenerateHandler customerHandler = new GenerateHandlerAdapter() {
    /**
     * 代码生成前、starter项加载前执行
     * @throws Exception
     */
    @Override
    public void beforeGenerate() throws Exception {}

    /**
     * 代码执行后执行
     * @throws Exception
     */
    @Override
    public void afterGenerate() throws Exception {}
    /**
     * 代码的生成方法
     * @param starter 当前处理到的starter会被传到这个方法中
     * @throws Exception
     */
    @Override
    public void generateHandler(AbstractStarter starter) throws Exception {}
};
// 将处理器添加到执行列表中
project.addGenerateHandler(customerHandler);

web_template_generate's People

Contributors

makeronbean avatar

Stargazers

职业大学也是大学 avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.