博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IDEA技巧
阅读量:3935 次
发布时间:2019-05-23

本文共 27663 字,大约阅读时间需要 92 分钟。

IDEA

文章目录

2、IDEA的技巧

2.1 如果不小心把IDEA的配置搞崩溃了

在C:\Users\tc.IntelliJIdea2017.3路径下,删除config和system文件夹就可以恢复默认设置

2.2 如果导入的文件有乱码怎么办
  • 可以点击右下角的编码集字样的按钮,就可以设置当前文件的编码集。
  • Reload(是指以指定的字符集显示当前文件)
  • Convert(是指重新按指定的编码集重新编码当前文件)
2.3 IDEA下方的indexing一直自动刷新的解决方案

File-Invalidate Cache/Restart-选第一个重启即可

2.4 自动生成接口的测试代码
  • 首先在接口上快捷键:Ctrl+Shift+T,打开Create Test对话框
  • 在Testing library中选择JUnit4进行测试
  • 设置测试类的类名,一般是XxxTest(接口名+Test)
  • 设置Destination package,一般在项目中有test的包
  • 在下方选择要测试的方法
2.5 创建JavaEE工程时,没有带有WEB_INF文件夹和web.xml文件,如何创建?
  1. 进入项目结构对话框

  2. 进入Facet中创建web.xml文件

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BPLlYKBS-1623427371981)(E:\4_StudyVideo\picture\2021-05-27_041731.png)]

2.6 如何在当前工程中移除一个模块
  • 进入工程结构对话框,点击module-选中要移除的模块-点击上方的减号表示移除

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nmJjW4z6-1623427371983)(E:\4_StudyVideo\picture\2021-05-27_145102.png)]

2.7 IDEA在编译时出现 Cannot start process, the working directory … does not exist 的解决方案
  • 选择 Run-Edit configurations ,找到当前的项目,修改Working directory为 M O D U L E D I R MODULE_DIR MODULEDIR即可

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BcpN3KNO-1623427371985)(E:\4_StudyVideo\picture\2021-05-27_181345.png)]

2.8 解决IDEA包名折叠的情况
  • 在项目右上角选择设置按钮,把前两项取消勾选就可以了
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-StLrxZTw-1623427371985)(E:\4_StudyVideo\picture\2021-05-28_014129.png)]
2.9 解决Mybatis中文件没有拷贝到target目录中的问题
  • 首先检查resources文件夹名称是否正确,同时在pom.xml文件中,检查resources标签是否正确配置

    src/main/java
    **/*.properties
    **/*.xml
    false
  • 对整个项目进行重新构建,点击Build菜单下的Rebuild Project

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PIhTiJNh-1623427371986)(E:\4_StudyVideo\picture\2021-05-28_060408.png)]

2.10 取消Idea开始界面打开默认项目配置
  • 进入Setting设置界面, 选择Appearance & Behavior>System Settings, 在Startup/Shutdown栏目处,去掉默认的勾选Reopen last project on startup(在启动的时候打开上次的项目),去掉勾选之后,点击确认

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XmXxGZg9-1623427371987)(E:\4_StudyVideo\picture\2021-06-02_024427.png)]

3、IDEA的设置

  1. 设置IDEA的主题
    • Appearance & Behavior - Appearance - Theme
  2. 设置IDEA的代码颜色
    • Editor - Color Schema - Schema
  3. 开启鼠标滚轮调整字体大小
    • Editor - General - Change font size with Ctrl+Mouse Wheel
  4. 设置鼠标悬停提示的时间
    • Editor - General - Show quick documentation on mouse move
  5. 开启自动导包功能
    • Editor - General - Auto import - 选择ALL;并且打钩Add unambiguous import on the fly和Optimize import on the fly
  6. 显示方法的分隔符
    • Editor - General - Appearance - Show method separators
  7. 不区分大小写的提示
    • Editor - General - Code Completion - Case sensitive completion - None
  8. 取消代码标签折叠
    • Editor - General - Editor Tabs - Show tabs in single row(取消)
  9. 设置字体、大小、行间距
    • Editor - Font
  10. 修改注释的颜色
    • Editor - Color Schema - Language Defaults - Comments
  11. 修改文件的注释信息
    • Editor - File and Code Templates - File Header
  12. 设置项目的文件编码
    • Editor - File Encodings
  13. 开启自动重新编译文件运行(如果不勾选,每次都是运行的旧的文件)
    • Build Execution Deployment - Compiler - Build project automatically(勾选);Compile independent modules in parallel(勾选)

4、IDEA的模板

4.1 代码模板
  • 代码模板:代码模板的原理是配置一些常用的代码字母的缩写,在输入时可以出现预定义的固定代码,提高开发效率

  • 代码模板的位置:

    • Editor - Live Templates(用户可以进行自定义)
    • Editor - General - Postfix Completion(用户不能进行自定义,只能使用)
  • 常用代码模板

    • psvm:生成main方法框架
    • sout:生成System.out.println的输出方法
      • soutp(用于输出一个方法的形参)、p代表parameter
      • soutm(用于打印当前调用的方法名)、m代表method
      • soutv(用于打印当前方法里面的局部变量,在测试时经常使用,按照就近原则)、v代表variable
      • xxx.sout
    • fori:生成for循环
      • iter:生成增强的for循环
      • itar:基于最近的变量来推断出要遍历的对象,使用普通for循环来遍历
    • list.for:生成集合的遍历,其中list是要遍历的集合对象变量
      • list.fori:生成普通的for循环来遍历集合
      • list.forr:以倒序的普通for循环来遍历集合
    • ifn:生成判断对象变量是否是null的if语句
      • inn:生成判断对象变量是否不是null的if语句
      • xxx.null、xxx.inn
    • prsf:生成private static final的前缀
      • psf:生成public static final的前缀
  • 修改、自定义模板(Editor - Live Templates)

    • 具体方式:
      • 可以点击右上角的+号来添加一个新的组、新的模板
      • 可以写对应的模板简写、模板描述、模板文本
      • 用两个$$符号,来表示鼠标停留的位置
      • 最后,点击下方的define来设置在哪些地方要使用模板
4.2 文件模板
  • 文件模板:文件模板是预定义好的指定后缀文件,其核心内容是预先定义好的,省去从头编写文件的繁琐过程

  • 自定义文件模板

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qypgAE2E-1623427371989)(E:\4_StudyVideo\picture\2021-05-28_050248.png)]

  • 使用自定义文件模板

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N34HvRTi-1623427371989)(E:\4_StudyVideo\picture\2021-05-28_050721.png)]

5、IDEA的快捷键

  1. 复制删除当前行

    1. 复制:Ctrl+d
    2. 删除:Ctrl+y
    3. 复制当前类的全限定名称:在类上右键-Copy Reference(Ctrl+Alt+Shift+C)
  2. 向上、下移动当前行

    1. 向上移动:Alt+Shift+↑
    2. 向下移动:Alt+Shift+↓
  3. 向上或向下插入一行

    1. 向下插入空行:Shift+Enter
    2. 向上插入空行:Alt+Ctrl+Enter
  4. 新建

    • 选中项目中的文件夹、包(包也是文件夹),点击Alt+Insert(还可以输入单词缩写过滤文件)
    • 选中要实现类,单击Alt+Enter可以进行接口的实现
  5. 收藏

    • 添加到收藏夹(类、方法):Alt+Shift+F
  6. 注释

    1. 单行注释:Ctrl+/
    2. 多行注释:Ctrl+Shift+/
  7. 错误:

    1. 定位下一个错误:F2
    2. 定位上一个错误:Shift+F2
  8. 记忆粘贴

    1. 打开最近剪贴板的拷贝记录:Ctrl+Shift+V
  9. 代码修改

    1. 标识符的整体修改:Shift+F6
    2. 文本的大小写转换:Ctrl+Shift+U
    3. 将局部变量抽取为成员变量:Alt+Ctrl+F
    4. 将局部代码步骤抽取为成员方法:Alt+Ctrl+M
    5. 整理当前.java源代码导入的包:Ctrl+Alt+O
  10. 展开与收起

    1. 全部展开的一个项目:选中该项目,点击数字键的*****号即可展开
    2. 一层一层展开一个项目:选中该项目,点击方向键的即是展开,方向键的即是收起
  11. 代码自动生成

    1. 给类添加get/set方法以及构造器等:ALt+Insert
    2. 使用XXX结构包围代码:Ctrl+Alt+t
    3. 根据使用环境,自动生成代码:Alt+Enter
    4. 在接口中自动生成测试代码:Ctrl+Shift+T

  12. 代码的格式

    1. 折叠全部代码:Ctrl+Shift±

    2. 展开全部代码:Ctrl+Shift++

    3. 格式化代码:Ctrl+Alt+L

  13. 运行与调试、终止

    1. 运行当前类文件(必须要当前类有main函数):Shift+F10
    2. 调试当前类文件(必须要当前类有main函数):Shift+F9
    3. 单步步过:F8
    4. 单步步入:F7
    5. 执行完当前方法并返回:Shift+F8
  14. 查询

    1. 当前类的概览(可以看当前类的所有构造器、属性、方法、代码块…,以及它们是否是静态、是怎样的访问权限):Ctrl+F12
    2. 在抽象类(接口)上查看有哪些类继承/实现了自己:Ctrl+Alt+B
    3. 查看一个类的继承图:Ctrl+H
    4. 查看一个类的继承图,以图形的形式显示:Alt+Ctrl+U
    5. 查看方法在哪里被调用:Alt+F7
  15. 提示

    1. 代码提示:Ctrl+Alt+Space
    2. 方法参数提示显示:Ctrl+P
  16. 搜索

    1. 文本查找:Ctrl+F(find)
    2. 文本替换:Ctrl+R(replace)
    3. 项目、模块、目录搜索替换:Ctrl+Shift+R(find in path)
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8WTe4non-1623427371990)(E:\4_StudyVideo\picture\2021-05-18_010449.png)]
    4. 类搜索:Ctrl+N(go to class)
    5. 文件搜索:Ctrl+Shift+N(go to file)
  17. 最近打开、使用过的文件:Ctrl + E

  18. 重命名当前类(需要先选中类):Shift+F6

  19. Ctrl+w:选中当前选择的整个单词,多次点击可以递进式选择

  20. 局部隐藏代码:Alt+Ctrl+T+C

6、IDEA与服务器

6.1 在IDEA的当前项目中添加服务器(Tomcat)

点击Edit Configuration,点击左上方的+号,可以创建一个local的Tomcat服务器()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VhzitUwj-1623427371991)(E:\4_StudyVideo\picture\2021-06-02_175022.png)]

6.2 将项目部署到Tomcat服务器中

点击Edit Configuration,点击Deployment选项卡,点击右方的+号,再点击artifact来向服务器部署一个项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Uf7LL0vp-1623427371992)(E:\4_StudyVideo\picture\2021-06-02_175438.png)]

然后进入当前项目的选择界面,如下,可以看到有两种部署的方式,一种是war,一种是war exploded

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cIFl8AED-1623427371993)(E:\4_StudyVideo\picture\2021-06-02_175702.png)]

选中项目部署后,可以看到下方有一个Application context,它表明了当前工程的访问路径,我们通过ip:port/Application context就可以访问到部署的项目(我们以项目的名字作为Application context的值)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z6edSmDx-1623427371993)(E:\4_StudyVideo\picture\2021-06-02_205025.png)]

6.2 配置Tomcat服务器的相关属性
  • 原因:一个项目应该对应一个Tomcat服务器,通常我们会改动Tomcat服务器的名称,和当前项目的名称一致
  1. 点击Tomcat图片组合框,选择Edit Configurations…

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eVgTkuP5-1623427371994)(E:\4_StudyVideo\picture\2021-05-14_203344.png)]

  2. 部署服务器路径(当有访问到Tomcat服务器时,ip:port/后的工程与4所填写一致,则Tomcat会自动索引到当前项目中,所以这里我们应该填写我们的项目名。部署了项目名之后,就可以进行访问了)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ve5FAIj6-1623427371994)(E:\4_StudyVideo\picture\2021-05-14_203801.png)]

  3. 如果url是http://localhost:8080/项目名,则默认匹配的路径为项目名/web文件夹web.xml(创建JavaEE项目时,没有自动生成.xml文件)

    • 进入项目结构对话框(Project Structure),在Deployment Descriptors中添加文件

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-275lhPJI-1623427371994)(E:\4_StudyVideo\picture\2021-05-14_225350.png)]

    • 在点击加号产生的对话框中,主要要添加一个web\的路径

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rYJkhYBe-1623427371996)(E:\4_StudyVideo\picture\2021-05-14_225555.png)]

7、IDEA与调试

1. 必须知道的要点
  • 调试需要满足的前提是:断点+调试模式运行(调试模式需要点击小虫图标来启动)
2. 调试的图标

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c2MeudOM-1623427371996)(E:\4_StudyVideo\picture\2021-05-14_210101.png)]

  1. Step Over:单步执行
    Step Into:单步步入
    Step Force Into:强制单步步入(一些系统函数使用单步步入没有效果,便可以使用该按钮强制步入)
    Step Out:调出当前执行的方法
    Run To Cursor:执行到光标所在位置
  2. Resume Program:恢复程序的执行,直到遇到下一个断点
    View BreakPoints:浏览和管理所有的断点
    Mute BreakPoints:沉默所有的断点,也就是让所有断点失效,但是并不是取消
  3. 方法的调用窗口,下面的方法调用上面的方法
  4. 变量窗口,可以看到当前方法里所有的可见变量

8、IDEA与测试

  • 自动生成测试代码:在接口上按住快捷键Ctrl+Shift+T,弹出Create Test对话框

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PM692tpb-1623427371996)(E:\4_StudyVideo\picture\2021-05-18_135601.png)]

9、IDEA与jar包

1. 将jar包直接添加到当前工程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nPKKXnGc-1623427371996)(E:\4_StudyVideo\picture\2021-05-14_212634.png)]

2. 自定义类库添加jar包
  1. 打开项目结构对话框
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r0rzJSJV-1623427371997)(E:\4_StudyVideo\picture\2021-05-14_212844.png)]
  2. 在Libraries中添加自定义类库(可以设置类库的名称、以及类库中包含的jar包)
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zxkr4Sie-1623427371997)(E:\4_StudyVideo\picture\2021-05-14_213208.png)]
  3. 为模块添加自定义类库
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TwnSv9hI-1623427371998)(E:\4_StudyVideo\picture\2021-05-14_213530.png)]
3. 为当前类库添加新的jar包

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KM4kg4Ib-1623427371998)(E:\4_StudyVideo\picture\2021-05-14_214039.png)]

10、IDEA与插件

  • 如何找到安装的插件的配置界面(Setting-Other Setting)

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bXfyBwU4-1623427371999)(E:\4_StudyVideo\picture\2021-06-03_043043.png)]

10.1 Translation

一款嵌入在IDEA中的翻译插件,可以帮助我们对一些英文进行翻译。也可以对一些中文进行命名。快捷键Ctrl+Shift+Y:立即进行翻译(先选中需要翻译的单词)。Ctrl+Shift+S:表示切换翻译源。

10.2 Ace Jump

一款可以代替鼠标的软件,按下Ctrl+;进入ace模式,再按任意一个想要的字符,插件就会给屏幕中出现这个字符的所有位置打上标签。按Enter键是跳转到下一个标签,按Shift+Enter键是跳转到上一个标签

10.3 Alibaba Java Coding Guidelines

代码规范检查插件,我们只需要来我们的项目,类上右键-编码规约扫描(Ctrl+Alt+Shift+J),就可以获取是否满足代码规约要求,如果有不满足的,会在左下方Inspection Results进行输出(双击可以定位)。

10.4 String Manipulation

一个字符串的插件,暂时还不会使用

10.5 Key Promoter

一个提示快捷键的插件,当我们去通过鼠标点击一些操作按钮时,该插件会提示该操作的快捷键是什么

10.6 CodeGlance

快速定位代码的插件,就是右侧的小地图

10.7 Gsonformat

一款根据JSON的文本信息,快速生成javabean实体类的插件。使用是首先新建一个Javabean,不需要写内部的代码,然后,把光标移动到javabean中,按下Alt+S,把Json文本信息粘贴进去,点击OK就可以直接生成

10.8 Generate AllSetter

一款可以快速生成一个类对象的所有xxxSet()方法调用的插件。用于我们new一个对象的时候,想要对这个对象的所有属性进行set赋值,就可以使用该插件的功能。在对象上按Alt+Enter就可以给出提示

10.9 Codota

一款可以查询API使用示例的插件,我们可以通过此插件来查询我们想要查找的某个api的用法,节约查阅资料的时间。用法是选中要查询的api方法,右键-选择Get relevant example(Ctrl+Shift+O)

10.10 auto filling java call arguments

一个可以自动填充参数的插件,当我们使用构造函数,或者调用某个函数时,可以把光标放置在()括号中,按Alt+Enter,选择auto filling all parameters

11、IDEA与Maven

11.1 IDEA中整合Maven
  1. 在IDEA中设置Maven的属性

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fekjWkp6-1623427372000)(E:\4_StudyVideo\picture\2021-05-27_035242.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7JyrAftr-1623427372000)(E:\4_StudyVideo\picture\2021-05-27_040127.png)]

  2. 上面的设置只是针对当前的工程,如果想默认就使用这样的设置,需要在File-Other Settings-Default Settings中再进行一次设置

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mPtgyAwc-1623427372000)(E:\4_StudyVideo\picture\2021-05-27_040815.png)]

11.2 通过IDEA创建Maven管理的项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BxUIpaWT-1623427372001)(E:\4_StudyVideo\picture\2021-05-27_042103.png)]

11.3 如果IDEA创建的项目没有图标怎么办?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2YEbP0OH-1623427372001)(E:\4_StudyVideo\picture\2021-05-27_043153.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sYB394Qo-1623427372001)(E:\4_StudyVideo\picture\2021-05-27_043229.png)]

11.4 在IDEA中快速测试代码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rXxuVyNA-1623427372002)(E:\4_StudyVideo\picture\2021-05-27_044215.png)]

11.5 在IDEA中进行Maven的插件操作

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gUmCCXjW-1623427372002)(E:\4_StudyVideo\picture\2021-05-27_045248.png)]

11.6 如果修改了pom.xml文件,如何使其快速生效
  • 方法一:通过pom.xml文件右键的方式来Reimport,这种方式是刷新一个项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PNSfndE3-1623427372003)(E:\4_StudyVideo\picture\2021-05-27_045545.png)]

  • 方式二:在maven的工具栏上,点击刷新的图标,这样刷新是刷新所有的maven项目

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BeLVfVS3-1623427372003)(E:\4_StudyVideo\picture\2021-05-27_144317.png)]

11.7 在IDEA中导入一个maven项目
  1. 打开Project structure,选择Modules,点击左上角的绿色加号,点击Import Module

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zN1yhYlE-1623427372004)(E:\4_StudyVideo\picture\2021-05-27_145320.png)]

  2. 选择模块文件夹的位置,点击OK

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9KOwYynt-1623427372004)(E:\4_StudyVideo\picture\2021-05-27_145552.png)]

  3. 选择导入的模块的类型,点击OK,之后一直点击next即可

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L6iO7hpt-1623427372005)(E:\4_StudyVideo\picture\2021-05-27_145652.png)]

11.8 如何修改Maven默认仓库的位置

打开maven路径下的conf/settings.xml,在第55行可以看到一个localRepository的标签,在其中指明仓库的位置即可

11.9 通过maven来创建一个web项目要注意的点
  • 在main文件夹下建立java文件、resources文件夹
  • 在main文件夹平级创建一个test文件夹
  • 在test文件夹下创建java文件夹 和resources文件夹

12、IDEA与MyBatis

12.1 在IDEA中使用MyBatis的步骤
  1. 在pom.xml文件中,添加相关的依赖

    org.mybatis
    mybatis
    3.5.1
    org.mybatis
    mybatis-spring
    1.3.1
    com.alibaba
    druid
    1.1.12
    mysql
    mysql-connector-java
    8.0.25
  2. 在resources中创建mybatis.xml作为主配置文件

  3. 编写XxxDao接口类和XxxDao.xml的mapper文件

  4. 在IOC的配置文件(applicationContext.xml)中,进行属性的配置

13、IDEA与Spring

13.1 IDEA创建xml文件的选项中,没有Spring Config

因为没有导入spring-context的依赖,我们需要在maven的pom.xml文件中,添加spring-context的依赖即可

13.2 在IDEA中使用Soring的步骤
  1. 在pom.xml中,添加相关的依赖

    org.springframework
    spring-context
    5.3.7
    org.springframework
    spring-aspects
    5.3.7
  2. 在resources目录下的applicationContext文件中,利用标签进行bean对象的创建(IOC)

    @Component("student")public class Student {
    ......}
  3. 在resources目录下的applicationContext文件中,开启切面自动代理(AOP);创建业务逻辑类,我们可以创建一个切面类,在类中使用切入点表达式来进行aop操作

    @Aspectpublic class MyAspect {
    @Pointcut(value = "execution(* *..ba07.*.*(..))") ...... @Before(value = "myPointCut()") ...... @After(value = "myPointCut()") ...... @AfterReturning(value = "myPointCut()") ...... @AfterThrowing(value = "myPointCut()") ......}

14、IDEA与GitHub

14.1 为IDEA添加一个Git账户

进入Settings-Version Control-GitHub-Add account

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AHZ6QYEU-1623427372006)(E:\4_StudyVideo\picture\2021-06-08_141315.png)]

  • 在登录时,有可能会遇到账号无法登录的问题,需要在Git中创建一个Token,即令牌。在Git的网站上, 进入Setting-Development settings-Generate new token即可(勾选repo、gist)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q00crfTg-1623427372006)(E:\4_StudyVideo\picture\2021-06-08_170555.png)]

14.2 在IDEA中为当前项目配置本地Git仓库

单击VCS(Version Control System)菜单,点击Import into Version Control-Create Git Repository。这一步操作就是创建一个本地仓库,是IDEA帮我们创建的,可以在我们指定的目录中找到.git目录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-187DUGvY-1623427372006)(E:\4_StudyVideo\picture\2021-06-08_171304.png)]

14.3 将当前项目提交到暂存区,从暂存区上传到本地仓库,从本地仓库上传到远程仓库

在模块上点击右键-Git-Add即可提交到暂存区

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-59gLHNVF-1623427372006)(E:\4_StudyVideo\picture\2021-06-08_171741.png)]

提交到暂存区后,就可以点击Commit Directory提交到本地仓库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l2zCFqHD-1623427372007)(E:\4_StudyVideo\picture\2021-06-08_172338.png)]

当本地仓库有代码了之后,就可以点击目录下的Repository-Push,然后输入远程仓库的url,就可以完成提交

14.4 使用IDEA从云端clone项目

点击File-New-Project from Version Control…

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W0sHWo1q-1623427372007)(E:\4_StudyVideo\picture\2021-06-08_174955.png)]

在弹出的对话框中继续选择,最后选择Clone即可开始

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2KQYLyK5-1623427372008)(E:\4_StudyVideo\picture\2021-06-08_175239.png)]

14、IDEA中发生的错误以及解决方法

14.1 MyBatis中,进行测试方法报告,抛出异常

org.apache.ibatis.binding.BindingException。(这个错误从提示来看不明显,其原因是xxxDao.xml中配置写错了)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8GJ5b7uj-1623427372008)(E:\4_StudyVideo\picture\2021-05-28_134924.png)]

14.2 在服务器返回ajax响应的数据时,抛出异常(注意)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uE5RnjsL-1623427372009)(E:\4_StudyVideo\picture\2021-06-05_061034.png)]

可以看出,错误的原因是返回的ArrayList类型的数据,没有找到合适的转换器对象来讲其转换为json格式的数据。可以看我们的代码,所有的依赖,注解驱动等都添加了,为什么失败呢?原因就是springmvc中的配置文件导入的名称空间错了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CKg7e3Fj-1623427372009)(E:\4_StudyVideo\picture\2021-06-05_061348.png)]

可以看到,这里有很多同名的annotation-driven,就是因为导入包导错了,导入成了alibaba的包,正确的包应该是http://www.springframework.org/schema/mvc才是正确的

14.3 在启动服务器时抛出错误java.rmi.server.ExportException: Port already in use: 1099;…

这是应为某个应用程序已经占用了tomcat容器的指定端口,我们需要通过cmd- netstat -ano 后出现列表,在列表中找到指定冲突的端口的进程id,在任务管理器中关闭此进程即可解决

14.4 Mybatis中,执行sqlSessionFactory.openSession()时,抛出NullPointerException异常

找了一会儿,发现错误是在Mybatis的配置文件中出错了,

14.5 手写动态代理invoke方法后,调用Proxy.getProxy()返回null对象
public class TransactionInvocationHandler implements InvocationHandler {
private Object target; public TransactionInvocationHandler(Object target) {
this.target = target; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
SqlSession sqlSession = null; Object result = null; try {
sqlSession = SqlSessionUtil.getSqlSession(); result = method.invoke(args); sqlSession.commit(); } catch (Exception e) {
sqlSession.rollback(); e.printStackTrace(); } finally {
SqlSessionUtil.closeSqlSession(sqlSession); } return result; } public Object getProxy() {
Object proxy = Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this); return proxy; }}
14.6 使用Mybatis框架时,出现org.apache.ibatis.binding.BindingException异常

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jRcelG5W-1623427372010)(E:\4_StudyVideo\picture\2021-06-10_060428.png)]

15、常见问题解决思路

15.1 set\getAttribute、set\getParameter有什么区别?
  • setParameter()获取的是客户端设置的数据(一般是客户端提交表单等操作);getParameter永远返回字符串
  • xxxAttribute()获取的是服务器设置的数据(一般用于一次请求多次跳转之间共享一些数据)。getAttribute()返回值是任意类型
15.2 Servlet有哪些域对象?他们分别是什么类型?它们的声明周期如何?
对象名称 对象类型 创建时机 销毁时机 生命周期
request HttpServletRequest 客户端向服务器发送一次请求,服务器就创建一个request对象 服务器对请求做出响应后就会销毁request对象 在一次请求中有效
session HttpSession 当服务器为某一个客户端的请求第一次调用getSession()时,一个Session被创建 1.session过期,默认30分钟;
2.手动调用session.invalidate();
在一次会话中有效。在web中,一次会话是指浏览器的不关闭
application ServletContext 服务器启动时,服务器为每个WEB应用创建一个属于该web项目的对象的ServletContext类. 服务器关闭或者项目从服务器中移除的时候. 与服务器具有相同的生命周期
对象名称 对象类型 创建时机 销毁时机 生命周期
pageContext PageContextImpl 当进入当前JSP页面 当离开当前JSP页面 当前JSP页面范围内有效(如果使用请求跳转到其他页面,pageContext对象中存储的数据将无效)
15.3 什么是过滤器?什么是监听器?什么是拦截器?SSM整合开发中如何配置web.xml?
xx器 功能 应用场景 使用步骤
过滤器 用于拦截请求,当请求满足.xml文件中配置好的被拦截要求时,就可以拦截到请求 设置request、response的参数,如过滤字符编码 1.Filter是一个接口,它是由Java提供的。如果我们要手动实现一个过滤器,需要先定义出该接口实现类。
2.在web.xml中去配置过滤器,通过filter标签来配置过滤器,通过filter-mapping来配置在哪些地方应用过滤器
监听器 他可以监听服务器中ServletContext对象的创建和销毁。
做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等
使用监听器创建Spring容器对象 1.ServletContextListener是一个接口,它是由Java提供的。如果我们要手动实现一个监听器,需要先定义出该接口实现类。
2.在web.xml中去配置监听器,通过listener标签来配置监听器。配置好后,当ServletContext对象被创建和销毁时,会自动调用我们实现的方法
拦截器 拦截器是属于SpringMVC框架中的一个组件,当用户的请求访问到中央调度器时,将由拦截器所拦截,进而可以验证请求参数,能够截断请求 拦截器有AOP的思想,它常被用于做各种验证,一个项目中可以有很多拦截器 1.HandlerInterceptor是一个接口,我们的类首先要实现此接口(接口有三个重要的方法,他们的default的,可以按需要来重写三个方法)
2.在SpringMVC的配置文件中,使用mvc:interceptors标签来声明拦截器,通过mvc:mapping指定要拦截的请求地址,通过bean指定要处理拦截的拦截器
myweb
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:conf/dispatcherServlet.xml
1
myweb
*.do
contextConfigLocation
classpath:conf/applicationContext.xml
org.springframework.web.context.ContextLoaderListener
characterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
forceRequestEncoding
true
forceResponseEncoding
true
characterEncodingFilter
/*
15.4 SpringMVC、Spring、Mybatis的配置文件分别是怎样的?
  • SpringMVC的配置文件(dispatcherServlet.xml)
  • Spring的配置文件(applicationContext.xml)
  • Mybatis的配置文件
15.4 Spring中@Autowired和@Resource,对于属性值的自动注入有什么区别
自动注入属性的方式 特点 注意
@Autowired 需要在引用属性上使用注解@Autowired,该注解默认使用按类型自动装配 Bean 的方式 因为是按类型来自动的匹配,难免有时候会有相同类型的多个类对象的问题,可以与@Qualifier注解的搭配使用
@Resource @Resource 注解若不带任何参数,采用默认按名称的方式注入,如果按名称不能注入, 则会按照类型进行 Bean 的匹配注入 可以通过name属性来指定匹配的名称
15.5 HTTP协议中的重要key含义
response响应头 含义 举例 设置方式
Content-Type 代表服务器响应数据的内容的类型 text/html;charset=UTF-8 1.通过设置jsp的page标签中的contentType
2.通过response.setContentType来设置
15.6 JSP页面中的常用指令
标签 功能 代码
page page指令可以修改jsp页面中一些重要的属性、行为 <%@ page contentType=“text/html;charset=UTF-8” language=“java” %>
include include指令可以指定当前JSP页面要静态包含的部分JSP页面,避免重复编写代码 <%@ include file="/include/footer.jsp"%>
jsp:forward jsp:forward指令可以通过标签的方式来使当前页面进行跳转 <jsp:forward page="/scope2.jsp"></jsp:forward>
15.7 什么是EL表达式?它的作用是什么?

全称是Expression Language,主要是替代jsp页面中的表达式脚本在jsp页面中进行数据输出,对它的使用主要是获取域对象中的数据。

  • EL表达式中如果直接写对象的名称,此时默认搜索域中数据的顺序是:pageContext->request->session->application(按照从小到大的顺序搜索),只要在某个域对象中找到了指定的key,就会得到这个key所对应的value。
  • 如果想要指定在哪个域中获取指定key的value,我们可以使用EL表达式中定义的4个隐含对象,我们是pageScope、requestScope、sessionScope、applicationScope,它们的类型都是Map<String,Object>类型,通过.get(key…)就可以得到指定域中的key所对应的value
  • 如果想获得<%…%>的JSP代码脚本中定义的局部变量,以目前的知识,只能通过JSP的表达式语句获得,即<%=…%>的方式来获得
EL表达式的11个隐含对象 数据类型 功能
pageContext PageContextImpl 获取JSP中的九大内置对象
pageScope Map<String,Object> 获取 pageContext 域中的数据
requestScope Map<String,Object> 获取 Request 域中的数据
sessionScope Map<String,Object> 获取 Session 域中的数据
applicationScope Map<String,Object> 获取 ServletContext 域中的数据
15.8 JQuery
1. JQuery中存取值的理解
方式 类比原生JS 解释
val(值)、val() document.getElementById(“xxx”).value value是代表标签元素中的属性的value值
html(值)、html() document.getElementById(“xxx”).innerHTML innerHTML代表标签元素中的内容,也就是标签对之间的内容
text(值)、text() document.getElementById(“xxx”).innerText innerText和innerHTML很类似,但是不同的是innerText只针对内容本身,而innerHTML还可以动态的编写标签元素
2.使用JQuery寻找标签元素的方法
选择器 语法
id选择器 $("#id") 用#号+标签的id
tag选择器 $(“tag”) 直接写标签名,查找到所有查找标签的所有元素
class选择器 $(".class") 用.号+标签的class
3.Ajax的几种表现形式
方式 解释
$.ajax(…) 基于jquery的ajax的最标准的表现形式,该形式功能齐全,使用方便,在未来的实际项目开发中,应用的最广泛
$.get(…)/post(…) 该形式是基于上述$.ajax的简写形式,使用更加方便。但是在保留了核心ajax功能的同时,也去除了一些扩展功能。如果要使用额外的扩展功能,需要在ajax体外写额外代码。虽然功能不全,但是使用非常方便,在实际项目开发中使用的也很普遍
$.getJSON() 该形式是专门针对于json数据解析的形式,该形式在市场上问世较晚,所以没有上述两种形式使用的多
4.$.ajax(…)中的重要参数
参数 功能
url 代表当前ajax要请求的后台servlet/Controller的url地址
data 要提交的数据,可以使用json的形式,也可以使用一般的形式
dataType 表名后台响应回数据的格式,用json来表示后台响应json数据,用text来表示后台响应文本数据
type 表示请求后台的方式,可以是get或post
async 表示当前ajax是否异步执行,默认是true
success 回调函数,当请求完成后,会将数据传递给data参数
15.9 HTTP协议
1. 项目中什么时候用Get?什么时候用Post?
  • Get字面意思是取,拿,得到,在实际项目开发中,核心业务是以 查询 为目的,我们都是发出get请求

  • Post字面意思是投递,在实际项目开发中,核心业务是以 添加、修改、删除 为目的,我们都是发出Post请求

2. 前端向后端传值的方式
  • 通过url传参
  • 通过form表单传参
  • 通过ajax以json格式传参
15.10.Json
1. Json格式的意义?

在网络传输中,后端给前端专传输数据,为了让开发更加的便捷,后端希望是直接传输domain,bean等实体类(实体类就是封装属性的一个容器,这样做是为了简化一个对象里面有很多属性的问题,管理一个对象比管理一堆属性要简单很多),但是我们直接把实体类传给前端,前端是用不了的,我们需要使用一个媒介,先把java对象转换为json格式,然后前端解析json格式,也就得到了转换的对象。

15.11 SQL
1. 在实际项目开发中,表的主键是采用什么形式呢?

采用的是UUID的方式,而不是采用int类型,并且使用auto_increment这样的自动递增。因为SQL内部,当添加一条记录时,它会先计算以下当前最大的id是多少,然后对其进行+1。当数据量特别大的时候,比如千万级别,这种方式是效率十分低下的。所以就应该使用UUID来当主键。

15.12 Mybatis
1. 如何搭建Mybatis环境
  • Mybatis有两类重要的配置文件,一类是主配置文件,一类是与每一个DAO(数据库的每一个表)相关的配置文件

    • Mybatis主配置文件(完成事务和数据源(数据库连接池)的配置,同时要声明映射xml文件,Mybatis才知道哪些配置文件是映射文件)

    • MyBatis映射文件,与每个DAO相关的配置文件(要声明当前配置文件的名称空间,一般以DAO类名命名,Mybatis通过namespace.id就可以找到任意一个sql语句)

      select id,name,age,address from Student
      • 关于parameterType属性
      • 关于resultType属性
      • 关于resultMap标签、resultMap属性
      • 关于where标签、if标签、foreach标签
      • 关于foreach标签
      • 关于sql标签
  • 对Mybatis的使用,其核心是SqlSession对象,该对象可以通过SqlSessionFactoryBuilder->SqlSessionFactory->调用openSession()来得到,通过该对象,我们就可以根据namespace.id来找到指定的sql语句

    String resource = "mybatis-config.xml";InputStream inputStream = null;try {
    inputStream = Resources.getResourceAsStream(resource);} catch (IOException e) {
    e.printStackTrace();}SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession();Student student = sqlSession.
    selectOne("testNamespace.selectStudentById", "A0002");
3. 动态代理用在MVC中的哪一层?

用在service业务层。因为Controller层用于处理用户请求,它无需动态代理。动态代理常被用于事务的管理,在一个事务中,可能会多次调用DAO持久层,所以,我们需要在service中使用动态代理,从而进行事务的提交。

  • 手写Spring中AOP的实现过程(使用JDK的InvocationHandler动态代理类来完成)

    public class TransactionInvocationHandler implements InvocationHandler {
    private Object target; public TransactionInvocationHandler(Object target) {
    this.target = target; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    SqlSession sqlSession = null; Object result = null; try {
    sqlSession = SqlSessionUtil.getSqlSession(); result = method.invoke(args); sqlSession.commit(); } catch (Exception e) {
    sqlSession.rollback(); e.printStackTrace(); } finally {
    SqlSessionUtil.closeSqlSession(sqlSession); } return result; } public Object getProxy() {
    return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this); }}
4. 为什么持久层和业务层都需要接口类呢?

因为这两个类都是需要动态代理以增强功能,比如业务层需要提交事务,持久层每一个方法都需要先拿到sqlSession对象,最后要返回出结果(可以使用动态代理来帮助完成繁琐的操作,让我们只写SQL语句)。如果有接口类,那么他们的上层(对于持久层来说上层就是业务层,对于业务层来说,上层就是控制层)在使用他们时,就可以传入一个动态代理来增强它们,而不是传入他们的实现类对象。所以,这就是需要为持久层和业务层定义接口类的一大原因。经过Mybatis的处理,我们创建的是interface,实际使用的确实增强的代理类

5. 如何理解动态代理是如何运行起来的

在Service中,其实现类是不具有事务功能的,从单一职责的方向来思考,事务是DAO中的概念,为了方便在Service中具有事务功能,我们可以使用动态代理。动态代理(用JDK的方式实现)是在程序的运行中,Java为我们编译出代理类的.class文件,然后装载到虚拟机中,最后通过反射来生成代理类对象

6.mybatis如何使用模糊查询
7. mybatis中,当表列名和domain类字段名不一致时如何处理

产生错误的原因是查询到的列名在domain中找不到字段名与之对应,所以,mybatis就不会对字段名赋值。

  • 方式一:在SQL语句中为查询的列名起别名
  • 方式二:使用resultMap标签和resultMap属性来解决
8.什么是动态SQL

动态SQL方便处理带各种查询条件的情况,当为SQL语句设置查询条件是,比如name,gender,age…当他们交错起来查询,我们要写的SQL语句呈指数的形式增长。所以使用了mybatis的动态SQL,就可以很好的解决这种情况。mybatis的自动的根据我们参数有多少个,来动态的,有规律的生成一个临时的SQL语句提供给我们来查询。

动态SQL中,常用的有where标签和foreach标签,where用来处理where子句有很多and、or的情况,foreach用来处理in中很多属性的情况

9.什么是SQL片段

SQL片段mybatis提供了的,为了解决mapper映射文件中,大量的重复的SQL语句片段,如select * from student…这样的,可以看到在每一个SQL语句中,都有这样的语句。

但是在企业的开发中,认为SQL片段虽然有好处,但是也有坏处,坏处就是导致代码的可读性变得很差,所以一般企业中都不会使用这个SQL片段,偶尔用用就是来子查询中使用

10.使用mybatis进行多表联查

对于多表联查,我们有两种处理方式,一种是使用Map来装查询的结果,一种是使用VO对象来装查询的结果。从使用上来说,Map无需创建类,但是写起来不方便,而VO需要创建类,但使用起来方便。所以,主要看使用频率,如果频率高,就可以选择VO,反之,就用Map,显得更加的轻量级

转载地址:http://wyrgn.baihongyu.com/

你可能感兴趣的文章
php 编码及加密
查看>>
专注核心
查看>>
职业规划
查看>>
高效会议
查看>>
不一样的产品思维
查看>>
写给PM新人的一些建议
查看>>
sublime xdebug 配置
查看>>
sublime preference配置
查看>>
sublime安装与配置
查看>>
HTML5认知
查看>>
Ubuntu nginx 配置https
查看>>
Thrift 操作 Hbase
查看>>
前端开发概要
查看>>
静态方法应用
查看>>
学习资料
查看>>
技术 +市场必须两手抓
查看>>
服务器抓包
查看>>
vim应用
查看>>
SOA性能管理现状
查看>>
Linux服务器常用命令
查看>>