日常痛点

通常在业务项目中,我们会遇到以下一些问题:

  • 由于频繁的变化,需要我们写很多的重复的业务代码,这部分代码浪费了我们很多的时间,Idea已经帮我们做了一些优化比如Alt+Insert自动生成部分代码等等,但是仍然有很多我们需要手动完成的任务

  • 另外就是一些不太常用,可能我们需要去Ctrl+C/Ctrl+V解决的代码

  • 一些稍微复杂点的代码,写的不优雅,如各种格式转化,输入输出流,文件读写,跨系统调用等等。

  • 类似于框架代码的改动,Mybatis之类。

全家桶介绍

Live Template

Idea的Live Template是一种可编辑模板,可以自定义各种写法,然后再编辑器中各种一键生成代码,以下举例演示:

业务提出需求,现在需要做一个新功能,提供一个新接口,要求提供目前数据库中书本表对应的所有书本的信息。

--> 正常我们需要写controller + domain + DAO 层,下面演示下基于MVC异步模式如何通过Live Template加速开发:

Step#1

 entity对应package下新建Class,然后删除类名,输入mvc-entity,看到提示,回车,可以看到如下截图一键生成对应的所有需要的参数,包括【包含所有参数的构造函数,无参构造函数,toString,Equals,Setter,Getter】等等,根据光标输入Book,回车,完成Entity。


Step#2

利用Sring data JPA 创建DAO层,同样上面的方法,输入mvc-repository,一键生成,输入类名,完成【只要和Entity命名风格一直,甚至Entity也不用输入了】。


Step#3

创建对应的Controller,同样如上,mvc-controller,输入Book,直接构建,生成基于异步的默认一个Get方法的Controller,接下来只要专注业务逻辑就可以了。

其中,log4j日志的引入,setter,getter,restcontroller,requestmapping等等平常我们要一遍又一遍写的方法都不需要引入了。一行代码搞定所有。


同样,我们可以一键配置get方法和set方法


Live Template 还能做什么? 太多了。。。



  • 比如默认生产springboot的application.properties文件中的各种配置模块:jdbc-property指向对应的四个参数

  • RMB/JDBC/RestTemplate/HttpClient等Bean的一键生成,并且再也不用担心配置和其他人不一样了。

  • 在创建Controller层和DTO层自动引入Swagger,开发人员就算不了解也可以帮助测试人员做自动化测试。

  • 快速上线各种新特性,大大减少各种POC和需求的开发周期。

  • 等等等等。。。。




附件中附上了我的一些简单的Template,一套基于SpringMVC和一套基于Springboot2 的Webflux的模板,后续的各种功能大家可以自己尝试编写,也可以和我提需求我们一起完成。

使用方法:Idea中:File->Import Settings -->选择setting.jar文件导入,重启Idea即可

具体的模板可以通过以下查看: File->Settings->Editor->Live Template, 最下面有个Webank组,里面为常用模板

Custom Postfix Templates

Idea的Auto Compltetion相信大部分都在使用,但是Idea的Auto Completion还不够强大。熟悉Eclipse的同学应该清楚类似sysout/main等compltetion的使用很常见,而Custom Postfix Templates就是一个增强版Auto Completion, 插件可以直接从Git下载最新版安装.

示例如下:


常用的API如下:

Conversation templates applicable to Strings:

  • .toFile - convert file path (String) to File

  • .toURL - convert URL (String) to URL

Templates for different types of resources:

  • .lines - get lines (content) of File, PathInputStream, or URL`

  • .content - get content (as String) of FilePathInputStream, or URL

  • .inputStream - get InputStream of StringFile, or URL

  • .outputStream - get OutputStream of File

  • .bufferedReader - get BufferedReader of FileInputStream, or URL

  • .bufferedWriter - get BufferedWriter of File or OutputStream

  • .printStream - get PrintStream of File or OutputStream

Debug templates:

  • .soutv - print variable to System.out

Templates for system calls:

  • .run - run command (String) as system command

This file contains templates for different collection types, such as ListSetMap, or Option:

  • .toList.toSet.toMap - convert arrays, collections, iterables, and streams to lists, sets, or maps

  • .sort.sortBy - sort arrays, lists, and streams (by attribute)

  • .minBy.maxBy - find the minimum/maximum in arrays, collections, iterables, and streams

  • .groupBy - group arrays, collections, iterables, and streams by attribute

  • .exists.forall - test if one/all element(s) of an array, a collection, an iterable, or a stream hold(s) a given condition

  • .reverse - reverse arrays, lists, and strings

  • .concat - concatenate arrays, collections, and streams

  • .join.mkString - join the elements (strings) of an array, a collection, an iterable, or a stream into one string by using a given separator

  • .stream - convert iterable to stream

  • .map - map the entries of lists, sets, and maps

  • .mapKeys - map the keys of a map

  • .mapValues - map the values of a map

  • .getOrElseUpdate - return the map value of a given key or compute it and return it

  • .filter - filter the elements of lists, sets, maps, and iterables

  • .reduce - reduce the elements of arrays, collections, and iterables

  • .fold - reduce the elements of arrays, collections, and iterables by using a neutral element (similar to Scala fold)

  • .find - find an element in arrays, collections, iterables, and streams

  • .take - take a certain number of elements from a stream

  • .drop - skip a certain number of elements from a stream

  • .size - get the length or an array

  • .get - get an element of an array by index

  • .first.head - get first element of a list, or an array

  • .head - get last element of a list, or an array

This file contains templates for miscellaneous use cases:

  • .new - create a new instance of a class

  • .val - extract the expression as value (similar to the .var template)

  • .orElse - Optional.ofNullable($expr$).orElse($value$)

  • .orElseGet - Optional.ofNullable($expr$).orElseGet($supplierF$)

  • .elvis - Elvis operator ($expr$ != null ? $expr$ : $END$)

String templates:

  • .r.regEx - convert a String into a regular expression

  • .capitalize - capitalize first character

  • .uncapitalize - uncapitalize first character


具体的Java相关API可以通过查询以下链接

https://github.com/xylo/intellij-postfix-templates/wiki/Java-Postfix-Web-Templates

mybatis generator(MBG)

参考前一篇文章教程:

https://blog.51cto.com/14054453/2312526