天天看点

Idea开发提升效率全家桶

日常痛点

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

  • 由于频繁的变化,需要我们写很多的重复的业务代码,这部分代码浪费了我们很多的时间,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。

Idea开发提升效率全家桶
Idea开发提升效率全家桶

Step#2

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

Idea开发提升效率全家桶

Step#3

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

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

Idea开发提升效率全家桶

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

Idea开发提升效率全家桶
Idea开发提升效率全家桶

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下载最新版安装.

示例如下:

Idea开发提升效率全家桶

常用的API如下:

Conversation templates applicable to 

Strings

:

  • .toFile

     - convert file path (

    String

    ) to 

    File

  • .toURL

     - convert URL (

    String

    URL

Templates for different types of resources:

  • .lines

     - get lines (content) of 

    File

    , Path

    InputStream

    , or 

    URL`
  • .content

     - get content (as 

    String

    ) of 

    File

    Path

    InputStream

    , or 

    URL

  • .inputStream

     - get 

    InputStream

     of 

    String

    File

    URL

  • .outputStream

    OutputStream

    File

  • .bufferedReader

    BufferedReader

    File

    InputStream

    URL

  • .bufferedWriter

    BufferedWriter

    File

     or 

    OutputStream

  • .printStream

    PrintStream

    File

    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 

List

Set

Map

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可以通过查询以下链接

mybatis generator(MBG)