package com.zb.config.mybatisplus;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;
import org.apache.commons.lang3.StringUtils;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
/**
* @ClassName CodeGenerator
* @Description 代码生成器
* @Author yso
**/
public class CodeGenerator {
/**
* service 模块
*/
public static final String SERVICE_MODULAR_NAME = "myplus.server";
public static final String SERVICE_MODULAR_PATH = "com/zb/";
/**
* api 模块
*/
public static final String API_MODULAR_NAME = "myplus.api";
public static final String API_MODULAR_PATH = "com/zb/";
/**
* 基本路径
*/
public static final String SRC_MAIN_JAVA = "/src/main/java/";
/**
* 资源路径
*/
public static final String SRC_RESOURCE_JAVA = "/src/main/resources/";
/**
* 作者
*/
public static final String AUTHOR = "zj";
/**
* 是否是 rest 接口
*/
private static final boolean REST_CONTROLLER_STYLE = true;
public static final String JDBC_MYSQL_URL = "jdbc:mysql://127.0.0.01:3306/shop_user?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=Asia/Shanghai";
public static final String JDBC_DRIVER_NAME = "com.mysql.cj.jdbc.Driver";
public static final String JDBC_USERNAME = "root";
public static final String JDBC_PASSWORD = "1002981655";
public static void main(String[] args) {
String tableName = scanner("表名");
autoGenerator(tableName);
}
public static void autoGenerator(String tableName) {
new AutoGenerator()
.setGlobalConfig(getGlobalConfig())
.setDataSource(getDataSourceConfig())
.setPackageInfo(getPackageConfig())
.setStrategy(getStrategyConfig(tableName))
.setTemplateEngine(new VelocityTemplateEngine())
.setTemplate(getTemplateConfig())
.setCfg(getInjectionConfig())
.execute();
}
private static StrategyConfig getStrategyConfig(String tableName) {
return new StrategyConfig()
.setNaming(NamingStrategy.underline_to_camel)
.setColumnNaming(NamingStrategy.underline_to_camel)
.setInclude(tableName)
.setRestControllerStyle(REST_CONTROLLER_STYLE)
.setEntityLombokModel(true)
.setEntityBuilderModel(true)
.setControllerMappingHyphenStyle(true);
}
private static PackageConfig getPackageConfig() {
//获取项目目录
String parentDir = System.getProperty("user.dir");
String modelDir =
parentDir + "/" + API_MODULAR_NAME + SRC_MAIN_JAVA + API_MODULAR_PATH + "entity";
String mapperDir =
parentDir + "/" + SERVICE_MODULAR_NAME + SRC_MAIN_JAVA + SERVICE_MODULAR_PATH + "mapper";
String xmlDir = parentDir + "/" + SERVICE_MODULAR_NAME + SRC_RESOURCE_JAVA + "mapper";
String controllerDir =
parentDir + "/" + SERVICE_MODULAR_NAME + SRC_MAIN_JAVA + SERVICE_MODULAR_PATH
+ "controller";
String serviceDir =
parentDir + "/" + SERVICE_MODULAR_NAME + SRC_MAIN_JAVA + SERVICE_MODULAR_PATH + "service";
String serviceImplDir =
parentDir + "/" + SERVICE_MODULAR_NAME + SRC_MAIN_JAVA + SERVICE_MODULAR_PATH
+ "service/impl";
//设置自定义输出目录(分布式项目使用)
Map<String, String> pathInfo = new HashMap<>();
pathInfo.put(ConstVal.ENTITY_PATH, modelDir);
pathInfo.put(ConstVal.MAPPER_PATH, mapperDir);
pathInfo.put(ConstVal.XML_PATH, xmlDir);
pathInfo.put(ConstVal.SERVICE_PATH, serviceDir);
pathInfo.put(ConstVal.SERVICE_IMPL_PATH, serviceImplDir);
pathInfo.put(ConstVal.CONTROLLER_PATH, controllerDir);
return new PackageConfig()
.setPathInfo(pathInfo)
.setParent("com.zb")
.setService("service")
.setServiceImpl("service.impl")
.setController("controller")
.setMapper("mapper")
.setEntity("entity");
}
private static DataSourceConfig getDataSourceConfig() {
return new DataSourceConfig()
.setUrl(JDBC_MYSQL_URL)
.setDriverName(JDBC_DRIVER_NAME)
.setUsername(JDBC_USERNAME)
.setPassword(JDBC_PASSWORD);
}
private static GlobalConfig getGlobalConfig() {
return new GlobalConfig()
.setDateType(DateType.ONLY_DATE)
.setIdType(IdType.UUID)
.setAuthor(AUTHOR)
.setBaseColumnList(true)
.setSwagger2(true)
.setEnableCache(false)
.setServiceName("%sService")
.setEntityName("%sModel")
.setFileOverride(true)
.setBaseResultMap(true)
.setOpen(false);
}
private static InjectionConfig getInjectionConfig() {
return new InjectionConfig() {
@Override
public void initMap() {
Map map = new HashMap();
map.put("date", getDateTime());
setMap(map);
}
};
}
private static String getDateTime() {
LocalDateTime localDate = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm");
return localDate.format(formatter);
}
private static TemplateConfig getTemplateConfig() {
return new TemplateConfig()
.setController("/template/controller.java.vm")
.setService("/template/service.java.vm")
.setServiceImpl("/template/serviceImpl.java.vm")
.setEntity("/template/entity.java.vm")
.setMapper("/template/mapper.java.vm")
.setXml("/template/mapper.xml.vm");
}
private static String scanner(String tip) {
Scanner scanner = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
sb.append("please input " + tip + " : ");
System.out.println(sb.toString());
if (scanner.hasNext()) {
String ipt = scanner.next();
if (StringUtils.isNotEmpty(ipt)) {
return ipt;
}
}
throw new MybatisPlusException("please input the correct " + tip + ". ");
}
}
代码生成器,可以生成entity,controller,service,mapper里的代码,带有swagger2


代码生成器是一种强大的工具,它能够自动化创建常见的编程框架中的组件代码,如实体类(Entity)、控制器(Controller)、服务层(Service)以及映射器(Mapper)。这样的工具大大提高了开发效率,减少了程序员的手动编写工作,使他们能够更加专注于业务逻辑的实现。本话题将深入探讨这种代码生成器,特别是结合Swagger2的功能。 让我们了解各个组件的作用: 1. **实体类(Entity)**:在Java开发中,实体类通常用于表示数据库中的表,它们包含了表的字段和属性,是数据持久化的载体。 2. **控制器(Controller)**:在MVC架构中,控制器负责接收HTTP请求,处理业务逻辑,并将结果转发给视图层。它们是应用与用户交互的桥梁。 3. **服务层(Service)**:服务层是业务逻辑的核心,它封装了对数据的操作,比如增删改查。服务层通常不直接与数据库交互,而是通过接口调用映射器来完成。 4. **映射器(Mapper)**:在MyBatis等持久层框架中,映射器定义了SQL语句,负责将Java对象和数据库记录进行映射,实现数据的CRUD操作。 **Swagger2** 是一个流行的API文档工具,它可以自动生成RESTful API的文档,包括接口描述、参数、返回值等信息,帮助开发者理解和使用API。集成Swagger2的代码生成器意味着在生成Controller代码时,同时会为每个接口添加对应的Swagger注解,这样开发者可以快速地构建具有清晰API文档的系统。 使用这样的代码生成器,开发者可以遵循以下步骤: 1. 配置生成器:设置数据库连接信息,选择需要生成代码的表,以及生成代码的风格和模板。 2. 生成代码:运行生成器,根据配置自动生成Entity、Controller、Service和Mapper的代码文件。 3. 自定义修改:虽然大部分代码已经自动生成,但可能还需要根据具体业务需求进行微调。 4. 集成Swagger2:生成的Controller代码中包含了Swagger注解,通过启动应用,可以访问Swagger UI,查看和测试API。 这种代码生成器通常基于开源项目,如Mybatis-Plus,它的`myplus.parent`可能指的是项目的父级Maven模块,包含了项目的依赖管理和通用配置。在实际使用时,开发者需要将此项目导入IDE,然后按照项目结构和依赖关系构建自己的应用。 总结来说,代码生成器是提升开发效率的重要工具,尤其在大型项目中,它可以减少重复劳动,提高代码质量。而集成Swagger2的代码生成器则进一步优化了开发流程,使得API的文档化变得简单且规范。对于Java开发者而言,掌握这类工具的使用方法,能有效提升工作效率并保证代码的可维护性。








































































































- 1

- #完美解决问题
- #运行顺畅
- #内容详尽
- #全网独家
- #注释完整

- 粉丝: 0
- 资源: 2
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- (源码)基于Arduino的IRremote红外遥控库项目.zip
- (源码)基于物联网技术的智能灌溉系统.zip
- (源码)基于开源项目的实时时钟砖块程序.zip
- (源码)GwentAI 基于深度强化学习的昆特牌智能体.zip
- (源码)基于 HTML 和 JavaScript 的拼图游戏.zip
- (源码)基于ESP32的多功能监测系统.zip
- (源码)基于Arduino的GPS数据以太网传输系统.zip
- (源码)基于Create React App框架的React入门应用.zip
- (源码)基于Python的神经网络分类与正则化技术.zip
- (源码)基于C语言STM32F10x微控制器的嵌入式断路器核心.zip
- (源码)基于OpenGL的三维场景编辑器.zip
- (源码)基于C++的OpenSprinkler统一固件.zip
- (源码)基于开源整合的编程学习资源索引.zip
- (源码)基于AVR单片机与6502微处理器的Ben Eater 6502 8bit计算机监控系统.zip
- (源码)基于Egret框架和EasyGameFramework的游戏开发模板.zip
- (源码)基于STM32微控制器的智能铁路系统.zip


