1。Introduction在实际的软件项目开发过程中,我可以很负责任的告诉你,如果你真的写过5年以上的代码,那么简单的增删改查这些简单的功能需求,你需要什么?开发,可以说是完全写到吐了,至少我是这种类型的。但不可否认的是,软件的绝大多数功能,下到最基本的单元,基本上都是单表的增删改查!但是随着用户需求的不断增加,以前可能单表可以做的事情现在可能需要多表或者多库。代码层就像积木一样,越堆越复杂。记得早期做项目的时候,项目中每新增一个单表,都需要按照MVC框架的思想在代码层重写一套CURD代码,完成所有基本的增删改查,至少需要20分钟,手快的话最快10分钟。如果一个新开发的功能需要增加10张表,按这个时间计算至少需要100分钟。仔细想想,你会发现大部分时间都浪费在这些简单重复的编程圈子里了。向上。有没有办法标准化和宣传所有这些简单的CURD代码?这样一来,我们就可以节省大量的时间投入到业务场景的开发上。答案是肯定的,是的!记得早期最先接触到的就是MybatisGenertor工具包。通过这个工具包,我们可以在mybaits中省去大部分xml文件的curd编写工作。还有就是我们熟悉的JPA,它有一套公共的持久层动态代理类,可以根据名称自动生成SQL语句,可以为开发省去很多事情。但是我是个懒人,想做一个工具,从controller,service,entity,dao层,所有的crud代码,包括单元测试类,都可以通过工具自动生成。像这样的工具在网上也有,比如我们熟悉的Mybatis-plus插件,就可以做到这一点,而且也非常好用。但是有的公司不喜欢,原因很简单。里面很多public方法封装的太深,很多crudSQL都是动态生成的,根本看不到。总之就是一句话,很多程序员总是对不受自己控制的事情有各种疑惑~~当然还有一个明显的疑惑,那就是不能完全支持微服务的开发。比如你的项目使用SpringBoot+Dubbo开发。这时候生成的controller是完全没用没味道的。所以,在这种情况下,你就不得不根据目前的项目软件开发规律,自己开发一套代码生成器,以满足快速开发的需要。下面简单介绍一下如何自己开发一个代码生成器。过程如下!2.代码实践其实开发一个代码生成器并没有大家想象的那么复杂。其中用到的最主要的技术就是使用模板来生成代码,比如我们经常使用的模板引擎freemarker,就可以帮助我们实现这一点。2.1.首先我们添加freemarker依赖包org.freemarkerfreemarker2.3.232.2,然后创建代码template下面我们以动态创建实体类为例,编写一个实体类模板entity.java.ftl,其中${}定义了动态变量。package${package};importjava.io.Serializable;/***
*${tableComment}*
**@author${author}*@since${date}*/publicclass${entityClass}implementsSerializable{privatestaticfinallongserialVersionUID=1L;<#--属性遍历--><#listcolumnsaspro>/***${pro.comment}*/private${pro.propertyType}${pro.propertyName};#list><#--属性获取||设置方法--><#listcolumnsaspro>public${pro.propertyType}get${pro.propertyName?cap_first}(){returnthis.${pro.propertyName};}public${entityClass}set${pro.propertyName?cap_first}(${pro.propertyType}${pro.propertyName}){this.${pro.propertyName}=${pro.propertyName};returnthis;}#list>}2.3。最后生成目标代码最后我们基于freemarker写了一个测试类!publicclassCodeGeneratorDemo{publicstaticvoidmain(String[]args)throwsIOException,TemplateException{Map
objectMap=newHashMap<>();//定义包路径objectMap。put("package","com.example.test");//定义实体类objectMap.put("entityClass","Student");//定义实体类属性List