SpringBoot MyBatisPlus 定制化模板

1.首先看下生成的最终效果
1.1 Controller
package com.scsiot.smartcity.smarthome.controller;

import org.springframework.web.bind.annotation.*;
import lombok.extern.slf4j.Slf4j;
import com.scsiot.smartcity.common.util.result.JsonResult;
import com.scsiot.smartcity.smarthome.service.IConfigService;
import com.scsiot.smartcity.smarthome.entity.Config;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;


/**
 * 

* 系统配置 前端控制器 *

* * @author liuzhen * @since 2020-07-02 */ @Slf4j @RestController @RequestMapping("/config") public class ConfigController { @Autowired private IConfigService configService; /** * 查询 系统配置 分页列表 * @param config 实体 * @return ResponseInfo */ @PostMapping("/queryList") public JsonResult> queryList(@RequestBody Config config,Integer pageNum,Integer pageSize){ return configService.queryByPage(config,pageNum,pageSize); } /** * 查询单个数据 系统配置 详情 * * @param config 条件查询数据 * @return JsonResult */ @GetMapping("/queryByEntity") public JsonResult queryByEntity(Config config) { return configService.queryByEntity(config); } /** * 新增 系统配置 * * @param config 请求参数 * @return JsonResult */ @PostMapping("/add") public JsonResult add(@Validated @RequestBody Config config) { return configService.add(config); } /** * 删除 系统配置 * * @param id 主键id * @return JsonResult */ @DeleteMapping("/{id}") public JsonResult delete(@PathVariable Long id) { return configService.delete(id); } }
1.2 service

package com.scsiot.smartcity.smarthome.service;

import com.scsiot.smartcity.smarthome.entity.Config;
import com.baomidou.mybatisplus.extension.service.IService;
import com.scsiot.smartcity.common.util.result.JsonResult;
import com.baomidou.mybatisplus.core.metadata.IPage;
/**
 * 

* 系统配置 服务类 *

* * @author liuzhen * @since 2020-07-02 */ public interface IConfigService extends IService { /** * 分页查询 * @param config 请求参数 * @param pageNum 页码 * @param pageSize 页数大小 * @return JsonResult 分页列表 */ JsonResult> queryByPage(Config config, Integer pageNum, Integer pageSize); /** * 查询单个数据 系统配置 详情 * * @param config 条件查询数据 * @return JsonResult */ JsonResult queryByEntity(Config config); /** * 新增 系统配置 * * @param config 请求参数 * @return JsonResult */ JsonResult add(Config config); /** * 修改 系统配置 * * @param config 请求参数 * @return JsonResult */ JsonResult update(Config config); /** * 删除 系统配置 * * @param id 主键id * @return JsonResult */ JsonResult delete(Long id); }
1.3 ServiceImpi 

package com.scsiot.smartcity.smarthome.service.serviceImpl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.scsiot.smartcity.smarthome.entity.Config;
import com.scsiot.smartcity.smarthome.mapper.ConfigMapper;
import com.scsiot.smartcity.smarthome.service.IConfigService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import com.scsiot.smartcity.common.util.result.JsonResult;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.annotation.Transactional;

/**
 * 

* 系统配置 服务实现类 *

* * @author liuzhen * @since 2020-07-02 */ @Service @Slf4j public class ConfigServiceImpl extends ServiceImpl implements IConfigService { /** * 分页查询 * @param config 请求参数 * @param pageNum 页码 * @param pageSize 页数大小 * @return JsonResult分页列表 */ @Override public JsonResult> queryByPage(Config config, Integer pageNum, Integer pageSize){ //获取公共查询 LambdaQueryWrapper queryWrapper =baseQuery(config); //排序 queryWrapper.orderByDesc(Config::getId); //分页查询 Page pages = new Page(pageNum == null ? 1 : pageNum,pageSize == null ? 15 : pageSize); return JsonResult.successData(super.baseMapper.selectPage(pages, queryWrapper)); } /** * 基础查询---匹配是否为空,不为空,则录入数据,为空则不加入查询 * @param config 请求参数 * @return LambdaQueryWrapper 封装好的数据 */ public LambdaQueryWrapper baseQuery(Config config){ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); if (config.getId() != null ) { queryWrapper.eq(Config::getId,config.getId()); } if (!StringUtils.isNotEmpty(config.getVariable())) { queryWrapper.eq(Config::getVariable,config.getVariable()); } if (!StringUtils.isNotEmpty(config.getValue())) { queryWrapper.eq(Config::getValue,config.getValue()); } if (config.getSetTime() != null ) { queryWrapper.eq(Config::getSetTime,config.getSetTime()); } if (!StringUtils.isNotEmpty(config.getSetBy())) { queryWrapper.eq(Config::getSetBy,config.getSetBy()); } return queryWrapper; } /** * 查询单个数据 系统配置 详情 * * @param config 条件查询数据 * @return JsonResult */ @Override public JsonResult queryByEntity(Config config){ //获取公共查询 LambdaQueryWrapper queryWrapper =baseQuery(config); Config configDB =super.getOne(queryWrapper); if(configDB == null){ return JsonResult.ErrorMessage("该数据不存在!请核对后重试"); } return JsonResult.successData(configDB); } /** * 新增或者修改 系统配置 * * @param config 请求参数 * @return JsonResult */ @Transactional(rollbackFor = Exception.class) @Override public JsonResult add(Config config){ super.save(config); return JsonResult.successData(); } /** * 修改 系统配置 * * @param config 请求参数 * @return JsonResult */ @Transactional(rollbackFor = Exception.class) @Override public JsonResult update(Config config){ if(config.getId() == null){ return JsonResult.ErrorMessage("ID不能为空!"); } super.updateById(config); return JsonResult.successData(); } /** * 删除 系统配置 * * @param id 主键id * @return JsonResult */ @Override @Transactional(rollbackFor = Exception.class) public JsonResult delete(Long id){ super.removeById(id); return JsonResult.successData(); } }
2.首先添加mybatis plus pom文件
            
		
			com.baomidou
			mybatis-plus-boot-starter
			3.0.3
		
		
		
			org.apache.velocity
			velocity-engine-core
			2.0
		
		
		
			org.projectlombok
			lombok
			1.16.20
		

 3.编写代码生成类,主要是调用mybatisPlus 已经成型的API,通过配置要生成的表,和包路径等信息.生成表结构

package com.scsiot.smartcity;


import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.rules.IColumnType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;


/**
 * 

* 代码生成器演示 *

*/ public class MpGenerator { /** * 代码生成地址 */ final static String outputDirPath = "D://"; /** * 作者 */ final static String author = "liuzhen"; /** * 文件是否覆盖 */ final static boolean fileOverride=true; /** * 表名前缀 */ final static String[] tablePrefix=new String[]{"sys_"}; /** * 数据库配置 */ final static String driverName="com.mysql.cj.jdbc.Driver"; final static String userName="root"; final static String password="123456"; final static String url="jdbc:mysql://localhost:3306/sys?characterEncoding=utf8&serverTimezone=UTC"; /** * 需要生成的表 */ final static String includeTables[] =new String[]{"sys_config"}; /** * 排除的表 */ final static String excludeTables[] =new String[]{}; final static String packetName="com.scsiot.smartcity.smarthome"; /** *

* MySQL 生成演示 *

*/ public static void main(String[] args) { AutoGenerator mpg = new AutoGenerator(); // 全局配置 GlobalConfig gc = new GlobalConfig(); gc.setOutputDir(outputDirPath); gc.setAuthor(author); gc.setFileOverride(fileOverride); //是否覆盖 gc.setActiveRecord(true);// 不需要ActiveRecord特性的请改为false gc.setEnableCache(false);// XML 二级缓存 gc.setBaseResultMap(true);// XML ResultMap gc.setBaseColumnList(true);// XML columList gc.setOpen(false); mpg.setGlobalConfig(gc); // 数据源配置 DataSourceConfig dsc = new DataSourceConfig(); dsc.setDbType(DbType.MYSQL); dsc.setTypeConvert(new MySqlTypeConvert(){ // 自定义数据库表字段类型转换【可选】 public IColumnType processTypeConvert(String fieldType) { System.out.println("转换类型:" + fieldType); // 注意!!processTypeConvert 存在默认类型转换,如果不是你要的效果请自定义返回、非如下直接返回。 return super.processTypeConvert(gc,fieldType); } }); dsc.setDriverName(driverName); dsc.setUsername(userName); dsc.setPassword(password); dsc.setUrl(url); mpg.setDataSource(dsc); // 策略配置 StrategyConfig strategy = new StrategyConfig(); // strategy.setCapitalMode(true);// 全局大写命名 ORACLE 注意 strategy.setTablePrefix(tablePrefix);// 此处可以修改为您的表前缀 strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略 if(includeTables.length >0) { strategy.setInclude(includeTables); // 需要生成的表 } if(excludeTables.length >0) { strategy.setExclude(excludeTables); // 排除生成的表 } strategy.setRestControllerStyle(true); strategy.setEntityBuilderModel(false); mpg.setStrategy(strategy); // 包配置 PackageConfig pc = new PackageConfig(); pc.setParent(packetName); pc.setController("controller"); pc.setEntity("entity"); pc.setMapper("mapper"); pc.setService("service"); pc.setServiceImpl("service.serviceImpl"); mpg.setPackageInfo(pc); // 关闭默认 xml 生成,调整生成 至 根目录 TemplateConfig tc = new TemplateConfig(); tc.setXml(null); mpg.setTemplate(tc); // 执行生成 mpg.execute(); // 打印注入设置【可无】 System.err.println("代码生成成功!"); } }

4.但是我们发现,通过配置这些已经生成很完善的代码了.但是我们想更进一步的修改.减少后期开发量.比如,增删改查,从Controller到dto打通,生成既可以使用.分页查询,直接交互给前端.比如后期的 前端页面.

   目前生成不包含前端. 下一期将生成固定的VUE或者基于easyUI界面.

 通过跟踪代码,我们发现,生成代码模板放在MybatisPlus 包的Resource里面.

SpringBoot MyBatisPlus 定制化模板_第1张图片

我们将这几个文件拷贝下来,放到我们项目的 static/templates/ 文件夹下面

SpringBoot MyBatisPlus 定制化模板_第2张图片

 

接下来,就是我们需要的修改的模板,分别是 controller.java.vm ,service.java.vm ,serviceImpl.java.vm

 里面定义的参数很多.我们只要按着我们项目现有的架构,一一调整下生成的类,引入的包

.controller.java.vm 模板修改如下

package ${package.Controller};

import org.springframework.web.bind.annotation.*;
import lombok.extern.slf4j.Slf4j;
import com.scsiot.smartcity.common.util.result.JsonResult;
import ${package.Service}.${table.serviceName};
import ${package.Entity}.${entity};
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
#if(${restControllerStyle})

#else
import org.springframework.stereotype.Controller;
#end
#if(${superControllerClassPackage})
import ${superControllerClassPackage};
#end

/**
 * 

* $!{table.comment} 前端控制器 *

* * @author ${author} * @since ${date} */ @Slf4j #if(${restControllerStyle}) @RestController #else @Controller #end @RequestMapping("#if(${package.ModuleName})/${package.ModuleName}#end/#if(${controllerMappingHyphenStyle})${controllerMappingHyphen}#else${table.entityPath}#end") #if(${kotlin}) @Slf4j class ${table.controllerName}#if(${superControllerClass}) : ${superControllerClass}()#end #else #if(${superControllerClass}) public class ${table.controllerName} extends ${superControllerClass} { #else public class ${table.controllerName} { #end @Autowired private ${table.serviceName} ${table.entityPath}Service; /** * 查询 $!{table.comment} 分页列表 * * * @param ${table.entityPath} 实体 * @return ResponseInfo */ @PostMapping("queryList") public JsonResult> queryList(@RequestBody ${entity} ${table.entityPath},Integer pageNum,Integer pageSize){ return ${table.entityPath}Service.queryByPage(${table.entityPath},pageNum,pageSize); } /** * 查询单个数据 $!{table.comment} 详情 * * @param ${table.entityPath} 条件查询数据 * @return JsonResult */ @GetMapping("/queryByEntity") public JsonResult<${entity}> queryByEntity(${entity} ${table.entityPath}) { return ${table.entityPath}Service.queryByEntity(${table.entityPath}); } /** * 新增 $!{table.comment} * * @param ${table.entityPath} 请求参数 * @return JsonResult */ @PostMapping("/add") public JsonResult add(@Validated @RequestBody ${entity} ${table.entityPath}) { return ${table.entityPath}Service.add(${table.entityPath}); } /** * 新增 $!{table.comment} * * @param ${table.entityPath} 请求参数 * @return JsonResult */ @PostMapping("/update") public JsonResult update(@Validated @RequestBody ${entity} ${table.entityPath}) { return ${table.entityPath}Service.update(${table.entityPath}); } /** * 删除 $!{table.comment} * * @param id 主键id * @return JsonResult */ @DeleteMapping("/{id}") public JsonResult delete(@PathVariable Long id) { return ${table.entityPath}Service.delete(id); } } #end

 service.java.vm 修改如下

package ${package.Service};

import ${package.Entity}.${entity};
import ${superServiceClassPackage};
import com.scsiot.smartcity.common.util.result.JsonResult;
import com.baomidou.mybatisplus.core.metadata.IPage;
/**
 * 

* $!{table.comment} 服务类 *

* * @author ${author} * @since ${date} */ #if(${kotlin}) interface ${table.serviceName} : ${superServiceClass}<${entity}> #else public interface ${table.serviceName} extends ${superServiceClass}<${entity}> { /** * 分页查询 * @param ${table.entityPath} 请求参数 * @param pageNum 页码 * @param pageSize 页数大小 * @return JsonResult 分页列表 */ JsonResult> queryByPage(${entity} ${table.entityPath},Integer pageNum,Integer pageSize); /** * 查询单个数据 $!{table.comment} 详情 * * @param ${table.entityPath} 条件查询数据 * @return JsonResult */ JsonResult<${entity}> queryByEntity(${entity} ${table.entityPath}); /** * 新增 $!{table.comment} * * @param ${table.entityPath} 请求参数 * @return JsonResult */ JsonResult add(${entity} ${table.entityPath}); /** * 修改 $!{table.comment} * * @param ${table.entityPath} 请求参数 * @return JsonResult */ JsonResult update(${entity} ${table.entityPath}); /** * 删除 $!{table.comment} * * @param id 主键id * @return JsonResult */ JsonResult delete(Long id); } #end

serviceImpl.java.vm 配置如下

package ${package.ServiceImpl};
import ${package.Entity}.${entity};
import ${package.Mapper}.${table.mapperName};
import ${package.Service}.${table.serviceName};
import org.springframework.stereotype.Service;
import ${superServiceImplClassPackage};
import org.apache.commons.lang3.StringUtils;
import com.scsiot.smartcity.common.util.result.JsonResult;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.annotation.Transactional;

/**
 * 

* $!{table.comment} 服务实现类 *

* * @author ${author} * @since ${date} */ @Service @Slf4j #if(${kotlin}) open class ${table.serviceImplName} : ${superServiceImplClass}<${table.mapperName}, ${entity}>(), ${table.serviceName} { } #else public class ${table.serviceImplName} extends ${superServiceImplClass}<${table.mapperName}, ${entity}> implements ${table.serviceName} { /** * 分页查询 * @param ${table.entityPath} 请求参数 * @param pageNum 页码 * @param pageSize 页数大小 * @return JsonResult分页列表 */ @Override public JsonResult> queryByPage(${entity} ${table.entityPath},Integer pageNum,Integer pageSize){ //获取公共查询 LambdaQueryWrapper<${entity}> queryWrapper =baseQuery(${table.entityPath}); //排序 queryWrapper.orderByDesc(${entity}::getId); //分页查询 Page<${entity}> pages = new Page<${entity}>(pageNum == null ? 1 : pageNum,pageSize == null ? 15 : pageSize); return JsonResult.successData(super.baseMapper.selectPage(pages, queryWrapper)); } /** * 基础查询---匹配是否为空,不为空,则录入数据,为空则不加入查询 * @param ${table.entityPath} 请求参数 * @return LambdaQueryWrapper 封装好的数据 */ public LambdaQueryWrapper<${entity}> baseQuery(${entity} ${table.entityPath}){ LambdaQueryWrapper<${entity}> queryWrapper = new LambdaQueryWrapper<>(); ## ---------- BEGIN 字段循环遍历 ---------- #foreach($field in ${table.fields}) #if(${field.propertyType.equals("String")}) if (!StringUtils.isNotEmpty(${table.entityPath}.get${field.capitalName}())) { queryWrapper.eq(${entity}::get${field.capitalName},${table.entityPath}.get${field.capitalName}()); } #else if (${table.entityPath}.get${field.capitalName}() != null ) { queryWrapper.eq(${entity}::get${field.capitalName},${table.entityPath}.get${field.capitalName}()); } #end #end ## ---------- END 字段循环遍历 ---------- return queryWrapper; } /** * 查询单个数据 $!{table.comment} 详情 * * @param ${table.entityPath} 条件查询数据 * @return JsonResult */ @Override public JsonResult<${entity}> queryByEntity(${entity} ${table.entityPath}){ //获取公共查询 LambdaQueryWrapper<${entity}> queryWrapper =baseQuery(${table.entityPath}); ${entity} ${table.entityPath}DB =super.getOne(queryWrapper); if(${table.entityPath}DB == null){ return JsonResult.ErrorMessage("该数据不存在!请核对后重试"); } return JsonResult.successData(${table.entityPath}DB); } /** * 新增或者修改 $!{table.comment} * * @param ${table.entityPath} 请求参数 * @return JsonResult */ @Transactional(rollbackFor = Exception.class) @Override public JsonResult add(${entity} ${table.entityPath}){ super.save(${table.entityPath}); return JsonResult.successData(); } /** * 修改 $!{table.comment} * * @param ${table.entityPath} 请求参数 * @return JsonResult */ @Transactional(rollbackFor = Exception.class) @Override public JsonResult update(${entity} ${table.entityPath}){ if(${table.entityPath}.getId() == null){ return JsonResult.ErrorMessage("ID不能为空!"); } super.updateById(${table.entityPath}); return JsonResult.successData(); } /** * 删除 $!{table.comment} * * @param id 主键id * @return JsonResult */ @Override @Transactional(rollbackFor = Exception.class) public JsonResult delete(Long id){ super.removeById(id); return JsonResult.successData(); } } #end

 

你可能感兴趣的:(mybatisPlus,代码生成器,mybatis_plus)