手記系列之二 ----- 關於IDEA的一些使用方法經驗

2022-11-06 15:04:09

前言

本篇文章主要介紹的關於本人在使用IDEA的一些使用方法,一些常用設定,一些外掛推薦和使用。請注意,本文特長,2w多字加上幾十張圖片,建議收藏觀看~

前提準備

idea官網: https://www.jetbrains.com/idea/
如果是學生的話,可以在idea直接申請使用;
如果在GitHub上面有持續維護的開源專案話,也可以進行申請使用;
如果有條件的話,可以支援一下正版。

破解版以及說明

連結:https://pan.baidu.com/s/1v0N0pd20LNbMgsK6ItJnLA 
提取碼:qvam

IDEA基本設定

編碼設定

FILE ->Settings->Editor->File Encodings設定以下: 
IDE Encondings:IDE編碼 ,設為UTF8 
Project Encoding:專案編碼,設為UTF8 
Default encoding for properties files:預設檔案編碼,設為UTF8

IDEA設定JDK

1.匯入JDK
開啟IDEA之後,點選File →Project Struture ,然後點選SDK,選擇JDK路徑,匯入就行

2.預設JDK
File-Other Settings-> Default Project Structure-> project
選擇JDK版本

3.專案設定JDK
File-Settings-> Build,Execution, Deployment -> Compiler -> Java Compiler
選擇JDK的版本就行

Maven 設定

1.開啟-File-Settings 搜尋Maven,然後選擇Maven 安裝目錄和設定路徑。

  1. 建立Maven專案
    開啟-File-New-Project 點選NEXT

git設定

file->setting->git 輸入git安裝的地址。例如: D:\Program Files\Git\bin\git.exe

註釋模板設定

1.類註釋模板

建立類的時候會自動建立該註釋!

File-Settings-Editor->File and Code TemPlates

選擇 Includes->File Heather

新增如下:

/**
* @Title: ${PROJECT_NAME}
* @Description: 
* @Version:1.0.0  
* @Since:jdk1.8 
* @author pancm
* @date ${DATE}
*/

使用方法,在IDEA建立一個類,就會自動帶出該註釋,範例如下:

自定義類註釋模板,輸入一個關鍵字(自定義)就可以快速建立!

File-->Settings-->Editor-->Live Templates

新建一個組(Templates Group),名稱隨意(userTemplates)不衝突就行,然後在新建一個模板(Live Templates),Abbreviation 名稱為 m1 。

新增如下:

/** 

* @Title: $PROJECT_NAME$ 

* @Description:  

* @Version:1.0.0   

* @Since:jdk1.8  

* @author pancm

* @Date  $date$ 

**/ 

然後點選edit variables進行編輯。

方法註釋

File-->Settings-->Editor-->Live Templates

和上面一樣,名稱為m2。

新增如下:

/**

* @Author xxx

* @Description  

* @Date  $date$

* @Param $param$

* @return $return$

**/


修改 Expand with 為 Enter,然後點選 Edit variables 進行對照,下拉選擇即可。

使用範例,在類上面輸入m1,按回車就出現註釋,在方法上面輸出m2就出現方法的註釋。

快捷鍵使用

注: 由於我是從eclipse轉過來的,因此開始會找一些快捷對比而使用。

IDEA和Eclipse快捷鍵對比

idea 與 Eclipse 快捷鍵的區別,上為Eclipse的快捷鍵,下為Idea的快捷鍵
查詢類名
CTRL + SHIFT + R
CTRL + N
查詢JAR包中的類
CTRL + SHIFT + T
兩次 CTRL + N
查詢檔案
CTRL + SHEFT + R
CTRL + SHEFT + N
查詢JAR包中的檔案
CTRL + SHIFT + T
兩次 CTRL + SHEFT + N
查詢類中的方法以及欄位
無
CTRL + SHEFT + ALT + N
查詢那些類呼叫該資源(資源可能是欄位、方法、類)
CTRL + SHIFT + G
ALT + F7 ,快速顯示查詢內容 CTRL + ALT + F7
查詢檔案中的變數
點選變數 CTRL + K :移動
點選變數 CTRL + SHEFT + F7 高亮顯示 F3 : 移動; SHEFT + F3 : 反向移動
定位行數
CTRL + L
CTRL + G
快速生成get set、建構函式等
ALT + SHIFT + S
ALT + INSERT
快速生成try cache
SHIFT + ALT + Z
CTRL + ALT + T 同時還能生成if else 等等其他的東西
快速優化參照包
CTRL + SHIFT + O
CTRL + ALT + O
快速格式化程式碼
CTRL + SHIFT + F
CTRL + ALT + L
重構程式碼
CTRL + F2
SHIFT + F6
顯示類中的變數、方法
CTRL + O
CTRL + F12
快速生產類、方法、欄位註釋 
CTRL + SHEFT + J
/** + ENTER
程式碼行 上下移動
ALT + 上下鍵
CTRL + SHIFT + 上下鍵
開啟遊標處的類或方法
F3
CTRL + B, CTRL + ALT + B 進入介面或者抽象類的實現類
其他的快捷鍵:
F4 查詢變數來源
CTRL + 空格 程式碼提示 (和系統輸入法衝突,請在Settings->Keymap->mainmenu -> code ->Completion->basic,右鍵新增自己的快捷鍵)
ALT + 回車  匯入包,自動修正
CTRL + H 檢視類的繼承關係。 
CTRL + Q 顯示註釋檔案(跟eclipse滑鼠放到類、方法、欄位顯示的內容一樣)
CTRL + W 選中程式碼,連續按會有其他效果
CTRL + U 檢視當前類的父類別以及介面,
CTRL + ALT + U 檢視類UML圖
CTRL + SHIFT + U 切換大小寫
CTRL + P 方法引數提示,可以看到這個方法有哪些多型方法
SHIFT + ALT + INSERT 豎編輯模式

一些使用經驗

顯示行號

File -> Settings ->Editor ->General -> Appearance =>Show line numbers選中

查詢快捷鍵衝突問題處理

File -> Settings -> Keymap -> Main menu -> Edit ->Find =>修改Find…和Replace…分別改為Ctrl+F 和Ctrl+R

程式碼智慧提示大小寫

File -> Settings ->Eidtor->General->Code Completion => Case sensitive completion 改為none

程式碼提示

在Main menu->code->completion-> basic修改為Alt+/

設定用*標識編輯過的檔案

Editor –> Editor Tabs選中Mark modifyied tabs with asterisk

方法懸浮提示(類似eclipse)

Editor > General 下 Other 區域中的 show quick documentation on mouse move

shell 、ftp的使用

tools -> ssh start session
填寫地址、賬號密碼登入即可

ftp 使用
setting -> deployment 增加ftp/sftp 然後填寫地址、賬號密碼登入即可

匯入匯出設定

匯出:
File- -->Export Settings ->選擇匯出目錄,會出現一個settings.jar的檔案
匯入方法:
File->Import Settings ->選擇需要匯入的settings.jar即可

自動匯入和優化包

右鍵setting -General -Auto Import

IDEA啟動設定

字尾補全

main方法執行忽略其他錯誤

idea有個麻煩的點是執行一個專案,必須全部都不能報錯,因此在偵錯階段,可以這樣修改執行。
第一步

第二步

idea忽略一些錯誤

忽略註釋錯誤:

忽略spring mapping 無法注入問題

IDEA引入jar包

java工程引入jar包跟eclipse有點不同,選中工具列上"檔案"--->"Project Structure"--->選擇「Libraries」--->點選「+」--->"Java"--->選擇自己需要的jar包即可。

IDEA 引入tomcat

點選Run-Edit Configurations...
點選左側「+」,選擇Tomcat Server--Local,
在Tomcat Server -> Unnamed -> Server -> Application server專案下,點選 Configuration ,找到本地 Tomcat 伺服器,再點選 OK按鈕。

IDEA Maven 自動導包

Settings > Maven > Importing > Import maven project automatically

自動清除多餘的import

tkmybatis程式碼生成

pom檔案設定:

需要新增:

<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper-spring-boot-starter</artifactId>
    <version>${tk.mybatis.boot.version}</version>
</dependency>
<!-- mybatis-generator-core 反向生成java程式碼,解決dtd 標紅的問題-->
<dependency>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-core</artifactId>
    <version>1.3.5</version>
</dependency>

Source設定

  <plugin>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-maven-plugin</artifactId>
        <version>1.3.2</version>
        <configuration>
            <verbose>true</verbose>
            <overwrite>true</overwrite>
            <configurationFile>src/main/resources/generator/generatorConfig.xml</configurationFile>
        </configuration>
        <dependencies>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.connector.version}</version>
            </dependency>
            <dependency>
                <groupId>tk.mybatis</groupId>
                <artifactId>mapper</artifactId>
                <version>3.4.3</version>
            </dependency>
        </dependencies>
    </plugin>
</plugins>

Idea設定:
命令: mybatis-generator:generate -e

關於外掛的推薦和使用

外掛安裝

線上安裝
File-Settings-Pluigin
輸入要搜尋的外掛

離線安裝
File-Settings-Pluigin -Install plugin from disk
選擇離線下載的外掛

外掛推薦

Lombok Plugin 簡化程式碼
Statistic 程式碼統計
CheckStyle 程式碼格式檢查(可以自己/公司指令碼)
FindBugs bugs外掛
SonarLint bugs外掛
grep Console 控制檯外掛
.ignore git 檔案提交過濾
CodeGlance 右側檔案結構圖
Background Image Plus 設定背景圖片: view -> Set Backgroup Image
Key promoter 快捷鍵提示,將滑鼠放上去的時候會有提示
Markdown support 編輯Markdown檔案 .md 檔案
Maven Helper maven外掛,開啟該pom檔案的Dependency Analyzer檢視
GsonFormat 將json轉換為object
JRebel for IntelliJ 是一款熱部署外掛
AceJump 代替滑鼠的軟體,按快捷鍵進入 AceJump 模式後(預設是 Ctrl+J)
javaDoc 註釋外掛
Free MyBatis plugin Mybatis外掛,可以自由跳轉到對應的mapping.xml中
MyBatisX //mybatis 的增強外掛, 在介面中寫一個方法, 可以根據這個方法在mapper.xml中自動生成DML語句, 前提是這個mapper.xml 得先建好且指定了介面的名稱空間
idea-mybatis-generator //mybatis的程式碼生成器,可以將資料庫表生成實體類和對應mapper
Translation 翻譯軟體
SonarLint 程式碼質量管理工具
SequenceDiagram 可以根據程式碼呼叫鏈路自動生成時序圖,右鍵 --> Sequence Diagaram 即可調出。
Maven Helper 檢視maven直接參照的關係進行排除, 安裝後 IDEA 中開啟 pom.xml 檔案時,就會多出一個 "Dependency Analyzer" 索引標籤。
Maven search 快速查詢maven依賴,支援模糊查詢,需要連線網路
GenerateAllSetter 一鍵通過new物件生成
EasyCode 快速生成程式碼

EasyCode程式碼生成模板

注:這是我在開發某個專案使用的模板,並非通用所有專案,僅做參考。EasyCode官方自帶有一套模板,初學者可以使用這套,熟悉之後可以在進行自定義。

Easy Code介紹:

•基於IntelliJ IDEA開發的程式碼生成外掛,支援自定義任意模板(Java,html,js,xml)。

•只要是與資料庫相關的程式碼都可以通過自定義模板來生成。支援資料庫型別與java型別對映關係設定。

•支援同時生成生成多張表的程式碼。每張表有獨立的設定資訊。完全的個性化定義,規則由你設定

路徑: File -> Settings->Plugins

輸入: /vendor:"Easy Code Office Website" 進行搜尋然後進安裝。

安裝完成之後需要重啟IEDA。

外掛安裝之後建議先設定作者

路徑:File -> Settings->Other Setting

範例圖:

自定義模板設定

設定完作者之後,點選Template Setting,然後點選右邊的+,建立一個分組名稱,這個名稱隨意,不重複就行,這裡就設定MyGroup,然後點選左邊的+號進行新增模板:

1.dao模板

PowerShell
##定義初始變數

#set($tableName = $tool.append($tableInfo.name, "Dao"))

##設定回撥

$!callback.setFileName($tool.append($tableName, ".java"))

$!callback.setSavePath($tool.append($tableInfo.savePath, "/dao"))



##拿到主鍵

#if(!$tableInfo.pkColumn.isEmpty())

    #set($pk = $tableInfo.pkColumn.get(0))

#end



#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}dao;



import $!{tableInfo.savePackageName}.model.$!{tableInfo.name};

import $!{tableInfo.savePackageName}.vo.$!{tableInfo.name}VO;

import org.apache.ibatis.annotations.Param;

import org.apache.ibatis.annotations.Mapper;

import java.util.List;



 /**

* @Title: $!{tableInfo.comment}($!{tableInfo.name})表資料庫存取層

* @Description: 

* @Version:1.0.0 

* @Since:jdk1.8 

* @author $author

* @date $!time.currTime()

*/

@Mapper

public interface $!{tableName} {



    /**

     * 通過ID查詢單條資料

     *

     * @param $!pk.name 主鍵

     * @return 範例物件

     */

    $!{tableInfo.name}VO queryById($!pk.shortType $!pk.name);



   

    /**

     * 通過實體查詢一條資料

     *

     * @param $!tool.firstLowerCase($!{tableInfo.name})VO 範例物件

     * @return 物件列表

     */

    $!{tableInfo.name}VO findOne($!{tableInfo.name}VO $!tool.firstLowerCase($!{tableInfo.name})VO);



    /**

     * 通過實體作為篩選條件查詢

     *

     * @param $!tool.firstLowerCase($!{tableInfo.name})VO 範例物件

     * @return 物件列表

     */

    List<$!{tableInfo.name}VO> queryAll($!{tableInfo.name}VO $!tool.firstLowerCase($!{tableInfo.name})VO);



    /**

     * 新增資料

     *

     * @param $!tool.firstLowerCase($!{tableInfo.name}) 範例物件

     * @return 影響行數

     */

    int insert($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));



    /**

     * 批次新增資料(MyBatis原生foreach方法)

     *

     * @param entities List<$!{tableInfo.name}> 範例物件列表

     * @return 影響行數

     */

    int insertBatch(@Param("entities") List<$!{tableInfo.name}> entities);



    /**

     * 批次新增或按主鍵更新資料(MyBatis原生foreach方法)

     *

     * @param entities List<$!{tableInfo.name}> 範例物件列表

     * @return 影響行數

     */

    int insertOrUpdateBatch(@Param("entities") List<$!{tableInfo.name}> entities);



    /**

     * 修改資料

     *

     * @param $!tool.firstLowerCase($!{tableInfo.name}) 範例物件

     * @return 影響行數

     */

    int update($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));



    /**

     * 通過主鍵刪除資料

     *

     * @param $!pk.name 主鍵

     * @return 影響行數

     */

    int deleteById($!pk.shortType $!pk.name);



}

2.entity模板

Kotlin
##引入宏定義

$!define

#set($tableName = $tool.append($tableInfo.name, "VO"))

##設定回撥

$!callback.setFileName($tool.append($tableName, ".java"))

$!callback.setSavePath($tool.append($tableInfo.savePath, "/vo"))



#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}vo;

##使用全域性變數實現預設包匯入

$!autoImport

import java.io.Serializable;

import com.alibaba.fastjson.JSONObject;

import io.swagger.annotations.ApiModel;

import io.swagger.annotations.ApiModelProperty;

import lombok.Data;





/**

* @Title: $!{tableInfo.comment}($!{tableInfo.name})請求響應物件

* @Description: 

* @Version:1.0.0 

* @Since:jdk1.8 

* @author $author

* @date $!time.currTime()

*/

@ApiModel(value = "$!{tableInfo.name}", description = "$!{tableInfo.comment}")

@Data

public class  $!{tableInfo.name}VO extends BasePage implements Serializable  {

    private static final long serialVersionUID = $!tool.serial();

#foreach($column in $tableInfo.fullColumn)

    #if(${column.comment})/**

    * ${column.comment}

    */#end

    @ApiModelProperty(value = "${column.comment}")

    private $!{tool.getClsNameByFullName($column.type)} $!{column.name};

#end







    @Override

    public String toString(){

        return JSONObject.toJSONString(this);

    }



}

3.service模板

PowerShell
##定義初始變數

#set($tableName = $tool.append("I",$tableInfo.name, "Service"))

##設定回撥

$!callback.setFileName($tool.append($tableName, ".java"))

$!callback.setSavePath($tool.append($tableInfo.savePath, "/service"))



##拿到主鍵

#if(!$tableInfo.pkColumn.isEmpty())

    #set($pk = $tableInfo.pkColumn.get(0))

#end



#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}service;

$!autoImport

import $!{tableInfo.savePackageName}.vo.$!{tableInfo.name}VO;


import java.util.List;





 /**

* @Title: $!{tableInfo.comment}($!{tableInfo.name})表服務介面

* @Description: 

* @Version:1.0.0 

* @Since:jdk1.8 

* @author $author

* @date $!time.currTime()

*/

public interface $!{tableName} {



    /**

     * 通過ID查詢單條資料

     *

     * @param $!pk.name 主鍵

     * @return 範例物件

     */

    $!{tableInfo.name}VO queryById($!pk.shortType $!pk.name);



   

     /**

     * 通過實體作為篩選條件查詢

     *

     * @param $!tool.firstLowerCase($!{tableInfo.name})VO 範例物件

     * @return 物件列表

     */

    ApiResult list($!{tableInfo.name}VO $!tool.firstLowerCase($!{tableInfo.name})VO);



    

    /**

     * 新增資料

     *

     * @param $!tool.firstLowerCase($!{tableInfo.name})VO 範例物件

     * @return 範例物件

     */

    int insert($!{tableInfo.name}VO $!tool.firstLowerCase($!{tableInfo.name})VO);



    /**

     * 修改資料

     *

     * @param $!tool.firstLowerCase($!{tableInfo.name})VO 範例物件

     * @return 範例物件

     */

    int update($!{tableInfo.name}VO $!tool.firstLowerCase($!{tableInfo.name})VO);



    /**

     * 通過主鍵刪除資料

     *

     * @param $!pk.name 主鍵

     * @return 是否成功

     */

    boolean deleteById($!pk.shortType $!pk.name);



}

4.serviceImpl 模板

PowerShell
##定義初始變數

#set($tableName = $tool.append($tableInfo.name, "ServiceImpl"))

##設定回撥

$!callback.setFileName($tool.append($tableName, ".java"))

$!callback.setSavePath($tool.append($tableInfo.savePath, "/service/impl"))



##拿到主鍵

#if(!$tableInfo.pkColumn.isEmpty())

    #set($pk = $tableInfo.pkColumn.get(0))

#end



#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}service.impl;

$!autoImport



import $!{tableInfo.savePackageName}.vo.$!{tableInfo.name}VO;

import $!{tableInfo.savePackageName}.model.$!{tableInfo.name};

import $!{tableInfo.savePackageName}.dao.$!{tableInfo.name}Dao;

import $!{tableInfo.savePackageName}.service.I$!{tableInfo.name}Service;



import com.github.pagehelper.Page;

import com.github.pagehelper.PageHelper;

import org.springframework.stereotype.Service;

import org.springframework.beans.BeanUtils;

import javax.annotation.Resource;

import java.util.List;







/**

* @Title: $!{tableInfo.comment}($!{tableInfo.name})表服務實現類

* @Description: 

* @Version:1.0.0 

* @Since:jdk1.8 

* @author $author

* @date $!time.currTime()

*/

@Service("$!tool.firstLowerCase($!{tableInfo.name})Service")

public class $!{tableName} implements I$!{tableInfo.name}Service {

    @Resource

    private $!{tableInfo.name}Dao $!tool.firstLowerCase($!{tableInfo.name})Dao;



    /**

     * 通過ID查詢單條資料

     *

     * @param $!pk.name 主鍵

     * @return 範例物件

     */

    @Override

    public $!{tableInfo.name}VO queryById($!pk.shortType $!pk.name) {

        return this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.queryById($!pk.name);

    }



    

      /**

     * 根據條件查詢

     *

     * @return 範例物件的集合

     */

    @Override

    public ApiResult list($!{tableInfo.name}VO $!{tool.firstLowerCase($!{tableInfo.name})}) {

         int pageNum = $!{tool.firstLowerCase($!{tableInfo.name})}.getPageNum();

         int pageSize = $!{tool.firstLowerCase($!{tableInfo.name})}.getPageSize();

         Page page = PageHelper.startPage(pageNum, pageSize);

        List<$!{tableInfo.name}VO> result =  $!{tool.firstLowerCase($!{tableInfo.name})}Dao.queryAll($!{tool.firstLowerCase($!{tableInfo.name})});

       return ApiResult.success(new PageResult<>(page.getTotal(), result, pageSize, pageNum));

         

    }

    

    /**

     * 新增資料

     *

     * @param $!tool.firstLowerCase($!{tableInfo.name})VO 範例物件

     * @return 範例物件

     */

    @Override

    public int insert($!{tableInfo.name}VO $!tool.firstLowerCase($!{tableInfo.name})VO) {

         $!{tableInfo.name}  $!tool.firstLowerCase($!{tableInfo.name}) = new $!{tableInfo.name}();

         BeanUtils.copyProperties($!tool.firstLowerCase($!{tableInfo.name})VO,$!tool.firstLowerCase($!{tableInfo.name}));

        return $!{tool.firstLowerCase($!{tableInfo.name})}Dao.insert($!tool.firstLowerCase($!{tableInfo.name}));

    }



    /**

     * 修改資料

     *

     * @param $!tool.firstLowerCase($!{tableInfo.name})VO 範例物件

     * @return 範例物件

     */

    @Override

    public int update($!{tableInfo.name}VO $!tool.firstLowerCase($!{tableInfo.name})VO) {

        $!{tableInfo.name}  $!tool.firstLowerCase($!{tableInfo.name}) = new $!{tableInfo.name}();

        BeanUtils.copyProperties($!tool.firstLowerCase($!{tableInfo.name})VO,$!tool.firstLowerCase($!{tableInfo.name}));

        return $!{tool.firstLowerCase($!{tableInfo.name})}Dao.update($!tool.firstLowerCase($!{tableInfo.name}));

    }



    /**

     * 通過主鍵刪除資料

     *

     * @param $!pk.name 主鍵

     * @return 是否成功

     */

    @Override

    public boolean deleteById($!pk.shortType $!pk.name) {

        return this.$!{tool.firstLowerCase($!{tableInfo.name})}Dao.deleteById($!pk.name) > 0;

    }
    }

5.controller模板

Kotlin
##定義初始變數

#set($tableName = $tool.append($tableInfo.name, "Controller"))

##設定回撥

$!callback.setFileName($tool.append($tableName, ".java"))

$!callback.setSavePath($tool.append($tableInfo.savePath, "/controller"))

##拿到主鍵

#if(!$tableInfo.pkColumn.isEmpty())

    #set($pk = $tableInfo.pkColumn.get(0))

#end



#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}controller;



import $!{tableInfo.savePackageName}.vo.$!{tableInfo.name}VO;

import $!{tableInfo.savePackageName}.service.I$!{tableInfo.name}Service;

import org.springframework.web.bind.annotation.*;




import io.swagger.annotations.Api;

import io.swagger.annotations.ApiOperation;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.RequestBody;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RestController;



import javax.servlet.http.HttpServletRequest;







/**

* @Title: $!{tableInfo.comment}($!{tableInfo.name})表控制層

* @Description: 

* @Version:1.0.0 

* @Since:jdk1.8 

* @author $author

* @date $!time.currTime()

*/

@Api(tags = "$!{tableInfo.comment}($!{tableInfo.name})")

@RestController

@RequestMapping("$!tool.firstLowerCase($tableInfo.name)")

public class $!{tableName} {

    /**

     * 服務物件

     */

    @Autowired

    private I$!{tableInfo.name}Service $!tool.firstLowerCase($tableInfo.name)Service;




    

    /**

     * 新增一條資料

     *

     * @param $!tool.firstLowerCase($tableInfo.name)VO 實體類

     * @return Response物件

     */

    @ApiOperation(value = "$!{tableInfo.comment}新增",notes = "$!{tableInfo.comment}新增")

    @RequestMapping(value = "save", method = RequestMethod.POST)

    public ApiResult insert(@RequestBody $!{tableInfo.name}VO $!tool.firstLowerCase($tableInfo.name)VO, HttpServletRequest httpRequest) {

 

        int result = $!{tool.firstLowerCase($tableInfo.name)}Service.insert($!tool.firstLowerCase($tableInfo.name)VO);

        if (result > 0) {

           return ApiResult.success();

        }

        return ApiResult.error("新增失敗");

    }



    /**

     * 修改一條資料

     *

     * @param $!tool.firstLowerCase($tableInfo.name)VO 實體類

     * @return Response物件

     */

    @ApiOperation(value = "$!{tableInfo.comment}修改",notes = "$!{tableInfo.comment}修改")

    @RequestMapping(value = "edit", method = RequestMethod.POST)

    public ApiResult update(@RequestBody $!{tableInfo.name}VO $!tool.firstLowerCase($tableInfo.name)VO, HttpServletRequest httpRequest) {


         $!{tool.firstLowerCase($tableInfo.name)}Service.update($!tool.firstLowerCase($tableInfo.name)VO); 

          return ApiResult.success();

    }



    /**

     * 刪除一條資料

     *

     * @param $!tool.firstLowerCase($tableInfo.name)VO 引數物件

     * @return Response物件

     */

    @ApiOperation(value = "$!{tableInfo.comment}刪除",notes = "$!{tableInfo.comment}刪除") 

    @RequestMapping(value = "del", method = RequestMethod.POST)

    public ApiResult delete(@RequestBody $!{tableInfo.name}VO $!tool.firstLowerCase($tableInfo.name)VO, HttpServletRequest httpRequest) {

        $!{tool.firstLowerCase($tableInfo.name)}Service.deleteById($!{tool.firstLowerCase($tableInfo.name)}VO.getId());

        return ApiResult.success();   

    }



  



    /**

     * 分頁查詢

     *

     */

    @ApiOperation(value = "$!{tableInfo.comment}查詢",notes = "$!{tableInfo.comment}查詢")

    @RequestMapping(value = "list", method = RequestMethod.POST)

    public ApiResult list(@RequestBody $!{tableInfo.name}VO $!tool.firstLowerCase($tableInfo.name)VO) {

       return   $!{tool.firstLowerCase($tableInfo.name)}Service.list($!tool.firstLowerCase($tableInfo.name)VO);

    }



     /**

     * 詳情查詢

     *

     */  

    @ApiOperation(value = "$!{tableInfo.comment}詳情",notes = "$!{tableInfo.comment}詳情") 

    @RequestMapping(value = "view", method = RequestMethod.GET)

    public ApiResult view( @RequestParam("id") Long id) {

        return ApiResult.success($!{tool.firstLowerCase($tableInfo.name)}Service.queryById(id));   

    }

}

6.mapper模板

HTML
##引入mybatis支援

$!mybatisSupport



##設定儲存名稱與儲存位置

$!callback.setFileName($tool.append($!{tableInfo.name}, "Mapper.xml"))

$!callback.setSavePath($tool.append($modulePath, "/src/main/resources/guard/mapper"))



##拿到主鍵

#if(!$tableInfo.pkColumn.isEmpty())

    #set($pk = $tableInfo.pkColumn.get(0))

#end



<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="$!{tableInfo.savePackageName}.dao.$!{tableInfo.name}Dao">



    <resultMap type="$!{tableInfo.savePackageName}.vo.$!{tableInfo.name}VO" id="$!{tableInfo.name}Map">

#foreach($column in $tableInfo.fullColumn)

        <result property="$!column.name" column="$!column.obj.name" jdbcType="$!column.ext.jdbcType"/>

#end

    </resultMap>



    <!--查詢單個-->

    <select id="queryById" resultMap="$!{tableInfo.name}Map">

        select

          #allSqlColumn()



        from $!tableInfo.obj.name

        where $!pk.obj.name = #{$!pk.name}

    </select>

    

     <!--通過實體查詢一條資料-->

    <select id="findOne" resultMap="$!{tableInfo.name}Map">

        select

          #allSqlColumn()

        from $!tableInfo.obj.name

        <where>

#foreach($column in $tableInfo.fullColumn)

            <if test="$!column.name != null#if($column.type.equals("java.lang.String")) and $!column.name != ''#end">

                and $!column.obj.name = #{$!column.name}

            </if>

#end

        </where>

        limit 1

    </select>



    <!--通過實體作為篩選條件查詢-->

    <select id="queryAll" resultMap="$!{tableInfo.name}Map">

        select

          #allSqlColumn()



        from $!tableInfo.obj.name

        <where>

#foreach($column in $tableInfo.fullColumn)

            <if test="$!column.name != null#if($column.type.equals("java.lang.String")) and $!column.name != ''#end">

                and $!column.obj.name = #{$!column.name}

            </if>

#end

        </where>

    </select>



    <!--新增所有列-->

    <insert id="insert" keyProperty="$!pk.name" useGeneratedKeys="true">

        insert into $!{tableInfo.obj.name}(#foreach($column in $tableInfo.otherColumn)$!column.obj.name#if($velocityHasNext), #end#end)

        values (#foreach($column in $tableInfo.otherColumn)#{$!{column.name}}#if($velocityHasNext), #end#end)

    </insert>



    <insert id="insertBatch" keyProperty="$!pk.name" useGeneratedKeys="true">

        insert into $!{tableInfo.obj.name}(#foreach($column in $tableInfo.otherColumn)$!column.obj.name#if($velocityHasNext), #end#end)

        values

        <foreach collection="entities" item="entity" separator=",">

        (#foreach($column in $tableInfo.otherColumn)#{entity.$!{column.name}}#if($velocityHasNext), #end#end)

        </foreach>

    </insert>



    <insert id="insertOrUpdateBatch" keyProperty="$!pk.name" useGeneratedKeys="true">

        insert into $!{tableInfo.obj.name}(#foreach($column in $tableInfo.otherColumn)$!column.obj.name#if($velocityHasNext), #end#end)

        values

        <foreach collection="entities" item="entity" separator=",">

            (#foreach($column in $tableInfo.otherColumn)#{entity.$!{column.name}}#if($velocityHasNext), #end#end)

        </foreach>

        on duplicate key update

         #foreach($column in $tableInfo.otherColumn)$!column.obj.name = values($!column.obj.name) #if($velocityHasNext), #end#end

    </insert>



    <!--通過主鍵修改資料-->

    <update id="update">

        update $!{tableInfo.obj.name}

        <set>

#foreach($column in $tableInfo.otherColumn)

            <if test="$!column.name != null#if($column.type.equals("java.lang.String")) and $!column.name != ''#end">

                $!column.obj.name = #{$!column.name},

            </if>

#end

        </set>

        where $!pk.obj.name = #{$!pk.name}

    </update>



    <!--通過主鍵刪除-->

    <delete id="deleteById">

        delete from $!{tableInfo.obj.name} where $!pk.obj.name = #{$!pk.name}

    </delete>



</mapper>

7.model模板

Kotlin
##引入宏定義

$!define



##使用宏定義設定回撥(儲存位置與檔案字尾)

#save("/model", ".java")

##使用宏定義設定包字尾

#setPackageSuffix("model")



##使用全域性變數實現預設包匯入

$!autoImport



import com.alibaba.fastjson.JSONObject;

import lombok.Data;



import javax.persistence.Column;

import javax.persistence.Table;

import java.io.Serializable;

import java.util.Date;



 /**

* @Title: $!{tableInfo.comment}($!{tableInfo.name})實體類

* @Description: 

* @Version:1.0.0 

* @Since:jdk1.8 

* @author $author

* @date $!time.currTime()

*/

@Data

@Table(name = "$tableInfo.obj.name")

public class $!{tableInfo.name}  implements Serializable  {

    private static final long serialVersionUID = $!tool.serial();

#foreach($column in $tableInfo.fullColumn)

    #if(${column.comment})/**

    * ${column.comment}

    */#end

    @Column(name = "$column.obj.name")

    private $!{tool.getClsNameByFullName($column.type)} $!{column.name};

#end





    @Override

    public String toString(){

        return JSONObject.toJSONString(this);

    }



}

使用設定

1.前提

該外掛使用IDEA連線資料庫,若未連線資料庫,則需手動新增資料庫.

MySql資料庫新增範例:

點選IDEA右側的database,點選+號,選擇DataSource->MySQL,需要MySql驅動的jar,可以從maven倉庫裡面選擇對應的jar。

範例圖:


2.使用

連線mysql之後,選擇對應的表,這裡就選擇db_version,右鍵該表,選擇EasyCode->Generate Code,然後選擇剛剛建立的組(MyGroup),選擇生成程式碼的路徑,這裡到了com.xxx.xxx即可,如果有不存在的package,會自動建立,點選ok自動生成程式碼。再次做同樣的點選可以選擇覆蓋響應程式碼。

測試範例

1.資料新增

2.分頁查詢

3.資料修改

一些使用錯誤解決辦法

1. Error:java: 無效的源發行版: 11

操作: 'File->Project Structure'
修改jdk的版本

執行提示 Command line is too long

解法:
修改專案下 .idea\workspace.xml,找到標籤 <component name="PropertiesComponent"> , 在標籤里加一行 <property name="dynamic.classpath" value="true" />

Idea 遊標變成了 insert遊標狀態

是因為使用了外掛ideavim,開啟file -> settings 點選 Plugins 然後再右邊搜尋方塊輸入IdeaVim,出來結果後將後面核取方塊中得勾去掉就可以了

其他

關於IDEA,在很久之前就開始使用了,主要是因為使用eclipse間歇先崩潰,有幾次程式碼沒有及時儲存導致心態炸裂,所以就開始使用IDEA,因為個人習慣,使用一項新的東西,就會進行記錄,因此就有了此手記。

音樂推薦

一首很好聽的古風曲~

原創不易,如果感覺不錯,希望給個推薦!您的支援是我寫作的最大動力!
版權宣告:
作者:虛無境
部落格園出處:http://www.cnblogs.com/xuwujing
CSDN出處:http://blog.csdn.net/qazwsxpcm    
個人部落格出處:https://xuwujing.github.io/