日常痛点
通常在业务项目中,我们会遇到以下一些问题:
- 由于频繁的变化,需要我们写很多的重复的业务代码,这部分代码浪费了我们很多的时间,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
:
-
- convert file path (.toFile
) toString
File
-
- convert URL (.toURL
String
URL
Templates for different types of resources:
-
- get lines (content) of.lines
, PathFile
InputStream,
URL`, or
-
- get content (as.content
) ofString
,File
Path
, orInputStream
URL
-
- get.inputStream
ofInputStream
String
File
URL
-
.outputStream
OutputStream
File
-
.bufferedReader
BufferedReader
File
InputStream
URL
-
.bufferedWriter
BufferedWriter
orFile
OutputStream
-
.printStream
PrintStream
File
OutputStream
Debug templates:
-
- print variable to System.out.soutv
Templates for system calls:
-
- run command (.run
) as system commandString
This file contains templates for different collection types, such as
List
Set
Map
Option
-
.toList
.toSet
- convert arrays, collections, iterables, and streams to lists, sets, or maps.toMap
-
.sort
- sort arrays, lists, and streams (by attribute).sortBy
-
.minBy
- find the minimum/maximum in arrays, collections, iterables, and streams.maxBy
-
- group arrays, collections, iterables, and streams by attribute.groupBy
-
.exists
- test if one/all element(s) of an array, a collection, an iterable, or a stream hold(s) a given condition.forall
-
- reverse arrays, lists, and strings.reverse
-
- concatenate arrays, collections, and streams.concat
-
.join
- join the elements (strings) of an array, a collection, an iterable, or a stream into one string by using a given separator.mkString
-
- convert iterable to stream.stream
-
- map the entries of lists, sets, and maps.map
-
- map the keys of a map.mapKeys
-
- map the values of a map.mapValues
-
- return the map value of a given key or compute it and return it.getOrElseUpdate
-
- filter the elements of lists, sets, maps, and iterables.filter
-
- reduce the elements of arrays, collections, and iterables.reduce
-
- reduce the elements of arrays, collections, and iterables by using a neutral element (similar to Scala fold).fold
-
- find an element in arrays, collections, iterables, and streams.find
-
- take a certain number of elements from a stream.take
-
- skip a certain number of elements from a stream.drop
-
- get the length or an array.size
-
- get an element of an array by index.get
-
.first
- get first element of a list, or an array.head
-
- get last element of a list, or an array.head
This file contains templates for miscellaneous use cases:
-
- create a new instance of a class.new
-
- extract the expression as value (similar to the.val
template).var
-
- Optional.ofNullable($expr$).orElse($value$).orElse
-
- Optional.ofNullable($expr$).orElseGet($supplierF$).orElseGet
-
- Elvis operator ($expr$ != null ? $expr$ : $END$).elvis
String templates:
-
.r
- convert a.regEx
into a regular expressionString
-
- capitalize first character.capitalize
-
- uncapitalize first character.uncapitalize
具体的Java相关API可以通过查询以下链接