Mybatis代码自动生成

新启动的项目,数据库设计可能随时会变动,一些基础的接口,特别是xml文件和映射对象也需要变动,改动工作量大,用mybatis-plus代码自动生成工具自动生成代码,大大提高了效率

自动生成代码工具使用过程记录如下

  1. 首先手动创建一个springboot项目,可以去springboot官网上生成,也可以用idea自己创建,我的idea是社区版,无法自己创建,用的官网自动生成,网址: https://start.spring.io/  

 

  1. 导入依赖,我的模板使用的是freemaker
  2.  写自己的代码生成类,

 

这里自定义属性,是我在生成xml文件的时候,发现生成的result  里面的jdbcType不是我想要的,写了个方法,转换成自己需要的类型,在模板中调用这个方法,就能转换

自定义jdbc转换方法:

 

这里的自定义输出,xml文件生成以后在文件夹resources/mapper下,不会和java代码在一个地方

 

 

 

 

 

  1. 模板修改,这里是重点,Mybatis中有模板,但不一定是我们需要的,如果想写成自己需要的,就修改模板,我的是需要写自己项目对应的代码,所有模板都修改了一遍

修改思路:

在resources目录下新建templates文件夹,

找到mybatis-plus包中的模板,拷贝出来,放到templates文件夹下,我这里使用的模板是freemaker,所以知悉要保留对应的模板就可以了,freemaker模板对应的文件后缀是.ftl

 

 

  1.       mapper模板

  1. mapper.xml模板,这里是重点中的重点,我个人花时间最长的

下面是生成返回结果集

 通用查询列

 新增,条件新增,字段子为null,不新增,生成的sql带if标签

描述:

<#noparse>/#noparse>  标签,特殊字符转义用的,有些{需要保留,就用这个标签

 

下面这个删除,涉及到逻辑删除和物理删除,

<#assign isDeleted = "false">  是定义全局变量的,我这里定义的是isDeleted  可以按需定义
<#if (logicDeleteFieldName!"") == field.name>  这里:logicDeleteFieldName 是代码生成类中 策略配置 设置了的 

 以下是逻辑删除生成sql的模板代码

条件查询,不传条件不加过滤条件,查询全表数据,生成的sql中带if标签判断是否有传入参数

 

 

 

  1. controller模板,我项目中是按照自己需要写的,不适用其它项目,这里就不描述,说一下思路:如果你的项目中的接口基本差不多,入参出参都有统一规范,可以自己先写好一个controller,然后以这个controller为模板,写对应的代码,下面是我的其中一个接口,仅供参考

 

  1. serviceImpl模板,service模板,entity模板,思路参考controller,这里不描述

后记:第一次写模板,不知道模板中一些变量的层级,以及这个变量是否存在,请教了同事,记下心得:

debug模式调试:

        断点位置:

AutoGenerator  类中,找到:AbstractTemplateEngine 类的getObjectMap方法,

 

 点击view,拿到json格式的数据,自己保存下来,方便看,以及找属性,我的如下

 这里也可以看自定义属性是否设置成功,以及层级关系

 

 

到这里,自动生成的代码和模板都写完,运行,测试,看是不是自己需要的代码吧

 

一. 生成器模板路径可以引用相关变量 如 ${basepackage}/${className}.java,根据该变量生成输出文件 二. 自动搜索某个目录所有模板文件,无需配置 三.代码生成器模板可以引用的相关变量 1. g.generateByTable("table_name") 方法可以引用的变量 table : cn.org.rapid_framework.generator.provider.db.table.model.Table 2. g.generateByClass(UserInfo.class) 方法可以引用的变量 clazz : cn.org.rapid_framework.generator.provider.java.model.JavaClass 3. g.generateBySql("select * from user_info where pwd=:pwd") 方法可以引用的变量 sql : cn.org.rapid_framework.generator.provider.db.sql.model.Sql 4.公共变量 env : 系统环境变量 System.getProperties() : 直接引用,没有前缀 generator.properties 文件中的所有属性,直接引用,没有前缀 gg : 模板控制变量, cn.org.rapid_framework.generator.GeneratorControl 四.每个模板有gg变量可以控制自身的自定义配置 (每一个模板都会创建新的gg实例) 如是否生成,是否覆盖目标文件,甚至是生成其它文件 ${gg.setIgnoreOutput(true)}: 如果为true则不生成输出文件 ${gg.generateFile(outputFile,content)} 在模板中生成其它文件 ${gg.getProperty(key,defaultValue)}: 得到proproty,如果没有找到,则返回默认值 ${gg.getInputProperty(key)}: 会弹出一个输入框,提示用户输入值 具体参考: http://code.google.com/p/rapid-framework/wiki/rapid_generator_gg 五.支持生成(gen)及删除操作(del),即生成的代码也可以很方便的删除 六. 自动删除模板扩展名: .ftl,.vm 举例: 如你有一个模板 SqlMap.xml.ftl 将变为 SqlMap.xml 所以你要生成ftl扩展名的文件,应该将文件名从 list.ftl => list.ftl.ftl 七. 模板自动include所有父目录的:macro.include文件,可以存放公共的macro 示例: 如你的模板为 com/project/UserDao.java, 将自动include: com/project/macro.include, com/macro.include, macro.include 八. generator.xml (或者generator.properties)配置文件 1.类似ant可以变量引用,引用环境变量使用${env.JAVA_HOME}, 引用System.getProperties()直接引用 2.自动替换generator.properties中的句号(.)为反斜杠,设置key为key+"_dir"后缀 示例: pkg=com.company => pkg_dir=com/company 九.自动拷贝二进制文件至输出目录 如模板目录下的 zip,rar,doc文件将会自动拷贝至输出目录,不会破坏文件格式 (通过扩展名自动识别) 十. 数据库表配置,用于自定义生成器模板引用的table变量,配置文件必须存放在classpath: generator_config/table/table_name.xml (该文件生成器可以生成,自己再自定义修改)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值