# IDEA 基础配置
新安装好 IDEA 后需要设置的东西统一汇总。
# IDEA 禁用更新
一般情况下,我们想把 IDEA 固定在某个版本使用,不想随便升级,毕竟如果使用破解版的话,升级后可能就失效了。
而且,如果不禁用更新,打开的时候右下角会提示我们有新版本更新,还得手动点掉。
点击左上角【File】--》【Settings】--》【Appearance & Behavior】--》【System Settings】--》【Updates】,把【Automatically check updates for】前面的勾去掉。
# 修改 IDEA 显示主题
选择【IntelliJ Light】对眼睛比较好,不要一味的选择黑色炫酷啦,据说,大佬们都喜欢用这个主题哦。
# 修改快捷键
使用【Eclipse】快捷键,方便从 Eclipse 切换至 IDEA。
# 添加从重写的方法跳转到对应的接口的快捷键
点击【Main menu】,选择【Navigate】,找到【Go to Super Method】。
选中【Go to Super Method】,右键选中【Add Keyboard Shortcut】。
使用快捷键Ctrl + Shift + T,因为查看接口的实现是Ctrl + T,用这个比较方便来回跳转。
这个快捷键会和其他的冲突,移除其他的就可以。
# 始终显示工具栏
# 设置之前
# 设置之后
对比可以看到,设置之后,工具栏独占一行,不和导航栏共用一行,不共用一行这样看代码的时候会比较方便。
# 设置方法
在上方菜单栏中找到【View】--》【Appearance】--》勾选上【Toolbar】。
# 修改字体
【Editor】--》【Font】。
# 修改注释颜色
# 开启鼠标移动时快速显示文档注释
【Editor】--》【Code Editing】--》勾选上【Show quick documentation on mouse move】
# 开启快速调整字体大小
找到【Editor】--》【General】--》勾选上【Change font size with Ctrl + Mouse Wheel】
# 代码提示不区分大小写
默认是勾选的,你需要记住大小写才能匹配到你要的那个类,不勾选这个提高开发效率,提高 IDEA 的代码联想速度。
点击【Editor】-->【General】-->【Code Completion】,把 Match case 前面的勾去掉,改成图中的样子。
# 修改文档提示延迟时间
点击左上角【File】--》【Editor】--》【Code Editing】--》然后向下滚动页面找到【Editor Tooltips】。
修改【Tooltip delay】中的值,单位毫秒,默认是鼠标移到方法上 500 毫秒后出现提示,可以根据自己需要适当调小。
调大了,要等好久才出现提示;调小了,你动一下就出现提示,都是很烦的。我调整成了【300】毫秒,稍微快一点。
# 修改方法参数提示所需时间
点击【Editor】-->【General】-->【Code Completion】,往下翻,找到【Parameter Info】,改成如图所示。
默认的参数信息提示时间是 1000 ms,改成 500 ms。
# 设置自动导包
如果导入的包比较多,自己一个个导入比较麻烦和费时间。
当删除一些代码时,导入的包不会自动删除,会一直存在,代码提交时会越来越臃肿。
设置方法:
点击左上角【File】--》【Settings】--》【Editor】--》【General】--》【Auto Import】
【Insert imports on paste】修改为【All】,
勾选【Add unambiguous imports on the fly】,
勾选【Optimize imports on the fly (for current projcet)】。
说明:
Insert imports on paste:当类名重名的时候,是询问你导入那个包还是全部导入。
Add unambiguous imports on the fly:表示 IDEA 将在我们写代码的时候自动帮我们导入需要用到的包。
Optimize imports on the fly:表示 IDEA 将在我们写代码的时候自动帮我们优化导入的包,比如自动去掉一些没有用到的包。
参考文献:
# 设置显示行号和方法间的分隔符
左上角找到【File】--》【Settings】--》【Editor】--》【General】--》【Appearance】,勾选以下框框
- Show line numbers:显示行号
- Show method separators:显示方法之间的分隔符
# 方法分隔符效果
可以看到,所有方法之间都加了个一条横线作为分隔符,有的时候一个方法很长的时候可能看着就乱了,显示分隔符会有一定的辨识度。
参考文献:
# 开启自动编译
# 设置当前项目自动编译
左上角找到【File】--》【Settings】--》【Build, Execution, Deployment】-->【Compiler】,
勾选【Build project automatically】和【Compile independent modules in parallel】。
# 设置新项目默认自动编译
左上角找到【File】--》【New Projects Settings】--》【Settings for New Projects...】
选择【Build, Execution, Deployment】-->【Compiler】,
勾选【Build project automatically】和【Compile independent modules in parallel】。
# 不压缩中间包名
点击项目上方的小齿轮,然后去掉【Compact Middle Packages】前面的勾。
不勾选【Compact Middle Packages】的效果:
可以看到,每个文件夹都显示出来了,没有压缩。
勾选【Compact Middle Packages】的效果:
多层文件夹,会进行压缩,不展开显示,但是,有时候也会把我们给坑了。
像下面【mapper.system】,其实这是 mapper 文件夹里面有一个 system 文件夹。但是,我们可能会误以为,这个文件夹名字叫 mapper.system
参考文献:
# 设置自动保存
修改【File | Settings | Appearance & Behavior | System Settings】,找到【Synchronization】,改成如图所示,默认是 10 秒自动保存一次,改成 1 秒。
# 修改配置文件默认字符集
修改当前项目:左上角找到【File】-->【Settings】-->【Editor】-->【File Encodings】,改成和下图一样。
修改所有新项目:左上角找到【File】-->【New Projects Settings】-->【Settings for New Projects】-->【Editor】-->【File Encodings】,改成和下图一样。
# 为所有项目统一设置 Maven 环境
# 设置自动下载 Maven 第三方依赖源码、文档
有需要可以勾选上,但是会导致本地仓库非常庞大,建议用到的时候才去手动下载。
# 设置默认不折叠一行的函数
左上角选择【File】-->【Settings】-->【Editor】-->【General】-->【Code Folding】,把【One-line methods】前面的勾去掉。
# 关闭 @Autowired 注解注释错误的提示
@Autowired 注解描述的 Mapper 对象下面有红色波浪线,但运行时没有错误,如何去除红色波浪线。
原因:因为我们在主启动类上使用 @MapperScan 来扫描包下的 Mapper 接口,这样不用每个数据库接口一个个的加 @Mapper 注解,但是 IDEA 误以为我们没有添加注解,导致认为这个接口没有交给 Spring 管理,导致报错,可以在类上添加 @Repository 接口来避免报错,或者把 @Autowired 改成 @Resource,或者禁用这个检查。
解决方案:
1、禁用检查
2、在 Mapper 接口上添加 @Repository
3、把 @Autowired 改成 @Resource
修改当前项目:左上角找到【File】-->【Settings】-->【Editor】-->【Inspections】,在输入框搜索【Autowiring for bean class】,改成和下图一样。
修改所有新项目:左上角找到【File】-->【New Projects Settings】-->【Settings for New Projects】-->【Editor】-->【Inspections】,在输入框搜索【Autowiring for bean class】,改成和下图一样。
# 代码模板
# 新增类时自动添加作者和时间
左上角菜单栏找到【File】--》【Settings】--》【Editor】--》【File and code Templates】--》【Includes】--》点击【File Header】,然后在里面添加以下内容:
## DTO 层文件注释
#set($dtoDesc = "xxx请求数据")
## VO 层文件注释
#set($voDesc = "xxx响应数据")
## BO 层文件注释
#set($boDesc = "xxx业务数据")
## Controller 层文件注释
#set($controllerDesc = "xxx接口")
## Controller 层 FeignClient 实现类文件注释
#set($controllerFeignClientDesc = "xxx远程调用接口实现类")
## FeignClient 层文件注释
#set($feignClientDesc = "xxx远程调用接口")
## Service 层文件注释
#set($serviceDesc = "xxx接口服务层")
## Mapper 层文件注释
#set($mapperDesc = "xxx接口数据库层")
## 测试类文件注释后缀
#set($testSuffix = "测试类")
## 测试类文件注释
#set($testDesc = "xxx测试类")
/**
#if ($PACKAGE_NAME.toString().contains(".dto"))
* $dtoDesc
#elseif ($PACKAGE_NAME.toString().contains(".vo"))
* $voDesc
#elseif ($PACKAGE_NAME.toString().contains(".bo"))
* $boDesc
## Controller 层的特殊处理
#elseif ($PACKAGE_NAME.toString().contains(".controller") && $NAME.toString().endsWith("Test") && !$NAME.toString().contains("FeignClient"))
* ${controllerDesc}${testSuffix}
#elseif ($PACKAGE_NAME.toString().contains(".controller") && !$NAME.toString().contains("FeignClient"))
* $controllerDesc
## Controller 层 FeignClient 的特殊处理
#elseif ($PACKAGE_NAME.toString().contains(".controller") && $NAME.toString().endsWith("Test") && $NAME.toString().contains("FeignClient"))
* ${controllerFeignClientDesc}${testSuffix}
#elseif ($PACKAGE_NAME.toString().contains(".controller") && $NAME.toString().contains("FeignClient"))
* $controllerFeignClientDesc
## Service 层注释
#elseif ($PACKAGE_NAME.toString().contains(".service") && $NAME.toString().endsWith("Test"))
* ${serviceDesc}${testSuffix}
#elseif ($PACKAGE_NAME.toString().contains(".service"))
* $serviceDesc
## FeignClient 层注释
#elseif ($PACKAGE_NAME.toString().contains(".feignclient") && $NAME.toString().endsWith("Test"))
* ${feignClientDesc}${testSuffix}
#elseif ($PACKAGE_NAME.toString().contains(".feignclient"))
* $feignClientDesc
## Mapper 层注释
#elseif ($PACKAGE_NAME.toString().contains(".mapper") && $NAME.toString().endsWith("Test"))
* ${mapperDesc}${testSuffix}
#elseif ($PACKAGE_NAME.toString().contains(".mapper"))
* $mapperDesc
## 通用测试类注释处理
#elseif ($NAME.toString().endsWith("Test"))
* $testDesc
#else
* desc
#end
*
* @author ${USER}
* @date ${DATE}
*/
参考文献:
IDEA创建文件添加作者及时间信息_Simba1949的博客-CSDN博客_idea 添加作者 (opens new window)
# 新增类时根据包名自动添加相关注解
左上角菜单栏找到【File】--》【Settings】--》【Editor】--》【File and code Templates】--》【Files】--》找到【Class】,然后在里面替换为以下内容:
#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end
## 导入 Controller 层的包
#if ($PACKAGE_NAME.toString().contains(".controller"))
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
#end
## 导入 Service 层的包
#if ($PACKAGE_NAME.toString().contains(".service"))
import org.springframework.validation.annotation.Validated;
import org.springframework.stereotype.Service;
#end
## 导入 BO 模型的包
#if ($PACKAGE_NAME.toString().contains(".bo"))
import lombok.EqualsAndHashCode;
import lombok.ToString;
#end
## 导入 model 的包
#if (
$PACKAGE_NAME.toString().contains(".dto")
|| $PACKAGE_NAME.toString().contains(".vo")
|| $PACKAGE_NAME.toString().contains(".bo")
|| $PACKAGE_NAME.toString().contains(".entity")
|| $PACKAGE_NAME.toString().contains(".po")
|| $PACKAGE_NAME.toString().contains(".model")
|| $PACKAGE_NAME.toString().contains(".pojo")
)
import lombok.Data;
import lombok.experimental.Accessors;
import io.swagger.annotations.ApiModel;
#end
#parse("File Header.java")
## 使用 Controller 的注解
#if ($PACKAGE_NAME.toString().contains(".controller") && !${NAME.endsWith("FeignClientController")})
@Api(tags = "xxx接口")
@RestController
@RequestMapping("/$NAME.toString().toLowerCase().charAt(0)$NAME.toString().replace("Controller", "").substring(1, $NAME.toString().indexOf("Controller"))")
#end
## 使用 Controller 的注解
#if ($PACKAGE_NAME.toString().contains(".controller") && ${NAME.endsWith("FeignClientController")})
@Api(tags = "xxx远程调用接口实现类")
@ApiIgnore
@RestController
@RequestMapping(${NAME.toString().replace("Controller", "")}.REQUEST_MAPPING)
#end
## 使用 Service 的注解
#if ($PACKAGE_NAME.toString().contains(".service"))
@Slf4j
@Validated
@Service
#end
## 使用 model 的注解
#if (
$PACKAGE_NAME.toString().contains(".dto")
|| $PACKAGE_NAME.toString().contains(".vo")
|| $PACKAGE_NAME.toString().contains(".bo")
|| $PACKAGE_NAME.toString().contains(".entity")
|| $PACKAGE_NAME.toString().contains(".po")
|| $PACKAGE_NAME.toString().contains(".model")
|| $PACKAGE_NAME.toString().contains(".pojo")
)
@ApiModel("desc")
@Accessors(chain = true)
@Data
#end
## 使用 bo 模型的注解
#if ($PACKAGE_NAME.toString().contains(".bo"))
@EqualsAndHashCode(callSuper = true);
@ToString(callSuper = true);
#end
## dto 包下的类要以 DTO 结尾
#if ($PACKAGE_NAME.toString().contains(".dto") && !${NAME.endsWith("DTO")})
public class ${NAME.substring(0,1).toUpperCase()}${NAME.substring(1)}DTO {
}
## vo 包下的类要以 VO 结尾
#elseif ($PACKAGE_NAME.toString().contains(".vo") && !${NAME.endsWith("VO")})
public class ${NAME.substring(0,1).toUpperCase()}${NAME.substring(1)}VO {
}
## FeignClient 接口的实现类
#elseif ($PACKAGE_NAME.toString().contains(".controller") && ${NAME.endsWith("FeignClientController")})
public class ${NAME.substring(0,1).toUpperCase()}${NAME.substring(1)} implements $NAME.toString().replace("Controller", "") {
}
## 类名首字母要大写
#else
public class ${NAME.substring(0,1).toUpperCase()}${NAME.substring(1)} {
}
#end
远程调用服务 FeignClient 模板
#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end
## 导入 FeignClient 远程调用的包
#if ($PACKAGE_NAME.toString().contains(".feignclient"))
import org.springframework.cloud.openfeign.FeignClient;
#end
#parse("File Header.java")
## 使用 FeignClient 的注解
#if ($PACKAGE_NAME.toString().contains(".feignclient"))
@FeignClient(
name = 服务名,
contextId = "${NAME}",
path = ${NAME}.REQUEST_MAPPING
)
#end
public interface ${NAME} {
#if ($PACKAGE_NAME.toString().contains(".feignclient"))
String REQUEST_MAPPING = "/$NAME.toString().toLowerCase().charAt(0)$NAME.toString().substring(1)";
#end
}
# MyBatis3 mapper.xml 模板
左上角菜单栏找到【File】--》【Settings】--》【Editor】--》【File and code Templates】--》【Files】--》点击【+】新建一个模板,然后在里面添加以下内容:
Name: MyBatis3 mapper.xml
Extension: xml
File name: XxxMapper.xml
<?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="com.xxx.mapper.XxxMapper">
</mapper>
在 resources 资源目录下,右键【New】--》找到【MyBatis3 mapper.xml】
右键新创建出来的【XxxMapper.xml】,找到【Refactor】--》【Rename】,修改为对应接口的 mapper 名字,还有文件中的 namespace
也要改为接口的全路径。
参考文献:
IDEA添加mybatis mapper.xml模板(附mybatis官方模板代码) (opens new window)
# Thymeleaf 文件模板
<!doctype html>
<html lang="ch" xmlns:th="http://www.thymeleaf.org">
</html>
点击 +
号新建一个模板,输入 Name【thymeleaf】,Extension:【html】,完成后点击【Apply】、【OK】
新建文件的时候可以选择
参考文献:
https://www.bilibili.com/video/BV1qy4y117qi (opens new window)
# 从 java 文件跳转到 class 文件
左上角菜单栏找到【File】--》【Settings】--》【Tools】--》【External Tools】,点击【+】新建,然后添加以下内容:
Name:打开 class 文件所在目录
Description:打开 .java对应的 .class 文件所在的文件目录
Tool Settings:
Program:explorer.exe
Arguments:/select,"$OutputPath$\$FileDirRelativeToSourcepath$\$FileNameWithoutExtension$.class"
Working directory:$ProjectFileDir$
打开【Advanced Options】,把【Synchronize files after execution 去掉】
Name:用 idea 打开 class 文件
Description:用 idea 打开 .java 文件对应的编译后的 .class 文件
Tool Settings:
Program:V:\tool\idea\ideaIU-2020.1.3.win\bin\idea64.exe
Arguments:"$OutputPath$\$FileDirRelativeToSourcepath$\$FileNameWithoutExtension$.class"
Working directory:$ProjectFileDir$
打开【Advanced Options】,把【Synchronize files after execution 去掉】
# 使用方法
编写一个 Hello World 文件,并且执行一次。
public class Hello {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
在文件上右键,找到【External Tools】,选择【用 idea 打开 class 文件】
就会自动用一个新的窗口打开反编译后的文件了。
参考文献:
参考文献:
CGB2103-day01 (opens new window)
CGB2102-SpringDay01 (opens new window)
Idea设置默认不折叠一行的函数_加班加班到天明的博客-CSDN博客_idea 一行代码 (opens new window)