springboot2.1.9集成mybatis-plus,非常完整的文档

springboot集成mybatis-plus,完整文件
依赖${mybatisplus.version} 3.3.1 版本

 <!-- 整合mybatisplus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatisplus.version}</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
            <version>${mybatisplus.version}</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>${mybatisplus.version}</version>
        </dependency>

生成器:

package com.easysign;

import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import java.util.*;

public class MybatisPlusRunGenerator {

    /**
     * 包名 自定义的包名
     */
    public static String packageCustom = "com.easysign";  //包名
    public static String OutputDir = "D:\\cloud-api\\src\\main\\java";  //文件路径
    public static String author = "free.li";
    public static String dataBaseUrl = "jdbc:mysql://192.168.1.237:3306/uumszs1?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC";
    public static String outXmlPath = "D:\\cloud-api\\src\\main\\resources\\mappers\\";

    public static void main(String[] args) {

         String tablePre = "tbl_";  //表前缀
        //添加表名
        List<String> tables = new ArrayList<>(10);
        tables.add("SYNC_PERSONALUSERINFO");
        //tables.add("tbl_esand_proof");

        // 代码生成器
        AutoGenerator mpg = new AutoGenerator();

        // 全局配置
        GlobalConfig gc = new GlobalConfig();
       // String projectPath = System.getProperty("user.dir");
        gc.setOutputDir(OutputDir);
        gc.setAuthor(author);
        gc.setOpen(false);
        //开启 BaseResultMap
        gc.setBaseResultMap(true);
        gc.setBaseColumnList(true);
        gc.setEnableCache(true);
        // 实体属性 Swagger2 注解
        gc.setSwagger2(true);
        mpg.setGlobalConfig(gc);

        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl(dataBaseUrl);
        // dsc.setSchemaName("public");
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("root");
        dsc.setTypeConvert(new MySqlTypeConvert() {
            @Override
            public DbColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
            System.out.println("转换类型:" + fieldType);
            //tinyint转换成Boolean
            if ( fieldType.toLowerCase().contains( "longblob" )||fieldType.toLowerCase().contains( "blob" ) ) {
            return DbColumnType.BYTE_ARRAY;
            }
            if ( fieldType.toLowerCase().contains( "decimal" )) {
                return DbColumnType.INTEGER;
            }
            //将数据库中datetime转换成date
            if ( fieldType.toLowerCase().contains( "datetime" ) ) {
            return DbColumnType.DATE;
            }
            return (DbColumnType) super.processTypeConvert(globalConfig, fieldType);
            }
            });
        mpg.setDataSource(dsc);

        // 包配置
        PackageConfig pc = new PackageConfig();
//         不需要  直接注释掉
//        pc.setModuleName(scanner("模块名"));
        //设置包名
        pc.setParent(packageCustom);
        mpg.setPackageInfo(pc);

        // 自定义配置
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                // to do nothing
            }
        };

        // 自定义输出配置
        List<FileOutConfig> focList = new ArrayList<>();
        // 自定义配置会被优先输出

        focList.add(new FileOutConfig("/templates/mapper.xml.vm") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                return outXmlPath + tableInfo.getEntityName() + ".xml";
            }
        });
        cfg.setFileOutConfigList(focList);
        mpg.setCfg(cfg);

        // 配置模板
        TemplateConfig tc = new TemplateConfig();

        //控制 不生成 controller
       // tc.setController("");

        tc.setEntity("/templates/entity.java.vm");
        tc.setService("/templates/service.java.vm");
        tc.setServiceImpl("/templates/serviceImpl.java.vm");
        //tc.setController("/templates/controller.java.vm");
        tc.setController("");  //不生成controller
        tc.setMapper("/templates/mapper.java.vm");
//        // 如上任何一个模块如果设置 空 OR Null 将不生成该模块。
        tc.setXml(null);
        mpg.setTemplate(tc);

        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        //自定义继承的Entity类全称,带包名 舍弃 不需要
//        strategy.setSuperEntityClass("com.baomidou.ant.common.BaseEntity");
        strategy.setEntityLombokModel(true);

        //不需要 controller 舍弃
       strategy.setRestControllerStyle(true);
        // 公共父类
//        strategy.setSuperControllerClass("com.baomidou.ant.common.BaseController");
        // 写于父类中的公共字段
       //strategy.setSuperEntityColumns("id");
       //strategy.setSuperEntityColumns(new String[] { "id","create_date","create_by","update_date","update_by","remarks","del_flag" });

        //要添加的表
        strategy.setInclude(tables.toArray(new String[]{}));
        strategy.setControllerMappingHyphenStyle(true);
        //表名前缀 这样生成的bean里面 就没有前缀了
        strategy.setTablePrefix(tablePre);
        mpg.setStrategy(strategy);
        mpg.execute();
    }
}

application.yml配置:

mybatis-plus:
  mapper-locations: classpath:mappers/*.xml
  #实体扫描,多个package用逗号或者分号隔离
  typeAliasesPackage: com.easysign.entity
  global-config:
    db-config:
      #主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID"; 4,UUID
      id-type: 4
      #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
      field-strategy: 1
      #数据库大写下划线转换
      capital-mode: true
  configuration:
    map-underscore-to-camel-case: true
    cache-enabled: false
    #配置JdbcTypeForNull
    jdbc-type-for-null: 'null'
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    # 驼峰下划线转换
    lazy-loading-enabled: true
    # 开启的话,延时加载一个属性时会加载该对象全部属性,否则按需加载属性
    multiple-result-sets-enabled: true
    use-generated-keys: true
    default-statement-timeout: 60
    default-fetch-size: 100

自定义生成的模板:
entity

package ${package.Entity};

#foreach($pkg in ${table.importPackages})
import ${pkg};
#end
#if(${entityLombokModel})

import lombok.Data;
import lombok.experimental.Accessors;
#end

#set($tablecomment = "")
#set($tabletype = "")
#foreach($e in $table.comment.split(","))
	#if( $foreach.count == 1 )
		#set($tablecomment = $e)
	#elseif( $foreach.count == 2 )
		#set($tabletype = $e)
	#end
#end
/**
 * <p>
 * $!{tablecomment}
 * </p>
 *
 * @author ${author}
 * @since ${date}
 */
#if(${entityLombokModel})
@Data
@Accessors(chain = true)
#end
#if(${table.convert})
@TableName("${table.name}")
#end
#if(${superEntityClass})
public class ${entity} extends ${superEntityClass}#if(${activeRecord})<${entity}>#end {
#elseif(${activeRecord})
public class ${entity} extends Model<${entity}> {
#else
public class ${entity} implements Serializable {
#end

    private static final long serialVersionUID = 1L;

## ----------  BEGIN 字段循环遍历  ----------
#foreach($field in ${table.fields})
#set($comment = "")
#set($type = "")
#set($isNullAble = true)
#set($defaultValue = false)
#set($listIsShow = true)
#set($listIsSearch = false)
#foreach( $e in $field.comment.split(","))
#if( $foreach.count == 1 )
#set($comment = $e)
#elseif( $foreach.count == 2 )
#set($type = $e)
#elseif( $foreach.count == 3)
#if($e == "YES")
#set($isNullAble = true)
#else
#set($isNullAble = false)
#end
#elseif( $foreach.count == 4)
#if($e == "true")
#set($defaultValue = true)
#else
#set($defaultValue = false)
#end
#elseif( $foreach.count == 5)
#if($e == "true")
#set($listIsShow = true)
#else
#set($listIsShow = false)
#end
#elseif( $foreach.count == 6)
#if($e == "true")
#set($listIsSearch = true)
#else
#set($listIsSearch = false)
#end
#end
#end
#if(${field.keyFlag})
#set($keyPropertyName=${field.propertyName})
#end
#if("$!comment" != "")
    /**
     * ${comment}
     */
#end
#if(${field.keyFlag})
## 主键
#if(${field.keyIdentityFlag})
	@TableId(value="${field.name}", type= IdType.AUTO)
#elseif(${field.convert})
    @TableId("${field.name}")
#end
## 普通字段
#elseif(${field.fill})
## -----   存在字段填充设置   -----
#if(${field.convert})
	@TableField(value = "${field.name}", fill = FieldFill.${field.fill})
#else
	@TableField(fill = FieldFill.${field.fill})
#end
#elseif(${field.convert})
	@TableField("${field.name}")
#end
## 乐观锁注解
#if(${versionFieldName}==${field.name})
	@Version
#end
## 逻辑删除注解
#if(${logicDeleteFieldName}==${field.name})
    @TableLogic
#end
	private ${field.propertyType} ${field.propertyName};
#end
## ----------  END 字段循环遍历  ----------

#if(!${entityLombokModel})
#foreach($field in ${table.fields})
#set($getprefix="get")
#set($setprefix="set")
	public ${field.propertyType} ${getprefix}${field.capitalName}() {
		return ${field.propertyName};
	}

#if(${entityBuilderModel})
	public ${entity} ${setprefix}${field.capitalName}(${field.propertyType} ${field.propertyName}) {
#else
	public void ${setprefix}${field.capitalName}(${field.propertyType} ${field.propertyName}) {
#end
		this.${field.propertyName} = ${field.propertyName};
#if(${entityBuilderModel})
		return this;
#end
	}
#end
#end

#if(${entityColumnConstant})
#foreach($field in ${table.fields})
	public static final String ${field.name.toUpperCase()} = "${field.name}";

#end
#end

#if(!${entityLombokModel})
	@Override
	public String toString() {
		return "${entity}{" +
#foreach($field in ${table.fields})
#if($!{velocityCount}==1)
			"${field.propertyName}=" + ${field.propertyName} +
#else
			", ${field.propertyName}=" + ${field.propertyName} +
#end
#end
			"}";
	}
#end
}

serviceImpl:

#set($tablecomment = "")
#set($tabletype = "")
#foreach($e in $table.comment.split(","))
    #if( $foreach.count == 1 )
        #set($tablecomment = $e)
    #elseif( $foreach.count == 2 )
        #set($tabletype = $e)
    #end
#end
package ${package.ServiceImpl};

import ${package.Entity}.${entity};
import ${package.Mapper}.${table.mapperName};
import ${package.Service}.${table.serviceName};
import ${superServiceImplClassPackage};
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

/**
 * <p>
 * $!{tablecomment} 服务实现类
 * </p>
 *
 * @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} {

}
#end

mapper

#set($tablecomment = "")
#set($tabletype = "")
#foreach($e in $table.comment.split(","))
    #if( $foreach.count == 1 )
        #set($tablecomment = $e)
    #elseif( $foreach.count == 2 )
        #set($tabletype = $e)
    #end
#end
package ${package.Mapper};

import ${package.Entity}.${entity};
import ${superMapperClassPackage};

/**
 * <p>
 * $!{tablecomment} Mapper 接口
 * </p>
 *
 * @author ${author}
 * @since ${date}
 */
#if(${kotlin})
interface ${table.mapperName} : ${superMapperClass}<${entity}>
#else
public interface ${table.mapperName} extends ${superMapperClass}<${entity}> {

}
#end

mapper.xml

<?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}">

    #if(${baseResultMap})
        <!-- 通用查询映射结果 -->
        <resultMap id="BaseResultMap" type="${package.Entity}.${entity}">
            #foreach($field in ${table.fields})
                #if(${field.keyFlag})##生成主键排在第一位
                    <id column="${field.name}" property="${field.propertyName}" />
                #end
            #end
            #foreach($field in ${table.commonFields})##生成公共字段
                <result column="${field.name}" property="${field.propertyName}" />
            #end
            #foreach($field in ${table.fields})
                #if(!${field.keyFlag})##生成普通字段
                    <result column="${field.name}" property="${field.propertyName}" />
                #end
            #end
        </resultMap>

    #end
    #if(${baseColumnList})
        <!-- 通用查询结果列 -->
        <sql id="Base_Column_List">
#foreach($field in ${table.commonFields})
            #if(${field.name} == ${field.propertyName})${field.name}#else${field.name} AS ${field.propertyName}#end,
#end
        ${table.fieldNames}
    </sql>
    #end
</mapper>

service接口:

package ${package.Service};

import ${package.Entity}.${entity};
import ${superServiceClassPackage};
#set($tablecomment = "")
#set($tabletype = "")
#foreach($e in $table.comment.split(","))
    #if( $foreach.count == 1 )
        #set($tablecomment = $e)
    #elseif( $foreach.count == 2 )
        #set($tabletype = $e)
    #end
#end
/**
 * <p>
 * $!{tablecomment} 服务类
 * </p>
 *
 * @author ${author}
 * @since ${date}
 */
#if(${kotlin})
interface ${table.serviceName} : ${superServiceClass}<${entity}>
#else
public interface ${table.serviceName} extends ${superServiceClass}<${entity}> {

}
#end

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读