mybatis plus 3.3.2 kotlin代码自动生成

1 pom

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.3.2</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

2 show your code

不需要代码生成时,即代码生成后注意要在generator ut方法上加@Ignore注解
如果是junit5 用@Disable代替@Ignore注解

package com.xx.xx.xx.generator

import com.baomidou.mybatisplus.annotation.DbType
import com.baomidou.mybatisplus.annotation.IdType
import com.baomidou.mybatisplus.core.toolkit.StringPool
import com.baomidou.mybatisplus.generator.AutoGenerator
import com.baomidou.mybatisplus.generator.InjectionConfig
import com.baomidou.mybatisplus.generator.config.*
import com.baomidou.mybatisplus.generator.config.po.TableInfo
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine
import org.junit.Ignore
import org.junit.Test
import org.springframework.boot.test.context.SpringBootTest
import java.util.ArrayList

/**
 * @program: xxx-yyyyyy
 *
 * @description: GeneratorTest
 *
 * @author: loulvlin
 *
 * @create: 2020-05-26 17:26
 **/
@SpringBootTest
class GeneratorTest {

    @Ignore
    @Test
    fun userdir(){
        val projectPath = System.getProperty("user.dir")
        println(projectPath)
    }

    /**
    * @Description: 只有需要生成代码时才放开此单元测试方法
    * @Param: 
    * @return: 
    * @Author: loulvlin
    * @Date: 2020/5/27 上午8:57
    */
//    @Ignore
    @Test
    fun generator(){
        println("begin generating")
        val projectPath = System.getProperty("user.dir")

        var mpg = AutoGenerator()

        var globalConfig = GlobalConfig();
        globalConfig.isKotlin = true
        globalConfig.author = "xxxxxx"
        globalConfig.isOpen = false
        globalConfig.outputDir = System.getProperty("user.dir") + "/src/main/kotlin"
        globalConfig.isFileOverride = true
        globalConfig.idType = IdType.AUTO
        globalConfig.xmlName = "%sMapper"
        globalConfig.mapperName = "%sMapper"
        globalConfig.serviceImplName = "%sServiceImpl"
        globalConfig.controllerName = "%sController"
        globalConfig.isBaseColumnList = true
        globalConfig.isBaseResultMap = true

        mpg.globalConfig = globalConfig

        var dsc = com.baomidou.mybatisplus.generator.config.DataSourceConfig()
        dsc.dbType = DbType.MYSQL
        dsc.driverName = "com.mysql.cj.jdbc.Driver"
        dsc.url = "jdbc:mysql://ip:port/aos-center?useUnicode=true&characterEncoding=utf8"
        dsc.username = "xxxxx"
        dsc.password = "xxxxx"

        mpg.dataSource = dsc


        // 自定义配置
        val cfg: InjectionConfig = object : InjectionConfig() {
            override fun initMap() {
                // to do nothing
            }
        }
        val focList: MutableList<FileOutConfig> = ArrayList()
        focList.add(object : FileOutConfig("/templates/mapper.xml.ftl") {
            override fun outputFile(tableInfo: TableInfo): String? {
                // 自定义输入文件名称
                return (projectPath.toString() + "/src/main/resources/mapper/"
                        + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML)
            }
        })

        // config xml template and outpath
        cfg.fileOutConfigList = focList
        mpg.cfg = cfg

        mpg.template = TemplateConfig().setXml(null)
                .setController(null)
                .setService(null)
                .setServiceImpl(null)
//                .setMapper(null)
//                .setEntity(null)
//                .setEntityKt(null)


        var sc = StrategyConfig()
        sc.columnNaming = NamingStrategy.underline_to_camel
        sc.setTablePrefix("sys")
        sc.setInclude("sys_xxx_yyyy")
        sc.naming = NamingStrategy.underline_to_camel
        sc.isEntityLombokModel = true
        sc.isRestControllerStyle = true
        mpg.strategy = sc

        var pkConfig = PackageConfig()
        pkConfig.parent = "com.xxxx.xxxxx.xxxx"
        pkConfig.controller = "controller"
        pkConfig.entity = "entity"
        pkConfig.service = "service"
        pkConfig.mapper = "dao"
        mpg.packageInfo = pkConfig

        mpg.templateEngine = FreemarkerTemplateEngine()
        mpg.execute();
    }
}

3 说明

  • 数据源配置需要换成自己的,dsc.dbType = DbType.MYSQL按需切换
  • postgresql数据库,schema如果不是public,需要指定schemaName,如果不指定,则为默认的public,例子如下:
        dsc.dbType = DbType.POSTGRE_SQL
        dsc.driverName = "org.postgresql.Driver"
        dsc.url = "jdbc:postgresql://ip:port/db"
        dsc.username = "aaaa"
        dsc.password = "bbbb"
        dsc.schemaName = "cccc"
  • globalConfig.author = “loulvlin” author需要换成自己的名字(for 注释)
  • 如果不想生成xml,只需要注释下面两行代码:
        // config xml template and outpath
        cfg.fileOutConfigList = focList
        mpg.cfg = cfg
  • 如果不想生成controller service serviceImpl mapper entity,只需要配置TemplateConfig相应的set方法为null即可,如下
        mpg.template = TemplateConfig().setXml(null)
                .setController(null)
                .setService(null)
                .setServiceImpl(null)
                .setMapper(null)
                .setEntity(null)
                .setEntityKt(null)
  • 配置需要自动生成代码的表和前缀,如配置了前缀,生成的entity名称中不会出现前缀,不配置前缀也可以
        sc.setTablePrefix("sys")
        sc.setInclude("sys_case_dict")
  • 配置需要自动生成代码的表(多个)
        sc.setTablePrefix("sys")
        sc.setInclude("sys_case_dict","sys_case_dict1","sys_case_dict2","sys_case_dict3")
  • 自定义service或controller的基类(按需配置)
        sc.superControllerClass = "com.aos.base.controller.BaseController"
        sc.superServiceClass = "com.aos.base.service.BaseService"
  • 生成的entity需要在类前加个open keyword,for redis序列化
  • 生成的entity 字段类型 LocalDateTime改为 Date(java.util)
@TableName("sys_case_dict")
open class Xxxxxx : Serializable {


    /**
     * 主键(通过自增生成)
     */
    @TableId(value = "id", type = IdType.AUTO)
    var id: Int? = null
    
    /**
     * 创建时间
     */
    var createTime: Date? = null

    /**
     * 修改时间
     */
    var modifyTime: Date? = null


}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Mybatis-plus的自动代码生成器是一个非常方便的工具,可以帮助开发人员快速生成数据库表对应的实体类、Mapper接口、XML映射文件等。它能够根据数据库表结构自动生成代码,大大减少了手动编写重复代码的工作量,提高了开发效率。 这个自动生成器可以根据数据库表自动生成实体类,并且支持根据表结构生成Mapper接口和XML映射文件。通过配置一些参数,比如数据库连接信息、表名、字段名等,就可以轻松地生成对应的代码生成代码可以根据需要进行定制和修改,以满足具体的业务需求。 使用Mybatis-plus的自动代码生成器,可以快速生成CRUD的基础代码,实现基本的数据库操作,减少了手写SQL的工作量。生成代码结构清晰,易于理解和维护。同时,自动生成代码遵循了Mybatis-plus的规范和最佳实践,提高了代码的质量和可读性。 总结来说,Mybatis-plus的自动代码生成器是一个非常实用的工具,可以帮助开发人员快速生成数据库相关的代码,提高开发效率,减少重复劳动。它是基于Mybatis-plus框架的快速开发工具,可以方便地生成实体类、Mapper接口和XML映射文件,为开发人员提供了便利。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [基于Mybatis plus 自动代码生成器的实现代码](https://download.csdn.net/download/weixin_38673235/12759595)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Java EE(J2EE)快速开发框架, SSM 架构 mybatis-plus kisso 实战项目](https://download.csdn.net/download/hanzhuhuaa/88252643)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [mybatis-plus 达梦 代码生成](https://download.csdn.net/download/qq_40213772/85600534)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值