新启动的项目,数据库设计可能随时会变动,一些基础的接口,特别是xml文件和映射对象也需要变动,改动工作量大,用mybatis-plus代码自动生成工具自动生成代码,大大提高了效率
自动生成代码工具使用过程记录如下
- 首先手动创建一个springboot项目,可以去springboot官网上生成,也可以用idea自己创建,我的idea是社区版,无法自己创建,用的官网自动生成,网址: https://start.spring.io/
- 导入依赖,我的模板使用的是freemaker
- 写自己的代码生成类,
这里自定义属性,是我在生成xml文件的时候,发现生成的result 里面的jdbcType不是我想要的,写了个方法,转换成自己需要的类型,在模板中调用这个方法,就能转换
自定义jdbc转换方法:
这里的自定义输出,xml文件生成以后在文件夹resources/mapper下,不会和java代码在一个地方
- 模板修改,这里是重点,Mybatis中有模板,但不一定是我们需要的,如果想写成自己需要的,就修改模板,我的是需要写自己项目对应的代码,所有模板都修改了一遍
修改思路:
在resources目录下新建templates文件夹,
找到mybatis-plus包中的模板,拷贝出来,放到templates文件夹下,我这里使用的模板是freemaker,所以知悉要保留对应的模板就可以了,freemaker模板对应的文件后缀是.ftl
- mapper模板
- mapper.xml模板,这里是重点中的重点,我个人花时间最长的
下面是生成返回结果集
通用查询列
新增,条件新增,字段子为null,不新增,生成的sql带if标签
描述:
<#noparse>/#noparse> 标签,特殊字符转义用的,有些{需要保留,就用这个标签
下面这个删除,涉及到逻辑删除和物理删除,
<#assign isDeleted = "false"> 是定义全局变量的,我这里定义的是isDeleted 可以按需定义
<#if (logicDeleteFieldName!"") == field.name> 这里:logicDeleteFieldName 是代码生成类中 策略配置 设置了的
以下是逻辑删除生成sql的模板代码
条件查询,不传条件不加过滤条件,查询全表数据,生成的sql中带if标签判断是否有传入参数
- controller模板,我项目中是按照自己需要写的,不适用其它项目,这里就不描述,说一下思路:如果你的项目中的接口基本差不多,入参出参都有统一规范,可以自己先写好一个controller,然后以这个controller为模板,写对应的代码,下面是我的其中一个接口,仅供参考
- serviceImpl模板,service模板,entity模板,思路参考controller,这里不描述
后记:第一次写模板,不知道模板中一些变量的层级,以及这个变量是否存在,请教了同事,记下心得:
debug模式调试:
断点位置:
AutoGenerator 类中,找到:AbstractTemplateEngine 类的getObjectMap方法,
点击view,拿到json格式的数据,自己保存下来,方便看,以及找属性,我的如下
这里也可以看自定义属性是否设置成功,以及层级关系
到这里,自动生成的代码和模板都写完,运行,测试,看是不是自己需要的代码吧