基本上每個(gè)程序員都會(huì)寫代碼,但寫代碼的速度不盡相同,。
為什么有些人,,一天只能寫幾百行代碼?
而有些人,,一天可以寫幾千行代碼,?
有什么辦法可以提升開發(fā)效率,在相同的時(shí)間內(nèi)寫出更多的代碼呢,?
今天我跟大家一起聊聊在idea
中,,能提升編碼效率的12
種插件,希望對大家有所幫助,。
1. lombok
之前對 lombok 還有爭議,,到底該不該在項(xiàng)目中使用。
現(xiàn)在新版的 idea 已經(jīng)內(nèi)置了 lombok 插件,,所以用它是一種趨勢,。
我之所以把 lombok 放在第一個(gè)介紹,是因?yàn)樗娴目梢詭臀疑賹懞芏啻a,特別是 entity,、DTO,、VO,、BO 中的,。
我們用 User 類舉例,以前定義 javabean 需要寫如下代碼:
public class User {
private Long id;
private String name;
private Integer age;
private String address;
public User() {
}
public User(Long id, String name, Integer age, String address) {
this.id = id;
this.name = name;
this.age = age;
this.address = address;
}
public Long getId() {
return id;
}
public String getName() {
return name;
}
public Integer getAge() {
return age;
}
public String getAddress() {
return address;
}
public void setId(Long id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setAge(Integer age) {
this.age = age;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public boolean equals(Object o) {
if (this == o) returntrue;
if (o == null || getClass() != o.getClass()) returnfalse;
User user = (User) o;
return Objects.equals(id, user.id) &&
Objects.equals(name, user.name) &&
Objects.equals(age, user.age) &&
Objects.equals(address, user.address);
}
@Override
public int hashCode() {
return Objects.hash(id, name, age, address);
}
@Override
public String toString() {
return"User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", address='" + address + '\'' +
'}';
}
}
該 User 類中包含了:成員變量,、getter/setter 方法,、構(gòu)造方法、equals,、hashCode 方法,。
乍一看,代碼還是挺多的,。而且還有個(gè)問題,,如果 User 類中的代碼修改了,比如:age 字段改成字符串類型,,或者 name 字段名稱修改了,,是不是需要同步修改相關(guān)的成員變量,、getter/setter 方法,、構(gòu)造方法、equals,、hashCode 方法全都修改一遍,?
好消息是用 lombok 可以解決這個(gè)問題。
如果是 idea2020.3 之前的版本,,需要在 idea 中安裝如下插件:
但 idea2020.3 之后,idea 已經(jīng)內(nèi)置了 lombok 的功能,。
有了 lombok 插件,,現(xiàn)在我們在 idea 只用這樣寫代碼,,就能實(shí)現(xiàn)上面的功能了:
@ToString
@EqualsAndHashCode
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
public class User {
private Long id;
private String name;
private Integer age;
private String address;
}
簡直太輕松了,,真的可以少寫很多代碼,。
此外,,我們還需要在項(xiàng)目的 pom 文件中,引入 lombok 的依賴包,不然項(xiàng)目會(huì)跑不起來,。
2. Free Mybatis plugin
在國內(nèi)mybatis
已經(jīng)成為了最主流的數(shù)據(jù)庫框架了,,該框架屬于半自動(dòng)化的 ORM 持久化框架,相對于 hibernate 這種全自動(dòng)化的持久化框架更靈活,,性能更高,。
在mybatis
中,我們需要自己定義 mapper 和對應(yīng)的 xml 文件完成綁定,。
在這里我們以用戶表為例,,首先需要定義 UserMapper 接口:
public interface UserMapper {
int insertUser(UserModel user);
}
然后需要 UserMapper.xml 配置文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-////DTD Mapper 3.0//EN"
"http:///dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sue.jump.mappers.UserMapper">
<sql id="selectUserVo">
id, name, age, sex
</sql>
<insert id="insertUser" parameterType="com.sue.jump.model.UserModel">
INSERT INTO user
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null ">
id,
</if>
<if test="name != null and name != ''">
name,
</if>
<if test="age != null ">
age,
</if>
<if test="sex != null ">
sex,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null ">
#{id},
</if>
<if test="name != null and name != ''">
#{name},
</if>
<if test="age != null ">
#{age},
</if>
<if test="sex != null ">
#{sex},
</if>
</trim>
</insert>
</mapper>
UserMapper.xml 文件中,mapper 標(biāo)簽的 namespace 對應(yīng) UserMapper 接口名,,而 insert 標(biāo)簽的 id=insertUser,,正好對應(yīng) UserMapper 接口中的 insertUser 方法。
那么,,在項(xiàng)目中如何通過 UserMapper 類中的 getUser 方法,,能夠快速訪問 UserMapper.xml 文件中的 getUser 方法?
答:這就需要使用Free Mybatis plugin
插件了,。
安裝了該插件之后,,在 UserMapper 接口的接口名和方法名的左邊,多了兩個(gè)綠色的箭頭,,我們點(diǎn)擊該箭頭,,就能跳轉(zhuǎn)到 UserMapper.xml 文件對應(yīng)的 mapper 標(biāo)簽或者 insertUser 語句上。
此外,,在 UserMapper.xml 文件的 insertUser 語句的左邊,,也會(huì)多出一個(gè)綠色的箭頭,我們點(diǎn)擊該箭頭,,也能跳轉(zhuǎn)到 UserMapper 接口的 insertUser 方法上,。
有了這個(gè)插件,我們就能在 mapper 和 xml 之間自由切換自由玩耍了,,再也不用像以前那樣搜索來搜索去,。
3.Translation
有些小伙伴,包括我自己可能英語不太好,。我們在給變量或者方法取名時(shí),,要想半天。特別是在閱讀 JDK 英文文檔時(shí),,遇到了一些生僻字,,簡直頭大。
有個(gè)好消息是使用:Translation
插件,,能夠讓我們在文檔中自由飛翔,。
安裝完Translation
插件之后,,在 other settings 中多了一個(gè) Translation 菜單。
點(diǎn)擊該菜單:
在右邊的窗口中,,可以選擇翻譯軟件,。
選中需要翻譯的英文文檔:
在右鍵彈窗的窗口中,選擇 Translation 選項(xiàng),,會(huì)彈如下窗口:
一段英文段落,,一下子翻譯成了中文,簡直太爽了,。
4.Alibaba Java Coding Guidelines
如果你是從事 Java 開發(fā)工作的小伙伴,,肯定看過阿里巴巴的《Java 開發(fā)手冊》。
該手冊總結(jié)了我們在日常開發(fā)過程中,,可能會(huì)遇到的問題。從編程規(guī)約,、異常日志,、單位測試、安全規(guī)約,、Mysql 數(shù)據(jù)庫和工程結(jié)構(gòu)這 6 大方面,,規(guī)范了開發(fā)的流程,確保我們能寫出高效,、優(yōu)雅的代碼,。
但這些規(guī)范性的東西,僅僅靠人的自覺性,,很難達(dá)到預(yù)期的效果,。
為了解決這個(gè)問題,阿里巴巴推出了Alibaba Java Coding Guidelines
插件,,能夠通過該插件,,直接查出不合規(guī)范的代碼。
安裝了該插件之后,,按下快捷鍵:Ctrl+Alt+Shift+J
,,可以對整個(gè)項(xiàng)目或單個(gè)文件進(jìn)行編碼規(guī)約掃描。
掃描后會(huì)將不規(guī)范的代碼按從高到低排列,。
目前有三個(gè)等級(jí)顯示在下方:
點(diǎn)擊左邊其中一個(gè)不規(guī)范的代碼行,,右邊窗口會(huì)立刻顯示不規(guī)范的詳細(xì)代碼,便于我們快速定位問題,。nice!
5. GenerateAllSetter
很多時(shí)候,,我們需要給某個(gè)對象賦值,如果參數(shù)比較多的話,,需要手寫大量的setter
或者getter
代碼,。
有沒有辦法一鍵搞定呢,?
答:有,使用GenerateAllSetter
插件,。
安裝完插件之后,,在創(chuàng)建的對象上,按下快捷鍵:alt + enter
,。
在彈出的窗口中選擇:Generate all setter with default value,。
就會(huì)自動(dòng)生成如下代碼:
簡直太方便了。
6. SequenceDiagram
我們平時(shí)在閱讀源碼時(shí),,為了梳理清楚內(nèi)部邏輯,,經(jīng)常需要畫一些時(shí)序圖
。
如果我們直接畫,,會(huì)浪費(fèi)很多時(shí)間,,而且畫的圖不一定正確。
這時(shí)可以使用:SequenceDiagram
插件,。
選擇具體某個(gè)方法,,右鍵選擇:sequence diagram 選項(xiàng):
之后,會(huì)出現(xiàn)時(shí)序圖:
從此以后,,就成為畫圖高手了,,完美。
7. CheckStyle-IDEA
在代碼格式方面,,有許多地方需要我們注意,,比如:無用導(dǎo)入、沒寫注釋,、語法錯(cuò)誤,、方法太長等等。
有沒有辦法,,可以在 idea 中一次性檢測出上面的這些問題呢,?
答:使用CheckStyle-IDEA
插件。
CheckStyle-IDEA
是一個(gè)檢測代碼格式是否滿足規(guī)范的工具,,其中用得比較多的是Google
規(guī)范和Sun
規(guī)范,。
安裝完插件后,在 idea 的下方會(huì)出現(xiàn) CheckStyle 選項(xiàng):
點(diǎn)擊左邊的綠色按鈕,,可以掃描代碼,。在中間位置,會(huì)顯示不符合代碼規(guī)范的原因,。
雙擊代碼,,即可直接跳轉(zhuǎn)到具體代碼:
8.JRebel and XRebel
在 idea 中開發(fā) Java 項(xiàng)目,有個(gè)很不爽的地方是:每次修改一個(gè)類或者接口,,都需要重啟服務(wù),,否則不會(huì)運(yùn)行最新地方,。而每次重啟,都需要花大量的時(shí)間,。
有沒有辦法,,Java 代碼修改后不用重啟系統(tǒng),立即生效呢,?
答:使用JRebel and XRebel
插件,。
如圖:
安裝完成之后,這里會(huì)有兩個(gè)綠色的按鈕,,并且在右邊多了一個(gè)選項(xiàng) Select Rebel Agents:
其中一個(gè)綠色的按鈕,,表示熱部署啟動(dòng)項(xiàng)目,另外一個(gè)表示用 debug 默認(rèn)熱部署啟動(dòng)項(xiàng)目,。
Select Rebel Agents 選項(xiàng)中包含三個(gè)值:
- JRebel:修改完代碼,,不重啟服務(wù),期望代碼直接生效,。
- XRebel:請求過程中,,各個(gè)部分代碼性能監(jiān)控。例如:方法執(zhí)行時(shí)間,、出現(xiàn)的異常、SQL 執(zhí)行時(shí)間,、輸出的 Log,、MQ 執(zhí)行時(shí)間等。
- JRebel+XRebel:修改完代碼,,不重啟服務(wù),,并且監(jiān)控代碼。
9. Codota
說實(shí)話,,idea 現(xiàn)有的代碼提示功能,,已經(jīng)很強(qiáng)大了。
但如果你使用過Codota
插件,,它會(huì)讓你寫代碼的速度更上一層樓,。
安裝完插件之后,我們在寫代碼時(shí),,它會(huì)給你一些提示:
這些提示是基于 ai 統(tǒng)計(jì)出來的,,非常有參考價(jià)值。
10. GsonFormat
很多時(shí)候,,我需要把json
中的參數(shù),,轉(zhuǎn)換成實(shí)體對象
中的參數(shù)?;蛘甙?code style="margin: 0px 2px; padding: 2px 4px; outline: 0px; max-width: 100%; box-sizing: border-box !important; overflow-wrap: break-word; font-size: 14px; border-radius: 4px; background-color: rgba(27, 31, 35, 0.05); font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace; word-break: break-all; color: rgb(40, 202, 113);">實(shí)體對象中的參數(shù),,轉(zhuǎn)換成json
中的參數(shù),。
以前我們都是手動(dòng)一個(gè)變量一個(gè)變量拷貝。但現(xiàn)在有個(gè)好消息是,,idea 的GsonFormat
插件可以幫我們完成這件事,。
安裝完插件之后,先創(chuàng)建一個(gè)空類:
按下快捷鍵:alt + s
,,會(huì)彈出下面這個(gè)窗口:
然后在該窗口中,,錄入 json 數(shù)據(jù)。
點(diǎn)擊確定按鈕,,就會(huì)自動(dòng)生成這些代碼:
簡直帥呆了,。
11. Rainbow Brackets
我們平時(shí)寫代碼的時(shí)候,括號(hào)是讓我們非常頭疼的地方,,特別是代碼邏輯很多,、層層嵌套的情況。
一眼很難看出,,代碼是從哪個(gè)括號(hào)開始,,到哪個(gè)反括號(hào)結(jié)束的。
有沒有辦法解決這個(gè)問題呢,?
答:使用Rainbow Brackets
插件,。
安裝完插件之后,括號(hào)和反括號(hào),,在代碼中會(huì)自動(dòng)按照不同顏色做區(qū)分:
非常顯目,,非常直觀。
12. CodeGlance
有些時(shí)候,,我們閱讀的代碼很多,,比如某個(gè)類中包含的方法和成員變量很多。
從上往下,,一點(diǎn)點(diǎn)往下翻,,會(huì)浪費(fèi)很多時(shí)間。那么有沒有辦法,,能夠快速翻到想看的代碼呢,?
答:有,可以使用CodeGlance
插件,。安裝完插件之后,,在代碼右側(cè),會(huì)出現(xiàn)下面這個(gè)窗口:
它是代碼的縮略圖,,通過它我們能夠非??焖俚厍袚Q代碼塊。