MyBatisPlus 逆向生成增删改查

文章目录

    • pom.xml添加依赖
    • CodeGenerator .java (src/test/java)
    • entity.java.ftl(src/main/resources/templates/code)
    • mapper.java.ftl(src/main/resources/templates/code)
    • mapper.xml.ftl(src/main/resources/templates/code)
    • service.java.ftl(src/main/resources/templates/code)
    • serviceImpl.java.ftl(src/main/resources/templates/code)
    • controller(src/main/resources/templates/code)

pom.xml添加依赖

		<dependency>
		    <groupId>com.baomidougroupId>
		    <artifactId>mybatis-plus-generatorartifactId>
		    <version>3.0.1version>
		dependency>

CodeGenerator .java (src/test/java)

package com.xxx.xxx.code;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
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.FileOutConfig;
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.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

public class CodeGenerator {
	
	/**
     * 

* 读取控制台内容 *

*/
public static String scanner(String tip) { @SuppressWarnings("resource") Scanner scanner = new Scanner(System.in); StringBuilder help = new StringBuilder(); help.append("请输入" + tip + ":"); System.out.println(help.toString()); if (scanner.hasNext()) { String ipt = scanner.next(); if (StringUtils.isNotEmpty(ipt)) { return ipt; } } throw new MybatisPlusException("请输入正确的" + tip + "!"); } public static void main(String[] args) { // 代码生成器 AutoGenerator mpg = new AutoGenerator(); // 全局配置 GlobalConfig gc = new GlobalConfig(); String projectPath = System.getProperty("user.dir"); gc.setOutputDir(projectPath + "/src/main/java"); gc.setAuthor("Author"); //是否打开输出目录 gc.setOpen(false); // gc.setSwagger2(true); 实体属性 Swagger2 注解 mpg.setGlobalConfig(gc); // 数据源配置 DataSourceConfig dsc = new DataSourceConfig(); dsc.setUrl("jdbc:mysql://IP地址:3306/xxx?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false"); // dsc.setSchemaName("public"); dsc.setDriverName("com.mysql.cj.jdbc.Driver"); dsc.setUsername("root"); dsc.setPassword("root"); mpg.setDataSource(dsc); // 包配置 PackageConfig pc = new PackageConfig(); pc.setModuleName(scanner("模块名")); pc.setParent("com.***.***.admin"); mpg.setPackageInfo(pc); // 自定义配置 InjectionConfig cfg = new InjectionConfig() { @Override public void initMap() { // to do nothing } }; // 如果模板引擎是 freemarker String templatePath = "/templates/code/mapper.xml.ftl"; // 如果模板引擎是 velocity // String templatePath = "/templates/mapper.xml.vm"; // 自定义输出配置 List<FileOutConfig> focList = new ArrayList<>(); // 自定义配置会被优先输出 focList.add(new FileOutConfig(templatePath) { @Override public String outputFile(TableInfo tableInfo) { // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!! return projectPath + "/src/main/resources/mybatis/mapper/" + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML; } }); /* cfg.setFileCreate(new IFileCreate() { @Override public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) { // 判断自定义文件夹是否需要创建 checkDir("调用默认方法创建的目录"); return false; } }); */ cfg.setFileOutConfigList(focList); mpg.setCfg(cfg); // 配置模板 TemplateConfig templateConfig = new TemplateConfig(); // 配置自定义输出模板 //指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别 templateConfig.setEntity("templates/code/entity.java"); templateConfig.setMapper("/templates/code/mapper.java"); templateConfig.setService("/templates/code/service.java"); templateConfig.setServiceImpl("/templates/code/serviceImpl.java"); templateConfig.setController("/templates/code/controller.java"); templateConfig.setXml(null); mpg.setTemplate(templateConfig); // 策略配置 StrategyConfig strategy = new StrategyConfig(); strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略 strategy.setColumnNaming(NamingStrategy.nochange);//数据库表字段映射到实体的命名策略, 未指定按照 naming 执行 strategy.setSkipView(true);//跳过视图 // strategy.setSuperEntityClass("com.baomidou.ant.common.BaseEntity"); strategy.setEntityLombokModel(true);//不启用 lombok strategy.setRestControllerStyle(true); // strategy.setSuperControllerClass("com.baomidou.ant.common.BaseController"); strategy.setInclude(scanner("表名")); strategy.setSuperEntityColumns("id"); strategy.setControllerMappingHyphenStyle(true); // strategy.setTablePrefix(pc.getModuleName() + "_"); mpg.setStrategy(strategy); mpg.setTemplateEngine(new FreemarkerTemplateEngine()); mpg.execute(); } }

entity.java.ftl(src/main/resources/templates/code)

package ${package.Entity};

<#list table.importPackages as pkg>
import ${pkg};
</#list>
<#if swagger2>
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
</#if>
<#if entityLombokModel>
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
</#if>

/**
 * 

* ${table.comment!} *

* * @author ${author} * @since ${date} */
<#if entityLombokModel> @Data <#if superEntityClass??> @EqualsAndHashCode(callSuper = true) <#else> @EqualsAndHashCode(callSuper = false) </#if> @Accessors(chain = true) </#if> <#if table.convert> @TableName("${table.name}") </#if> <#if swagger2> @ApiModel(value="${entity}对象", description="${table.comment!}") </#if> <#if superEntityClass??> public class ${entity} extends ${superEntityClass}<#if activeRecord><${entity}></#if> { <#elseif activeRecord> public class ${entity} extends Model<${entity}> { <#else> public class ${entity} implements Serializable { </#if> private static final long serialVersionUID = 1L; <#-- ---------- BEGIN 字段循环遍历 ----------> <#list table.fields as field> <#if field.keyFlag> <#assign keyPropertyName="${field.propertyName}"/> </#if> <#if field.comment!?length gt 0> <#if swagger2> @ApiModelProperty(value = "${field.comment}") <#else> /** * ${field.comment} */ </#if> </#if> <#if field.keyFlag> <#-- 主键 --> <#if field.keyIdentityFlag> @TableId(value = "${field.name}", type = IdType.AUTO) <#elseif idType??> @TableId(value = "${field.name}", type = IdType.${idType}) <#elseif field.convert> @TableId("${field.name}") </#if> <#-- 普通字段 --> <#elseif field.fill??> <#-- ----- 存在字段填充设置 -----> <#if field.convert> @TableField(value = "${field.name}", fill = FieldFill.${field.fill}) <#else> @TableField(fill = FieldFill.${field.fill}) </#if> <#elseif field.convert> @TableField("${field.name}") </#if> <#-- 乐观锁注解 --> <#if (versionFieldName!"") == field.name> @Version </#if> <#-- 逻辑删除注解 --> <#if (logicDeleteFieldName!"") == field.name> @TableLogic </#if> private ${field.propertyType} ${field.propertyName}; </#list> <#------------ END 字段循环遍历 ----------> <#------------ BEGIN lombok ----------> <#if !entityLombokModel> <#list table.fields as field> <#if field.propertyType == "boolean"> <#assign getprefix="is"/> <#else> <#assign getprefix="get"/> </#if> public ${field.propertyType} ${getprefix}${field.capitalName}() { return ${field.propertyName}; } <#if entityBuilderModel> public ${entity} set${field.capitalName}(${field.propertyType} ${field.propertyName}) { <#else> public void set${field.capitalName}(${field.propertyType} ${field.propertyName}) { </#if> this.${field.propertyName} = ${field.propertyName}; <#if entityBuilderModel> return this; </#if> } </#list> </#if> <#------------ END lombok ----------> <#if entityColumnConstant> <#list table.fields as field> public static final String ${field.name?upper_case} = "${field.name}"; </#list> </#if> <#if activeRecord> @Override protected Serializable pkVal() { <#if keyPropertyName??> return this.${keyPropertyName}; <#else> return null; </#if> } </#if> <#if !entityLombokModel> @Override public String toString() { return "${entity}{" + <#list table.fields as field> <#if field_index==0> "${field.propertyName}=" + ${field.propertyName} + <#else> ", ${field.propertyName}=" + ${field.propertyName} + </#if> </#list> "}"; } </#if> }

mapper.java.ftl(src/main/resources/templates/code)

package ${package.Mapper};

import java.util.List;
import ${package.Entity}.${entity};
import ${superMapperClassPackage};

/**
 * 

* ${table.comment!} Mapper 接口 *

* * @author ${author} * @since ${date} */
<#if kotlin> interface ${table.mapperName} : ${superMapperClass}<${entity}> <#else> public interface ${table.mapperName} extends ${superMapperClass}<${entity}> { public void add(${entity} ${package.ModuleName}); public void update(${entity} ${package.ModuleName}); public void del(String ${package.ModuleName}_id); public ${entity} getById(String ${package.ModuleName}_id); public List<${entity}> get(${entity} ${package.ModuleName}); } </#if>

mapper.xml.ftl(src/main/resources/templates/code)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="${package.Mapper}.${table.mapperName}">

	<insert id="add"
		useGeneratedKeys="true"
		keyProperty="${package.ModuleName}_id"
		parameterType="${package.Entity}.${entity}">
		insert into ${table.name}(
			<#list table.fields as field>
			<#if field.propertyName == "${package.ModuleName}_id">
			<#else>
			${field.propertyName}<#if field_has_next>,</#if>
			</#if>
		    </#list>
		)values(
			<#list table.fields as field>
			<#if field.propertyName == "${package.ModuleName}_id">
			<#else>
			<#noparse>#{</#noparse>${field.propertyName}<#noparse>}</#noparse><#if field_has_next>,</#if>
			</#if>
		    </#list>
		)
	</insert>
	
	<select id="get"
		parameterType="${package.Entity}.${entity}"
		resultType="${package.Entity}.${entity}">
		select
			<#list table.fields as field>
			v.${field.propertyName}<#if field_has_next>,</#if>
		    </#list>
		from 
			${table.name} v
		where 
			1 = 1
		<#list table.fields as field>
		<if test="${field.propertyName} != null and ${field.propertyName} != ''"> and v.${field.propertyName} = <#noparse>#{</#noparse>${field.propertyName}<#noparse>}</#noparse></if>
		</#list>
	</select>
	
	<select id="getById"
		parameterType="${package.Entity}.${entity}"
		resultType="${package.Entity}.${entity}">
		select
			<#list table.fields as field>
			v.${field.propertyName}<#if field_has_next>,</#if>
		    </#list>
		from 
			${table.name} v
		where 
			1 = 1
		and v.${package.ModuleName}_id = <#noparse>#{</#noparse>${package.ModuleName}_id<#noparse>}</#noparse>
		limit 1
	</select>
	
	<update id="update"
		parameterType="${package.Entity}.${entity}">
		update ${table.name} v
		set v.${package.ModuleName}_id = <#noparse>#{</#noparse>${package.ModuleName}_id<#noparse>}</#noparse>
		<#list table.fields as field>
		<#if field.propertyName == "${package.ModuleName}_id">
		<#else>
		<if test="${field.propertyName} != null and ${field.propertyName} != ''"> , v.${field.propertyName} = <#noparse>#{</#noparse>${field.propertyName}<#noparse>}</#noparse></if>
		</#if>
		</#list>
		where v.${package.ModuleName}_id = <#noparse>#{</#noparse>${package.ModuleName}_id<#noparse>}</#noparse>
	</update>
	
	<delete id="del"
		parameterType="java.lang.String">
		delete from ${table.name}
		where ${package.ModuleName}_id = <#noparse>#{</#noparse>${package.ModuleName}_id<#noparse>}</#noparse>
	</delete>
	
	
</mapper>

service.java.ftl(src/main/resources/templates/code)

package ${package.Service};

import java.util.List;
import ${package.Entity}.${entity};
import ${superServiceClassPackage};

/**
 * 

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

* * @author ${author} * @since ${date} */
<#if kotlin> interface ${table.serviceName} : ${superServiceClass}<${entity}> <#else> public interface ${table.serviceName} extends ${superServiceClass}<${entity}> { public void add(${entity} ${package.ModuleName}); public void update(${entity} ${package.ModuleName}); public void del(String ${package.ModuleName}_id); public ${entity} getById(String ${package.ModuleName}_id); public List<${entity}> get(${entity} ${package.ModuleName}); public List<${entity}> get(${entity} ${package.ModuleName}, int pageNum, int pageSize); } </#if>

serviceImpl.java.ftl(src/main/resources/templates/code)

package ${package.ServiceImpl};

import ${package.Entity}.${entity};
import ${package.Mapper}.${table.mapperName};
import ${package.Service}.${table.serviceName};
import ${superServiceImplClassPackage};
import java.util.List;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * 

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

* * @author ${author} * @since ${date} */
@Service <#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} { @Autowired ${table.mapperName} ${package.ModuleName}Mapper; @Override public void add(${entity} ${package.ModuleName}) { ${package.ModuleName}Mapper.add(${package.ModuleName}); } @Override public void del(String ${package.ModuleName}_id) { ${package.ModuleName}Mapper.del(${package.ModuleName}_id); } @Override public void update(${entity} ${package.ModuleName}) { ${package.ModuleName}Mapper.update(${package.ModuleName}); } @Override public ${entity} getById(String ${package.ModuleName}_id) { return ${package.ModuleName}Mapper.getById(${package.ModuleName}_id); } @Override public List<${entity}> get(${entity} ${package.ModuleName}) { List<${entity}> ${package.ModuleName}List = ${package.ModuleName}Mapper.get(${package.ModuleName}); return ${package.ModuleName}List; } @Override public List<${entity}> get(${entity} ${package.ModuleName}, int pageNum, int pageSize) { PageHelper.startPage(pageNum, pageSize); List<${entity}> ${package.ModuleName}List = ${package.ModuleName}Mapper.get(${package.ModuleName}); return ${package.ModuleName}List; } } </#if>

controller(src/main/resources/templates/code)

package ${package.Controller};

import ${package.Entity}.${entity};
import com.github.pagehelper.PageInfo;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import ${package.Service}.${table.serviceName};

<#if restControllerStyle>
import org.springframework.web.bind.annotation.RestController;
<#else>
import org.springframework.stereotype.Controller;
</#if>
<#if superControllerClassPackage??>
import ${superControllerClassPackage};
</#if>

/**
 * 

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

* * @author ${author} * @since ${date} */
<#if restControllerStyle> @RestController <#else> @Controller </#if> @RequestMapping("<#if package.ModuleName??>/${package.ModuleName}/<#if controllerMappingHyphenStyle??>${controllerMappingHyphen}<#else>${table.entityPath}") <#if kotlin> class ${table.controllerName}<#if superControllerClass??> : ${superControllerClass}()</#if> <#else> <#if superControllerClass??> public class ${table.controllerName} extends ${superControllerClass} { <#else> public class ${table.controllerName} { </#if> @Autowired ${table.serviceName} ${package.ModuleName}Service; @RequestMapping("/getByPage") @NotNull(str="pageNum,pageSize") @LoginRequired public Object getByPage(${entity} ${package.ModuleName}, int pageNum, int pageSize) { List<${entity}> ${package.ModuleName}List = ${package.ModuleName}Service.get(${package.ModuleName}, pageNum, pageSize); PageInfo<${entity}> pageInfo = new PageInfo<>(${package.ModuleName}List); return ResultUtil.success(pageInfo); } @RequestMapping("/get") @LoginRequired public Object get(${entity} ${package.ModuleName}) { List<${entity}> ${package.ModuleName}List = ${package.ModuleName}Service.get(${package.ModuleName}); return ResultUtil.success(${package.ModuleName}List); } @RequestMapping("/add") @LoginRequired public Object add(${entity} ${package.ModuleName}, @CurrentUser User currentUser) { ${package.ModuleName}Service.add(${package.ModuleName}); return ResultUtil.success(); } @RequestMapping("/del") @LoginRequired @NotNull(str="${package.ModuleName}_id") public Object del(String ${package.ModuleName}_id, @CurrentUser User currentUser) { ${package.ModuleName}Service.del(${package.ModuleName}_id); return ResultUtil.success(); } @RequestMapping("/update") @LoginRequired @NotNull(str="${package.ModuleName}_id") public Object update(${entity} ${package.ModuleName}, @CurrentUser User currentUser) { ${package.ModuleName}Service.update(${package.ModuleName}); return ResultUtil.success(); } } </#if>

你可能感兴趣的:(Java)