详解使用Mybatis-plus + velocity模板生成自定义的代码

pom.xml文件的配置

<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-boot-starter</artifactId>
  <version>3.3.0</version>
</dependency>
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-generator</artifactId>
  <version>3.1.0</version>
</dependency>

<!-- 代码生成器模板 -->
<dependency>
  <groupId>org.apache.velocity</groupId>
  <artifactId>velocity</artifactId>
  <version>1.7</version>
</dependency>

CodeGenerator配置文件

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.TemplateConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import lombok.extern.java.Log;

/**
 * 代码生成器
 */
@Log
public class CodeGenerator {

 //项目存储位置
 public static String PROJECT_GENERATE_DISK = "E:\\";
 //包名
 public static String PARENT_PACKAGE_NAME = "com";
 //包名
 public static String PACKAGE_NAME = "rent.security";
 //数据库地址
 public static String DB_URL = "jdbc:mysql://localhost:3306/mp?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=UTC";
 //数据库实例名
 public static String DRIVER_CLASS_NAME = "com.mysql.jdbc.Driver";
 //数据库用户
 public static String USER = "root";
 //数据库密码
 public static String PASSWORD = "root";
 //数据库schema
 public static String SCHEMA = "mp";
 //要查询的表名
 public static String TABLE_NAMES = "sys_role_menu";
 //创建人
 public static String AUTHOR = "jmm";
 //是否强制带上注解
 public static boolean ENABLE_TABLE_FIELD_ANNOTATION = false;
 //生成的注解带上IdType类型
 public static IdType TABLE_IDTYPE = null;
 //生成的Service 接口类名是否以I开头 默认是以I开头 user表 -> IUserService, UserServiceImpl
 public static boolean SERVICE_CLASS_NAME_START_WITHI = false;

 /**
 * 全局配置
 */
 private static GlobalConfig GlobalGenerate() {
 GlobalConfig config = new GlobalConfig();
 config.setActiveRecord(false)// 不需要ActiveRecord特性的请改为false
  .setIdType(TABLE_IDTYPE)
  .setEnableCache(false)// XML 二级缓存
  .setAuthor(AUTHOR)
  .setBaseResultMap(true)// XML ResultMap
  .setBaseColumnList(false)// XML columList
  .setOutputDir(PROJECT_GENERATE_DISK + "\\java" )
  .setFileOverride(true)
  .setControllerName("%sController" );//自定义文件命名,注意 %s 会自动填充表实体属性!

 if (!SERVICE_CLASS_NAME_START_WITHI) {
  config.setServiceName("%sService" );
 }
 return config;
 }

 /**
 * 数据源配置
 */
 private static DataSourceConfig DaoSourceGenerate() {
 DataSourceConfig dataSourceConfig = new DataSourceConfig();
 DbType type = DbType.MYSQL;
 dataSourceConfig.setDbType(type)//数据库类型
  .setUrl(DB_URL)//数据库地址
  .setUsername(USER)//数据库用户名
  .setPassword(PASSWORD)//数据库密码
  .setDriverName(DRIVER_CLASS_NAME)//实例名
  .setSchemaName(SCHEMA);
 return dataSourceConfig;
 }

 /**
 * 策略配置
 */
 private static StrategyConfig StrategyGenerate() {
 StrategyConfig strategyConfig = new StrategyConfig();
 strategyConfig.setVersionFieldName("version" )
  .setCapitalMode(true)// 全局大写命名 ORACLE 注意
  .setEntityLombokModel(false)
  .setNaming(NamingStrategy.underline_to_camel)// 表名生成策略
  .entityTableFieldAnnotationEnable(ENABLE_TABLE_FIELD_ANNOTATION)
  .setInclude(TABLE_NAMES)//修改替换成你需要的表名,多个表名传数组
  .setEntityColumnConstant(true)// 【实体】是否生成字段常量(默认 false)public static final String ID = "test_id";
  .setEntityBuilderModel(true);// 【实体】是否为构建者模型(默认 false)public User setName(String name) {this.name = name; return this;}
 return strategyConfig;
 }

 /**
 * 自定义模板配置
 */
 private static TemplateConfig TemplateGenerate() {
 TemplateConfig templateConfig = new TemplateConfig()
  .setController("templates/java/controller.java" )
  .setService("templates/java/service.java" )
  .setServiceImpl("templates/java/serviceImpl.java" )
  .setMapper("templates/java/mapper.java" );
 return templateConfig;
 }

 private static final String MODULE_NAME = "sysRoleMenu";

 private static final String CLASS_NAME = "SysRoleMenu";

 private static final String class_name = "sysRoleMenu";

 /**
 * 自定义文件及key
 */
 private static InjectionConfig FileGenerate() {
 InjectionConfig injectionConfig = new InjectionConfig() {
  @Override
  public void initMap() {//自定义参数
  Map<String, Object> map = new HashMap<>();
  //这些自定义的值在vm模板的语法是通过${cfg.xxx}来调用的。
  map.put("moduleName", MODULE_NAME);
  map.put("ClassName", CLASS_NAME);
  map.put("className", class_name);
  map.put("packageName", PARENT_PACKAGE_NAME + "." + PACKAGE_NAME);
  map.put("author", AUTHOR);
  map.put("datetime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
  this.setMap(map);
  }
 };
 return injectionConfig;
 }

 /**
 * 包配置
 */
 public static PackageConfig PackageGenerate() {
 PackageConfig pc = new PackageConfig().setParent("com" )
  .setModuleName(PACKAGE_NAME)
  .setController("controller")
  .setEntity("domain")
  .setMapper("dao")
  .setXml("mapper");
 return pc;
 }

 public static void main(String[] args) {
 //全局配置
 GlobalConfig config = GlobalGenerate();
 //配置数据源
 DataSourceConfig dataSourceConfig = DaoSourceGenerate();
 //配置策略
 StrategyConfig strategyConfig = StrategyGenerate();
 //配置模板
 TemplateConfig templateConfig = TemplateGenerate();
 //自定义值
 InjectionConfig injectionConfig = FileGenerate();
 //配置包
 PackageConfig packageConfig = PackageGenerate();
 //生成代码
 new AutoGenerator().setGlobalConfig(config)
  .setTemplate(templateConfig)//自定义模板路径
  .setCfg(injectionConfig)
  .setDataSource(dataSourceConfig)
  .setStrategy(strategyConfig)
  .setPackageInfo(packageConfig)
  .execute();
 }
}

一定要注意!!!InjectionConfig方法中自定义的Map返回对象可以返回给模板调用,调用方法是${cfg.xxx}

vm模板代码实例

package ${package.Controller}; //这样写是依据步骤2的PackageConfig方法配置

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import ${package.Entity}.${cfg.ClassName};
import ${package.Service}.${cfg.ClassName}Service;
import com.rent.model.AjaxResult;

/**
 * ${cfg.moduleName}Controller
 *
 * @author ${author}
 * @date ${cfg.datetime}
 */
@Controller
@RequestMapping("/${cfg.moduleName}/${cfg.className}")
public class ${cfg.ClassName}Controller extends BaseController

  @Autowired
  private ${cfg.ClassName}Service ${cfg.className}Service;

  /**
   * 查询${cfg.className}列表
   */
  @GetMapping("/list")
  public TableDataInfo list(@RequestParam int pageNumber, @RequestParam int pageSize) {

 Page<${cfg.ClassName}> page = ${cfg.className}Service.select${cfg.ClassName}Page(pageNumber, pageSize);
 return page;
  }

  /**
   * 新增保存${cfg.ClassName}
   */
  @PostMapping("/add${cfg.ClassName}")
  public AjaxResult addSave(${cfg.ClassName} ${cfg.ClassName}) {

 boolean ret = ${cfg.ClassName}Service.save(${cfg.ClassName});
 return new AjaxResult(ret, ret ? "成功" : "失败");
  }

  /**
   * 修改保存${cfg.ClassName}
   */
  @PostMapping("/edit")
  public AjaxResult editSave(${cfg.ClassName} ${cfg.ClassName}) {

 boolean ret = ${cfg.ClassName}Service.updateById(${cfg.ClassName});
 return new AjaxResult(ret, ret ? "成功" : "失败");
  }

 @PostMapping("deleteById")
 @ApiOperation("根据ID删除${cfg.ClassName}")
 public AjaxResult<${cfg.ClassName}> deleteById(Long id) {
 boolean ret = ${cfg.ClassName}Service.removeById(id);
 return new AjaxResult(true, ret ? "成功" : "失败");
 }

 @PostMapping("findById")
 @ApiOperation("根据ID查询${cfg.ClassName}")
 public AjaxResult<${cfg.ClassName}> findById(Long id) {
 ${cfg.ClassName} user = ${cfg.ClassName}Service.getById(id);
 return new AjaxResult(true, "成功", user);
 }
}

最后如果需要更详细的vm调用请参阅官方文档:https://baomidou.com/config/generator-config.html#datasource

到此这篇关于详解使用Mybatis-plus + velocity模板生成自定义的代码的文章就介绍到这了,更多相关Mybatis-plus velocity生成自定义代码内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MyBatis-Plus代码生成器的使用详解

    1.引入依赖 <!--mybatisplus依赖--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.0.5</version> </dependency> <!--代码生成模板--> <dependency>

  • SpringBoot+MybatisPlus+代码生成器整合示例

    项目目录结构: pom文件: <?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.or

  • mybatis plus代码生成器配置过程解析

    这篇文章主要介绍了mybatis plus代码生成器配置过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 最近在玩项目,发现自己写严重浪费时间~于是想到了代码生成器,之前用过一次的mybatis-plus,再重新实现了一下 确保修改好对应的配置即可 依赖: <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boo

  • mybatis-plus自动生成代码的示例代码

    一.介绍 本教程将介绍如何使用 mybatis-plus 工具自动给我们生成 Controller.Service.Entity.Mapper.Mapper.xml 层代码 要求: ① 生成的Controller类,需要继承 BaseController ② 生成的Entity 类,需要继承 BaseEntity ③ 生成的 Service,默认名称下是以 I 开头的接口, 在生成Service层代码中需要把这个 I 去掉 二.实现步骤 ① 在数据库中创建好 数据库 与 要生成代码对应的表 这里

  • MyBatis Plus中代码生成器使用详解

    按照官网上实例尝试了一下,感觉MyBatis plus中代码生成器还是很强大的,以下是测试的总结: 使用MybatisPlus的主要依赖 引入plus依赖(苞米豆) <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.1.1</version> </depe

  • Mybatis Plus 代码生成器的实现

    代码生成器 MyBatis Plus是MyBatis的扩展框架,而代码生成器是MP的核心功能之一,另外还有 "条件构造器"和"通用CRUD"等功能. 步骤演示 mp的代码生成器有两种方式自动生成代码,一种是通过main方法来执行程序,另一种是通过maven插件build产生.第二种方法需要在pom.xml中添加大量的配置信息,因此本人偏向于使用第一种方式.步骤如下: 一.添加mybatis plus依赖: 如果还没有创建项目,当然需要先创建一个工程项目,然后将jar

  • MyBatis-plus+达梦数据库实现自动生成代码的示例

    先说点什么 mybatis-plus是一款增强版的mybatis,功能强大,可以很大程度的简化开发. 然而达梦数据库比较小众,虽然官方说mybatis-plus支持达梦数据库,但是使用起来遇到了很多问题. 这篇文章主要讲如何使用mybatis-plus访问达梦数据库,并使用逆向工程自动生成代码. =.=对了 这是个使用spring boot的项目. (配置)POM文件,引入所需要的依赖 <dependencies> <dependency> <groupId>org.s

  • 基于Mybatis plus 自动代码生成器的实现代码

    1.使用的是maven项目,添加依赖 <!-- mybatis-plus begin --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> <version>2.2.0</version> </dependency> 还有数据库的连接 <dependency> <

  • 详解使用Mybatis-plus + velocity模板生成自定义的代码

    pom.xml文件的配置 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.3.0</version> </dependency> <dependency> <groupId>com.baomidou</groupId&

  • 详解ASP.NET MVC 解析模板生成静态页(RazorEngine)

    简述 Razor是ASP.NET MVC 3中新加入的技术,以作为ASPX引擎的一个新的替代项.在早期的MVC版本中默认使用的是ASPX模板引擎,Razor在语法上的确不错,用起来非常方便,简洁的语法与.NET Framework 结合,广泛应用于ASP.NET MVC 项目. 我们在很多项目开发中会常常用到页面静态化,页面静态化有许多方式,最常见的就是类似很多PHP CMS种使用的 标签替换的方式(如:帝国CMS.EcShop等),还有很多都是伪静态,伪静态我们就不做过多解释,通过路由或Url

  • 详解SpringBoot+Mybatis实现动态数据源切换

    业务背景 电商订单项目分正向和逆向两个部分:其中正向数据库记录了订单的基本信息,包括订单基本信息.订单商品信息.优惠卷信息.发票信息.账期信息.结算信息.订单备注信息.收货人信息等:逆向数据库主要包含了商品的退货信息和维修信息.数据量超过500万行就要考虑分库分表和读写分离,那么我们在正向操作和逆向操作的时候,就需要动态的切换到相应的数据库,进行相关的操作. 解决思路 现在项目的结构设计基本上是基于MVC的,那么数据库的操作集中在dao层完成,主要业务逻辑在service层处理,controll

  • 详解Java中JSON数据的生成与解析

    一.什么是JSON JSON: JavaScript Object Notation JS对象简谱,是一种类似于XML的语言.相比于XML,它更小.更快.更易解析.主要用于项目前端和Server的网络数据传输. 二.JSON的语法 对象 一个对象,由一个大括号表示{},{}中通过一个个的键值对来描述对象的属性 注意: 键与值之间使用冒号连接,多个键值对之间使用逗号分隔. 键值对的键,应使用引号引住(通常Java解析时,键不使用引号会报错,而JS能正确解析):键值对的值,可以是JS中的任意数据类型

  • 详解pytest+Allure搭建方法以及生成报告常用操作

    目录 一.Allure搭建 1.下载Allure安装包 2.安装allure-pytest库 3.配置allure环境变量 4.检验allure安装成功 二.allure生成报告代码 1.allure指定用例严重等级: 2.allure指定标记的测试用例执行 3.生成报告代码 一.Allure搭建 1.下载Allure安装包 链接:https://github.com/allure-framework/allure2/releases 2.安装allure-pytest库 cmd命令行输入命令:

  • 详解Vue项目的打包方式(生成dist文件)

    目录 一.相关配置 情况一(使用的工具是 vue-cil) 情况二(使用的工具是 webpack) 二.打包 一.相关配置 情况一(使用的工具是 vue-cil) 如果是用 vue-cli 创建的项目,则项目目录中没有 config 文件夹,所以我们需要自建一个配置文件:在根目录 src 下创建文件 vue.config.js,需注意文件名称必须是 vue.config.js,然后在文件中插入以下代码: //打包配置文件 module.exports = { assetsDir: 'static

  • SpringBoot详解整合MyBatis过程中可能遇到的问题

    尽量不要用 jUnit 提供的单元测试 提一个要求尽量使用SpringBoot 提供的测试类进行测试,能够自动扫描组件以及使用容器中的bean对象 还有如果有组件 中存在注入对象的话,那么必须在SpringBoot容器中取出 这个组件,进而使用注入的对象的功能!!! 今天有个错误,花了很长时间来解决,最后发现是一个很低级很基础的错误! 这是mapper接口,使用@mapper 相当于将接口的代理对象注册进入bean中,但是上下文中找不到(其实是正常) 因为 @Mapper 这个注解是 Mybat

  • 详解C语言中sizeof如何在自定义函数中正常工作

    1.在main函数中,sizeof是可以正常工作的,比如: int main() { int n[5]; printf("input: \n"); int i ; for(i = 0; i < 5; i++) { scanf("%d",n + i); } int len = sizeof(n)/sizeof(n[0]); printf("%d\n",len); return 0; } 2.但是在自定义函数中就不可以了,如下: #includ

  • 详解如何为SpringBoot项目中的自定义配置添加IDE支持

    导言 代码是写给人看的,不是写给机器看的,只是顺便计算机可以执行而已 --<计算机程序的构造和解释(SICP)> 导言 在我们的项目里经常会出现需要添加自定义配置的应用场景,例如某个开关变量,在测试环境打开,在生产环境不打开,通常我们都会使用下面的代码来实现,然后在Spring Boot配置文件中添加这个key和Value Application.java: application.properties 或者是没有使用@Value而直接在XML中使用我们配置的属性值 application.x

  • 详解如何热更新线上的Java服务器代码

    一.前言 1.热更新代码的场景 (1)当线上服务器出现问题时,有些时候现有的手段不足以发现问题所在,可能需要追加打印日志或者增加一些调试代码,如果我们去改代码重新部署,会破坏问题现场,可以通过热部署的手段来增加调试代码 (2)线上出现紧急bug,通过Review代码找到问题,修改好后打包部署的流程可能比较久,可以通过热部署代码及时解决问题 二.Arthas的使用 使用阿里巴巴开源的Java诊断工具---Arthas,他可以附着在我们的Java服务器进程上面,查看服务器状态,jvm状态等各种参数指

随机推荐