返回顶部
首页 > 资讯 > 精选 >如何使用MybatisPlus自定义模版中能获取到的信息
  • 852
分享到

如何使用MybatisPlus自定义模版中能获取到的信息

2023-06-30 15:06:23 852人浏览 安东尼
摘要

这篇文章主要介绍“如何使用mybatisPlus自定义模版中能获取到的信息”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何使用MybatisPlus自定义模版中能获取到的信息”文章能帮助大家解决问

这篇文章主要介绍“如何使用mybatisPlus自定义模版中能获取到的信息”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何使用MybatisPlus自定义模版中能获取到的信息”文章能帮助大家解决问题。

使用MybatisPlus的AutoGenerator生成代码

这个可自行官网查看,或者搜索引擎查一下一大堆可以参考的,这里就不过多叙述。

模版中能获取到哪些信息

官方没有给出在自定义模版中你能获取到哪些信息来生成你想要的代码,所以本人就看了一下源码,能获取到的信息都在com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine类的getObjectMap方法中,如下:

        public Map<String, Object> getObjectMap(TableInfo tableInfo) {        Map<String, Object> objectMap = new HashMap<>();        ConfigBuilder config = this.getConfigBuilder();        if (config.getStrategyConfig().isControllerMappingHyphenStyle()) {            objectMap.put("controllerMappingHyphenStyle", config.getStrategyConfig().isControllerMappingHyphenStyle());            objectMap.put("controllerMappingHyphen", StringUtils.camelToHyphen(tableInfo.getEntityPath()));        }        objectMap.put("restControllerStyle", config.getStrategyConfig().isRestControllerStyle());        objectMap.put("package", config.getPackageInfo());        GlobalConfig globalConfig = config.getGlobalConfig();        objectMap.put("author", globalConfig.getAuthor());        objectMap.put("idType", globalConfig.getIdType() == null ? null : globalConfig.getIdType().toString());        objectMap.put("logicDeleteFieldName", config.getStrategyConfig().getLogicDeleteFieldName());        objectMap.put("versionFieldName", config.getStrategyConfig().getVersionFieldName());        objectMap.put("activeRecord", globalConfig.isActiveRecord());        objectMap.put("Kotlin", globalConfig.isKotlin());        objectMap.put("date", new SimpleDateFORMat("yyyy-MM-dd").format(new Date()));        objectMap.put("table", tableInfo);        objectMap.put("enableCache", globalConfig.isEnableCache());        objectMap.put("baseResultMap", globalConfig.isBaseResultMap());        objectMap.put("baseColumnList", globalConfig.isBaseColumnList());        objectMap.put("entity", tableInfo.getEntityName());        objectMap.put("entityColumnConstant", config.getStrategyConfig().isEntityColumnConstant());        objectMap.put("entityBuilderModel", config.getStrategyConfig().isEntityBuilderModel());        objectMap.put("entityLombokModel", config.getStrategyConfig().isEntityLombokModel());        objectMap.put("entityBooleanColumnRemoveIsPrefix", config.getStrategyConfig().isEntityBooleanColumnRemoveIsPrefix());        objectMap.put("superEntityClass", this.getSuperClassName(config.getSuperEntityClass()));        objectMap.put("superMapperClassPackage", config.getSuperMapperClass());        objectMap.put("superMapperClass", this.getSuperClassName(config.getSuperMapperClass()));        objectMap.put("superServiceClassPackage", config.getSuperServiceClass());        objectMap.put("superServiceClass", this.getSuperClassName(config.getSuperServiceClass()));        objectMap.put("superServiceImplClassPackage", config.getSuperServiceImplClass());        objectMap.put("superServiceImplClass", this.getSuperClassName(config.getSuperServiceImplClass()));        objectMap.put("superControllerClassPackage", config.getSuperControllerClass());        objectMap.put("superControllerClass", this.getSuperClassName(config.getSuperControllerClass()));        return objectMap;    }

下面我就顺便整理一下方便以后查看

属性类型描述示例
controllerMappingHyphenStylebooleancontrollerMapping是否为连字符形式驼峰:@RequestMapping("/managerUserActionHistory")连字符:@RequestMapping("/manager-user-action-history")
controllerMappingHyphenString实体类的连字符形式manager-user-action-history
restControllerStyleboolean是否为RestController模式 
packageMap所有包配置信息 
package.EntityStringEntity所在包路径com.geek.sean.test.model
package.MapperStringMapper所在包路径com.geek.sean.test.mapper
package.XmlStringMapper的xml文件所在包路径com.geek.sean.test.mapper.xml
package.ServiceImplStringService实现类所在包路径com.geek.sean.test.service.impl
package.ServiceStringService所在包路径com.geek.sean.test.service
package.ControllerStringController所在包路径com.geek.sean.test.controller
authorStringGlobalConfig中配置的author 
idTypeStringGlobalConfig中配置的idType 
logicDeleteFieldNameString策略配置项中配置的逻辑删除属性名称 
versionFieldNameString策略配置项中配置的乐观属性名称 
activeRecordboolean是否开启ActiveRecord模式 
kotlinboolean是否开启 Kotlin 模式 
dateString当前日期(yyyy-MM-dd)2019-07-09
tableTableInfo表信息,关联到当前字段信息 
table.nameString表名例:sys_user
table.commentString表描述用户信息表
table.entityNameString实体类名称SysUser
table.mapperNameStringMapper类名SysUserMapper
table.xmlNameStringMapper对应的xml名称SysUserMapper
table.serviceNameStringService名称SysUserService
table.serviceImplNameStringService实现类名称SysUserServiceImpl
table.controllerNameStringController名称SysUserController
table.fieldsList<TableField>字段信息集合 
table.fields[n].nameString字段名称user_id
table.fields[n].typeString字段类型int(11)、varchar(64)、timestamp、char(1)
table.fields[n].propertyNameString属性名userId、userName
table.fields[n].columnTypeString属性类型String、Integer
table.fields[n].commentString字段描述用户名
table.importPackagesList<String>引入包集合[&lsquo;com.baomidou.mybatisplus.enums.IdType&rsquo;,&lsquo;java.util.Date&rsquo;]
table.fieldNamesString表字段名,逗号分隔user_id, user_name, passWord
enableCacheboolean是否在xml中添加二级缓存配置 
baseResultMapboolean是否开启 BaseResultMap 
baseColumnListboolean是否开启 baseColumnList 
entityStringEntity类名 
entityColumnConstantboolean【实体】是否生成字段常量(默认 false) 
entityBuilderModelboolean【实体】是否为构建者模型(默认 false) 
entityLombokModelboolean【实体】是否为lombok模型(默认 false) 
entityBooleanColumnRemoveIsPrefixbooleanBoolean类型字段是否移除is前缀(默认 false)比如 : 数据库字段名称 : &lsquo;is_xxx&rsquo;,类型为 : tinyint. 在映射实体的时候则会去掉is,在实体类中映射最终结果为 xxx
superEntityClassStringEntity父类BaseEntity
superMapperClassPackageStringMapper父类包路径com.baomidou.mybatisplus.mapper.BaseMapper
superMapperClassStringMapper父类BaseMapper
superServiceClassPackageStringService父类包路径com.baomidou.mybatisplus.service.IService
superServiceClassStringService父类IService
superServiceImplClassPackageStringService实现类父类包路径com.baomidou.mybatisplus.service.impl.ServiceImpl
superServiceImplClassStringService实现类父类ServiceImpl
superControllerClassPackageStringController类父类包路径 
superControllerClassStringController父类 

总结了一上午,个别字段没有放上,自己用到时候可以再去源码看看。

MybatisPlus遇到的坑

SpringBoot项目整合mybatis-plus、lombok时遇到了使用代码生成器生成实体类及mapper后,调用方法时报错找不到mapper,后经过一项项调整pom文件内jar包依赖,才知道mybatis-plus版本号存在很多不兼容。

1、导入依赖

<dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-jdbc</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-WEB</artifactId>        </dependency>        <dependency>            <groupId>org.mybatis.spring.boot</groupId>            <artifactId>mybatis-spring-boot-starter</artifactId>            <version>2.0.1</version>        </dependency>        <dependency>            <groupId>mysql</groupId>            <artifactId>Mysql-connector-java</artifactId>            <scope>runtime</scope>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>        <!-- mybatis的orm插件 -->        <dependency>            <groupId>com.baomidou</groupId>            <artifactId>mybatis-plus</artifactId>            <version>2.1.9</version>        </dependency>        <dependency>            <groupId>com.baomidou</groupId>            <artifactId>mybatisplus-spring-boot-starter</artifactId>            <version>1.0.4</version>        </dependency>        <dependency>            <groupId>org.projectlombok</groupId>            <artifactId>lombok</artifactId>            <scope>provided</scope>        </dependency>        <!--阿里数据库链接依赖 -->        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>        </dependency>                <dependency>            <groupId>com.alibaba</groupId>            <artifactId>druid</artifactId>            <version>1.1.9</version>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-configuration-processor</artifactId>            <optional>true</optional>        </dependency>

因为我用的是阿里云的数据库,所以需要导入阿里云及数据库依赖,lombok为简化实体类生成的插件jar包。

注意:千万注意mybatis-plus版本!!!千万注意mybatis-plus版本!!!千万注意mybatis-plus版本!!!

2、配置分页配置文件和数据源

package com.ds.tech.config;import javax.sql.DataSource;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.jdbc.datasource.DataSourceTransactionManager;import com.alibaba.druid.pool.DruidDataSource;@Configurationpublic class DataSourceConfig {     @Bean(name="dataSource")    @ConfigurationProperties(prefix="spring.datasource")    public DataSource dataSource(){        return new DruidDataSource();    }     // 配置事物管理器    @Bean(name="transactionManager")    public DataSourceTransactionManager transactionManager(){        return new DataSourceTransactionManager(dataSource());    }}
package com.ds.tech.config;import org.mybatis.spring.annotation.MapperScan;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import com.baomidou.mybatisplus.plugins.PaginationInterceptor;@Configuration//扫描dao或者是Mapper接口@MapperScan("com.ds.tech.mapper*")public class MybatisPlusConfig {    @Bean  public PaginationInterceptor paginationInterceptor(){      PaginationInterceptor page = new PaginationInterceptor();      page.setDialectType("mysql");      return page;  }}

配置代码生成器,然后就可以生成代码使用了 

package com.ds.tech;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;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.rules.DbType;import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;public class MpGenerator {     final static String  dirPath = "D://mybatis";         public static void main(String[] args) {        AutoGenerator mpg = new AutoGenerator();        // 选择 freemarker 引擎,默认 Veloctiy        //mpg.setTemplateEngine(new FreemarkerTemplateEngine());         // 全局配置        GlobalConfig GC = new GlobalConfig();        gc.setOutputDir(dirPath);        gc.setAuthor("dashen");        gc.setFileOverride(true); //是否覆盖        gc.setActiveRecord(false);// 不需要ActiveRecord特性的请改为false        gc.setEnableCache(false);// XML 二级缓存        gc.setBaseResultMap(false);// XML ResultMap        gc.setBaseColumnList(false);// XML columList         // 自定义文件命名,注意 %s 会自动填充表实体属性!        // gc.setMapperName("%sDao");        // gc.setXmlName("%sMapper");        // gc.setServiceName("MP%sService");        // gc.setServiceImplName("%sServiceDiy");        // gc.setControllerName("%sAction");        mpg.setGlobalConfig(gc);         // 数据源配置        DataSourceConfig dsc = new DataSourceConfig();        dsc.setDbType(DbType.MYSQL);        dsc.setTypeConvert(new MySqlTypeConvert(){            // 自定义数据库表字段类型转换【可选】//            @Override//            public DbColumnType processTypeConvert(String fieldType) {//                System.out.println("转换类型:" + fieldType);//                // 注意!!processTypeConvert 存在默认类型转换,如果不是你要的效果请自定义返回、非如下直接返回。//                return super.processTypeConvert(fieldType);//            }        });        dsc.setDriverName("com.mysql.jdbc.Driver");        dsc.setUsername("k");        dsc.setPassword("mj^");        dsc.setUrl("jdbc:mysql://rm-2zql.rds.aliyuncs.06/mjmk_dev?useUnicode=true&characterEncoding=utf-8");        mpg.setDataSource(dsc);         // 策略配置        StrategyConfig strategy = new StrategyConfig();        // strategy.setCapitalMode(true);// 全局大写命名 oracle 注意        strategy.setTablePrefix(new String[] { "tb_", "tsys_" });// 此处可以修改为您的表前缀        strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略        strategy.setInclude(new String[] { "store" }); // 需要生成的表        // strategy.setExclude(new String[]{"test"}); // 排除生成的表        // 自定义实体父类        // strategy.setSuperEntityClass("com.baomidou.demo.TestEntity");        // strategy.setSuperEntityClass("java.io.Serializable");        // 自定义实体,公共字段        // strategy.setSuperEntityColumns(new String[] { "test_id", "age" });        // 自定义 mapper 父类        // strategy.setSuperMapperClass("com.baomidou.demo.TestMapper");        // 自定义 service 父类        // strategy.setSuperServiceClass("com.baomidou.demo.TestService");        // 自定义 service 实现类父类        // strategy.setSuperServiceImplClass("com.baomidou.demo.TestServiceImpl");        // 自定义 controller 父类        // strategy.setSuperControllerClass("com.baomidou.demo.TestController");        // 【实体】是否生成字段常量(默认 false)        // public static final String ID = "test_id";        // strategy.setEntityColumnConstant(true);        // 【实体】是否为构建者模型(默认 false)        // public User setName(String name) {this.name = name; return this;}         strategy.setEntityBuilderModel(true);         strategy.setEntityLombokModel(true);        mpg.setStrategy(strategy);         // 包配置        PackageConfig pc = new PackageConfig();        pc.setParent("com.ds.tech");//        pc.setModuleName("");        pc.setController("controller");        pc.setEntity("entity");        pc.setMapper("mapper");        pc.setService("service");        pc.setServiceImpl("serviceImpl");        pc.setXml("mapperXml");         mpg.setPackageInfo(pc);         // 注入自定义配置,可以在 VM 中使用 cfg.abc 【可无】        InjectionConfig cfg = new InjectionConfig() {            @Override            public void initMap() {                Map<String, Object> map = new HashMap<String, Object>();                map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp");                this.setMap(map);            }        };         // 自定义 xxList.jsp 生成        List<FileOutConfig> focList = new ArrayList<FileOutConfig>();         // 调整 xml 生成目录演示        mpg.setCfg(cfg);         // 关闭默认 xml 生成,调整生成 至 根目录         // 自定义模板配置,可以 copy 源码 mybatis-plus/src/main/resources/templates 下面内容修改,        // 放置自己项目的 src/main/resources/templates 目录下, 默认名称一下可以不配置,也可以自定义模板名称        // TemplateConfig tc = new TemplateConfig();        // tc.setController("...");        // tc.setEntity("...");        // tc.setMapper("...");        // tc.setXml("...");        // tc.setService("...");        // tc.setServiceImpl("...");        // 如上任何一个模块如果设置 空 OR Null 将不生成该模块。        // mpg.setTemplate(tc);         // 执行生成        mpg.execute();         // 打印注入设置【可无】        System.err.println(mpg.getCfg().getMap().get("abc"));    }}

关于“如何使用MybatisPlus自定义模版中能获取到的信息”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: 如何使用MybatisPlus自定义模版中能获取到的信息

本文链接: https://lsjlt.com/news/329899.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作