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

 更新时间:2021年03月05日 14:08:18   作者:君君君sss  
这篇文章主要介绍了详解使用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生成自定义代码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java多线程之Future设计模式

    Java多线程之Future设计模式

    这篇文章主要介绍了Java多线程之Future设计模式,Future 代表的是未来的一个凭据,文章主要附上Future具体实现类、桥接Future和FutureTask的代码,需要的朋友可以参考一下
    2021-10-10
  • Java编程之多线程死锁与线程间通信简单实现代码

    Java编程之多线程死锁与线程间通信简单实现代码

    这篇文章主要介绍了Java编程之多线程死锁与线程间通信简单实现代码,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • Java源码解析之Gateway请求转发

    Java源码解析之Gateway请求转发

    今天给大家带来的是关于Java的相关知识,文章围绕着Gateway请求转发展开,文中有非常详细介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • Spring Boot实现WebSocket实时通信

    Spring Boot实现WebSocket实时通信

    本文主要介绍了Spring Boot实现WebSocket实时通信,包含实现实时消息传递和群发消息等功能,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • 浅谈springfox-swagger原理解析与使用过程中遇到的坑

    浅谈springfox-swagger原理解析与使用过程中遇到的坑

    本篇文章主要介绍了浅谈springfox-swagger原理解析与使用过程中遇到的坑,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • Spring Boot 表单验证篇

    Spring Boot 表单验证篇

    在表单提交的时候,我们需要进行验证。下面通过本篇文章给大家介绍Spring Boot 表单验证篇,需要的朋友可以参考下
    2017-08-08
  • Java生成动态版验证码的方法实例

    Java生成动态版验证码的方法实例

    这篇文章主要给大家介绍了利用Java生成动态版验证码的方法实例,本文生成的是GIF格式 + 干扰元素,让验证码破解难度又上了一个层次,文中给出了详细的示例代码,并在文末给出了完整的实例代码供大家下载学习,需要的朋友们下面来一起看看吧。
    2017-04-04
  • 关于Springboot的日志配置

    关于Springboot的日志配置

    Spring Boot默认使用LogBack日志系统,如果不需要更改为其他日志系统如Log4j2等,则无需多余的配置,LogBack默认将日志打印到控制台上,需要的朋友可以参考下
    2023-05-05
  • 深入浅析Mybatis的缺陷问题

    深入浅析Mybatis的缺陷问题

    Mybatis是业界非常流行的持久层框架,轻量级、易用,在金融IT领域完全是领军地位,比Hibernate更受欢迎,优势非常多,也是非常值得我们学习的。这篇文章主要介绍了Mybatis的缺陷问题的相关资料,需要的朋友可以参考下
    2016-10-10
  • java中实现分页的几种常见方式总结

    java中实现分页的几种常见方式总结

    在项目中经常会查询大量数据,这就要用到分页展示,下面这篇文章主要给大家介绍了关于java中实现分页的几种常见方式,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12

最新评论