SpringBoot中几种好用的代码生成器(基于Mybatis 您所在的位置:网站首页 twitter代码生成器网址 SpringBoot中几种好用的代码生成器(基于Mybatis

SpringBoot中几种好用的代码生成器(基于Mybatis

2024-07-11 18:58| 来源: 网络整理| 查看: 265

更多SpringBoot轮子导航

SpringBoot项目实现日志打印SQL明细(包括SQL语句和参数)几种方式 SpringBoot中几种好用的代码生成器(基于Mybatis-plus生成entity、mapper、xml等) SpringBoot整合Groovy脚本,实现动态编程 SpringBoot整合ip2region实现使用ip监控用户访问城市 SpringBoot整合EasyExcel实现Excel表格的导出功能 SpringBoot整合阿里云OSS,支持文件上传、下载、删除、加签等操作 SpringBoot整合aspectj实现面向切面编程(即AOP) SpringBoot整合Swagger2实现接口文档 SpringBoot整合阿里云SchedulerX分布式任务调度组件 SpringBoot整合kaptcha实现图片验证码功能

前言

熟悉Spring框架的同学一定都知道MVC开发模式吧,控制器(Controller)、业务类(Service)、持久层(Repository)、数据库映射(Mapper)、各种DO类构成了我们服务端的代码。初学的时候,觉得新鲜手写这些东西不觉得有啥,但是写久了就会觉得很烦。好不容易在数据库中写完了一遍字段,在Java代码又要写一遍,不仅很枯燥,关键是还容易写错!!!

字段名称写错的痛,只有踩过这坑的人才能体会… …

所以,如果有一个工具可以在我们创建完数据库表之后自动帮助我们生成各种类就好了。

这种工具不仅有,而且有很多,首先推荐一个最最简单的:

在线版Java代码生成器

在这里插入图片描述 如果有用过bejson在线工具的小伙伴,应该很熟悉,不过这个工具有个缺点: 开发者需要自己手动创建代码目录和代码文件,然后一个一个将代码复制到文件中

所以为了让大家更省事一些,下面推荐的2种方法不仅可以生成代码,还可以直接创建好文件夹、代码类。这2种方法的效果差不多,自己看情况选用吧。

第一种:mybatis-plus-generator配合freemaker引擎 尝试一下🍓 SpringBoot项目pom.xml 4.0.0 org.springframework.boot spring-boot-starter-parent 2.7.1 com.example SpringBoot-CodeGenerator 0.0.1-SNAPSHOT SpringBoot-CodeGenerator Demo project for Spring Boot 1.8 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test com.baomidou mybatis-plus-generator 3.2.0 org.freemarker freemarker 2.3.29 org.projectlombok lombok true mysql mysql-connector-java resources目录

在这里插入图片描述

controller.java.ftl package ${package.Controller}; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.stereotype.Controller; import ${superControllerClassPackage}; /** * @author ${author} */ @RestController @Controller @RequestMapping("/${package.ModuleName}/${controllerMappingHyphen}${table.entityPath}") class ${table.controllerName} : ${superControllerClass}() public class ${table.controllerName} extends ${superControllerClass} { public class ${table.controllerName} { } entity.java.ftl package ${package.Entity}; import ${pkg}; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; /** * ${table.comment!} * * @author ${author} */ @Data @EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) @TableName("${table.name}") @ApiModel(value="${entity}对象", description="${table.comment!}") public class ${entity} extends ${superEntityClass} { public class ${entity} extends Model { public class ${entity} implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty(value = "${field.comment}") /** * ${field.comment} */ @TableId(value = "${field.name}", type = IdType.AUTO) @TableId(value = "${field.name}", type = IdType.${idType}) @TableId("${field.name}") @TableField(value = "${field.name}", fill = FieldFill.${field.fill}) @TableField(fill = FieldFill.${field.fill}) @TableField("${field.name}") @Version @TableLogic private ${field.propertyType} ${field.propertyName}; public ${field.propertyType} ${getprefix}${field.capitalName}() { return ${field.propertyName}; } public ${entity} set${field.capitalName}(${field.propertyType} ${field.propertyName}) { public void set${field.capitalName}(${field.propertyType} ${field.propertyName}) { this.${field.propertyName} = ${field.propertyName}; return this; } public static final String ${field.name?upper_case} = "${field.name}"; @Override protected Serializable pkVal() { return this.${keyPropertyName}; return null; } @Override public String toString() { return "${entity}{" + "${field.propertyName}=" + ${field.propertyName} + ", ${field.propertyName}=" + ${field.propertyName} + "}"; } } mapper.java.ftl package ${package.Mapper}; import ${package.Entity}.${entity}; import ${superMapperClassPackage}; /** * @author ${author} */ interface ${table.mapperName} : ${superMapperClass} public interface ${table.mapperName} extends ${superMapperClass} { } mapper.xml.ftl DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> ${field.name}, ${table.fieldNames} service.java.ftl package ${package.Service}; import ${package.Entity}.${entity}; import ${superServiceClassPackage}; /** * @author ${author} */ interface ${table.serviceName} : ${superServiceClass} public interface ${table.serviceName} extends ${superServiceClass} { } serviceImpl.java.ftl package ${package.ServiceImpl}; import ${package.Entity}.${entity}; import ${package.Mapper}.${table.mapperName}; import ${package.Service}.${table.serviceName}; import ${superServiceImplClassPackage}; import org.springframework.stereotype.Service; /** * @author ${author} */ @Service open class ${table.serviceImplName} : ${superServiceImplClass}(), ${table.serviceName} { } public class ${table.serviceImplName} extends ${superServiceImplClass} implements ${table.serviceName} { }

上面这些文件直接创建在resources/generator1/templates的目录下,把内容复制进去就行了。这些文件就是你代码生成的格式模板,当然自己也可以修改。

生成代码 package com.example.springbootcodegenerator.util; import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException; import com.baomidou.mybatisplus.generator.AutoGenerator; import com.baomidou.mybatisplus.generator.config.*; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; import java.util.Scanner; /** * mybatis plus 提供的代码生成器 * 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码 * * @link https://mp.baomidou.com/guide/generator.html */ public class CodeGenerator { // 数据库 URL private static final String URL = "jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC"; // 数据库驱动 private static final String DRIVER_NAME = "com.mysql.cj.jdbc.Driver"; // 数据库用户名 private static final String USERNAME = "root"; // 数据库密码 private static final String PASSWORD = "123456"; // @author 值 private static final String AUTHOR = "sun墨"; // 包的基础路径 private static final String BASE_PACKAGE_URL = "com.example.springbootcodegenerator"; // xml文件路径 private static final String XML_PACKAGE_URL = "/src/main/resources/mapper/"; // xml 文件模板 private static final String XML_MAPPER_TEMPLATE_PATH = "generator1/templates/mapper.xml"; // mapper 文件模板 private static final String MAPPER_TEMPLATE_PATH = "generator1/templates/mapper.java"; // entity 文件模板 private static final String ENTITY_TEMPLATE_PATH = "generator1/templates/entity.java"; // service 文件模板 private static final String SERVICE_TEMPLATE_PATH = "generator1/templates/service.java"; // serviceImpl 文件模板 private static final String SERVICE_IMPL_TEMPLATE_PATH = "generator1/templates/serviceImpl.java"; // controller 文件模板 private static final String CONTROLLER_TEMPLATE_PATH = "generator1/templates/controller.java"; public static void main(String[] args) { AutoGenerator generator = new AutoGenerator(); // 全局配置 GlobalConfig globalConfig = new GlobalConfig(); String projectPath = System.getProperty("user.dir"); globalConfig.setOutputDir(projectPath + "/src/main/java"); globalConfig.setAuthor(AUTHOR); globalConfig.setOpen(false); globalConfig.setFileOverride(false); generator.setGlobalConfig(globalConfig); // 数据源配置 DataSourceConfig dataSourceConfig = new DataSourceConfig(); dataSourceConfig.setUrl(URL); dataSourceConfig.setDriverName(DRIVER_NAME); dataSourceConfig.setUsername(USERNAME); dataSourceConfig.setPassword(PASSWORD); generator.setDataSource(dataSourceConfig); // 包配置 PackageConfig packageConfig = new PackageConfig(); packageConfig.setModuleName("gen"); packageConfig.setParent(BASE_PACKAGE_URL); generator.setPackageInfo(packageConfig); // 配置自定义代码模板 TemplateConfig templateConfig = new TemplateConfig(); templateConfig.setXml(XML_MAPPER_TEMPLATE_PATH); templateConfig.setMapper(MAPPER_TEMPLATE_PATH); templateConfig.setEntity(ENTITY_TEMPLATE_PATH); templateConfig.setService(SERVICE_TEMPLATE_PATH); templateConfig.setServiceImpl(SERVICE_IMPL_TEMPLATE_PATH); templateConfig.setController(CONTROLLER_TEMPLATE_PATH); generator.setTemplate(templateConfig); // 策略配置 StrategyConfig strategy = new StrategyConfig(); strategy.setNaming(NamingStrategy.underline_to_camel); strategy.setColumnNaming(NamingStrategy.underline_to_camel); strategy.setEntityLombokModel(true); strategy.setRestControllerStyle(true); strategy.setInclude(scanner("表名")); strategy.setSuperEntityColumns("id"); strategy.setControllerMappingHyphenStyle(true); strategy.setTablePrefix(packageConfig.getModuleName() + "_"); generator.setStrategy(strategy); generator.setTemplateEngine(new FreemarkerTemplateEngine()); generator.execute(); } private static String scanner(String tip) { Scanner scanner = new Scanner(System.in); System.out.println(("请输入" + tip + ":")); if (scanner.hasNext()) { String ipt = scanner.next(); if (null != ipt && !"".equals(ipt)) { return ipt; } } throw new MybatisPlusException("请输入正确的" + tip + "!"); } } 效果展示

运行这个类之后,输入表名

在这里插入图片描述 代码目录如下: 在这里插入图片描述

第二种:tk.mybatis配合maven插件 尝试一下🍓 SpringBoot项目pom.xml 4.0.0 org.springframework.boot spring-boot-starter-parent 2.7.1 com.example SpringBoot-CodeGenerator 0.0.1-SNAPSHOT SpringBoot-CodeGenerator Demo project for Spring Boot 1.8 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test com.baomidou mybatis-plus-generator 3.2.0 com.baomidou mybatis-plus-boot-starter 3.2.0 javax.persistence javax.persistence-api org.projectlombok lombok true mysql mysql-connector-java org.mybatis.generator mybatis-generator-maven-plugin 1.3.6 ${basedir}/src/main/resources/generator2/generatorConfiguration.xml true true tk.mybatis mapper 4.1.2 resources目录

在这里插入图片描述

config.properties ## 驱动 jdbc.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&useSSL=false ## 登录名 jdbc.user=root ## 登录密码 jdbc.password=123456 ## 表名 table.name=t_test ## DO entity.name=TTestDO ## Mapper mapper.name=TTestMapper generatorConfiguration.xml DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

上面两个文件配置好之后,如果使用的是idea,且装有maven插件,在maven 的Plugins中会有一个mybatis-generator选项,点击mybatis-generator :generate即可运行 在这里插入图片描述

没有这个插件也不要紧,运行下面这个命令也可以

mvn mybatis-generator:generate 效果展示

在这里插入图片描述

总结一下

总体来说,这两种方式的效果都是差不多的。第一种方式可以自己创建任意文件,第二种方式专注于配置。个人喜欢第二种方式,不想写代码而已🤤

问题总结

有些同学在使用的时候遇到一些问题,有的是只创建了文件夹,有的是生成的entity不对,如下图: 在这里插入图片描述这里我统一回复一下:

问题1、生成的是空目录

有两种可能,第一种是你们的配置不对,可以详细对照一下我的配置;第二种就是输出路径不对,生成的文件没法输出。

问题2、第一个方法的模版有问题

我看了下entity.java.ftl的内容确实不对,估计是当时复制错了,已改正,谢谢提醒。

文末小彩蛋,自建摸鱼网站,各大网站热搜一览,上班和摸鱼很配哦!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有