文章目录
前言
一、IDEA 开发工具知识分享
1.1 IDEA功能介绍
IntelliJ IDEA是一款非常强大的Java集成开发环境(IDE),它提供了丰富的功能和插件,可以帮助开发者提高开发效率,其具有以下功能特点:
-
智能代码补全:IDEA可以根据代码的上下文自动补全代码,提高编码效率。
-
代码生成和重构:IDEA可以自动生成getter、setter、构造函数等代码,同时支持一键重构,方便修改代码结构。
-
代码分析:IDEA可以对代码进行静态分析,帮助开发者发现潜在的问题和错误。
-
调试功能:IDEA内置了强大的调试器,支持断点、条件断点、表达式求值等功能。
-
版本控制集成:IDEA支持Git、SVN等版本控制工具,方便团队协作。
-
数据库工具:IDEA内置了数据库工具,可以直接连接数据库进行查询和编辑。
-
插件系统:IDEA支持丰富的插件,可以根据需要扩展功能。
-
多语言支持:除了Java,IDEA还支持Kotlin、Scala、Groovy等JVM语言,以及JavaScript、HTML、CSS等前端语言。
总之,IntelliJ IDEA是一款非常强大的Java开发工具,可以帮助开发者提高编码效率,保证代码质量。
1.2 常见插件安装
- 金蝶云·苍穹开发助手,是一个IDEA插件,用于辅助开发人员搭建开发环境、编写代码、搜索文档等。(IDEA 2021.3.3-2023.2.x 版本)
- JRebel 是一个Java虚拟机插件,它使得Java类可以在不重启应用服务器的情况下立即重新加载到正在运行的Java应用中。
- Lombok 插件可以帮助开发者减少冗余的代码,例如 getter、setter、构造函数等。安装 Lombok 插件后,只需在类上添加相应的注解,插件会自动生成相应的代码。
- MyBatisX插件是一款用于提高MyBatis开发效率的插件。它提供了代码生成、SQL预览、自动补全等功能,帮助开发者更高效地进行MyBatis开发。
- Rainbow Brackets 插件可以为不同类型的括号添加不同的颜色,帮助开发者更容易地识别括号。
下载安装完成后重启IDEA
1.3 快捷键设置
- 回到上一步 Ctrl + Alt+ <-(左箭头)
- 回到下一步 Ctrl + Alt + ->(右箭头)
- 返回方法类型 Ctrl + Alt + V
- 代码错误提示 Alt + Enter
- 重复当前行 Ctrl + D
- 删除当前行 Ctrl + Y
- 进入方法 Ctrl + 右击
- 查找 Ctrl + F
- 替换 Ctrl + R
- 全局查找 Ctrl + Shift + F
- 全局替换 Ctrl + Shift + R
- 代码格式化 Ctrl + Alt + L
- 方法上注释 /** + Enter
- 选中要注释/取消注释的代码块 Ctrl + /
- 快速生成main方法 psvm
- 快速输出打印 sout
1.4 代码调试
IDEA提供了强大的代码调试功能,可以帮助开发者定位和解决问题。以下是一些常用的调试操作:
- 设置断点:在代码行号区域单击鼠标左键,或者使用快捷键Ctrl + Shift + F8。
- 开始调试:在编辑器中右键单击,选择"Debug ‘项目名’",或者使用快捷键Shift + F9。
- 单步执行:在调试工具栏中,点击"Step Over"按钮,或者使用快捷键F8。
- 跳入方法:在调试工具栏中,点击"Step Into"按钮,或者使用快捷键F7。
- 跳出方法:在调试工具栏中,点击"Step Out"按钮,或者使用快捷键Shift + F8。
- 查看变量值:在调试窗口的"Variables"面板中,可以查看当前作用域内的变量及其值。
- 条件断点:右键单击断点图标,选择"Edit Breakpoint",在弹出的对话框中设置条件。
- 计算表达式:在调试窗口的"Expression"面板中,输入表达式并按回车,可以查看表达式的值。
二、Maven项目依赖管理介绍
2.1 Maven 介绍
Maven是一个项目管理和构建自动化工具,主要用于Java项目。它可以帮助开发者管理项目的构建、报告和文档等。Maven的核心功能是通过一个pom.xml文件来管理项目的依赖、插件和构建配置。
2.2 Maven 安装及配置
官方下载地址:https://archive.apache.org/dist/maven/maven-3/
- 下载Maven安装包(
高版本JDK,尽量选择高版本Maven
)
-
将下载好的压缩包,解压至要安装的目录下,即可完成安装(建议不要放到C盘)
-
配置环境变量
在系统变量中点击新建,变量名为MAVEN_HOME,变量值填写你maven的安装路径
在系统变量中找到Path并双击,点击新建,添加%MAVEN_HOME%\bin
-
出现如下信息说明安装配置完成
2.3 Maven 功能与特性
-
安装Maven:首先需要下载并安装Maven,然后配置环境变量,将Maven的bin目录添加到PATH中。
-
创建Maven项目:使用命令mvn archetype:generate创建一个基本的Maven项目结构。
-
pom.xml文件:这是Maven的核心配置文件,用于定义项目的基本信息、依赖、插件等。
-
依赖管理:在pom.xml文件中添加依赖,Maven会自动下载和管理这些依赖。
-
构建项目:使用命令mvn clean install构建项目,Maven会根据pom.xml文件中的配置执行相应的任务。
-
常用命令:除了上述命令外,还有mvn compile(编译源代码)、mvn test(运行测试用例)等常用命令。
-
仓库:Maven使用仓库来存储和管理项目依赖的jar包。可以配置本地仓库和远程仓库。
-
插件:Maven通过插件来扩展其功能,例如编译源代码、运行测试用例等。可以在pom.xml文件中配置插件。
-
生命周期:Maven将项目的构建过程分为多个阶段,如编译、测试、打包等。这些阶段组成了Maven的生命周期。
-
继承与聚合:Maven支持项目的继承和聚合,可以方便地管理多模块项目。
-
约定优于配置:这意味着在使用Maven时,开发者需要遵循一些默认的约定,以减少配置文件的数量和复杂性。
project
├─src
│ ├─main
│ │ ├─java
│ │ │ └─com
│ │ │ └─example
│ │ │ └─myproject
│ │ │ ├─controller
│ │ │ ├─service
│ │ │ └─model
│ │ │ └─common
│ │ └─resources
│ │ └─application.xml
│ │ └─log4j2.xml
│ └─test
│ ├─java
│ │ └─com
│ │ └─example
│ │ └─myproject
│ │ └─controller
│ │ ├─service
├─pom.xml
2.4 打包测试
cmd 输入java -jar springBoot-mybatis-demo.jar 运行jar包,运行成功
三、Springboot框架介绍
Spring生态圈:https://spring.io/why-spring
介绍SpringBoot前先大致介绍一下Spring,Spring是Spring社区的基石,Spring初衷是简化开发但是由于发展到后面它与其它框架的配置变得非常繁琐,而且整合式需要清楚的知道版本依赖关系。
依赖 ->配置->代码->war包部署,丢到Tomcat容器等等。。。
基于上述问题SpringBoot由然而生,它的出现解决主要就是以上问题使开发人员进一步简化了开发。
3.1 核心特征概述
Spring Boot是一个基于Spring框架的开源项目,它可以简化Spring应用程序的创建、配置和部署。Spring Boot的主要目标是让开发者能够快速构建可立即运行的Spring应用程序,而无需进行繁琐的配置和设置。
-
自动配置:Spring Boot提供了自动配置功能,可以根据项目中的依赖关系自动配置应用程序。这意味着开发者不需要手动编写大量的配置-文件,而是可以通过添加或删除依赖来轻松调整应用程序的配置。
-
起步依赖:Spring Boot提供了许多预先定义的起步依赖,这些依赖包含了构建特定类型的应用程序所需的所有依赖项。开发者只需在项目的构建文件中添加相应的起步依赖,即可获得所需的所有库和插件。
-
嵌入式Web服务器:Spring Boot支持嵌入式Web服务器,如Tomcat、Jetty和Undertow。这使得开发者可以将其应用程序打包为独立的可执行文件,而无需单独部署到外部Web服务器上。
-
生产就绪:Spring Boot旨在构建生产就绪的应用程序。它提供了许多用于监视和管理应用程序的功能,如内置的HTTP服务器、健康检查和指标收集。
-
数据访问:Spring Boot与各种数据访问技术(如JDBC、JPA、Hibernate和MyBatis)集成,使得开发者可以轻松地在应用程序中访问数据库。
-
微服务支持:Spring Boot是构建微服务的理想选择,因为它可以轻松地与其他Spring项目(如Spring Cloud)集成,以实现服务发现、配置管理和负载均衡等功能。
-
安全性:Spring Boot支持Spring Security,可以轻松地将安全性添加到应用程序中。开发者可以使用注解和配置文件来保护应用程序的端点和资源。
-
单元测试:Spring Boot与JUnit、Mockito和Spring Test等测试框架集成,使得开发者可以轻松地编写和运行测试用例。
-
生态系统:Spring Boot拥有庞大的生态系统,提供了大量的插件、库和工具,可以帮助开发者更轻松地构建和维护应用程序。
-
社区支持:Spring Boot拥有一个活跃的社区,开发者可以在社区中找到大量的教程、文档和示例,以及获取帮助和支持。
3.2 常用注解介绍
- @RestController
- @RequestMapping
- @Autowired
- @Resource
- @Service
- @Repository
- @Configuration
- @Bean
- @Component
- @Value
上述注解都是向Spring IOC容器注册Bean组件。
3.3 自动装配原理
参考:https://blog.csdn.net/m0_49692893/article/details/123865091
四、Mybatis介绍
4.1 简介
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
ORM(Object-Relational Mapping,对象关系映射)框架是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。
在MyBatis中,映射文件是用于描述如何从数据库中获取数据并映射到Java对象中的XML文件。映射文件中包含了SQL语句和映射规则。
动态SQL是指在SQL语句中使用条件判断或者循环等控制结构,使得SQL语句可以根据不同的条件生成不同的SQL。在MyBatis中,可以使用if、choose (when, otherwise)、foreach等标签来实现动态SQL。
4.2 引入依赖
SpringBoot 与 Myybatis 整合的依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.3.0</version>
</dependency>
<!--MySQL 依赖-->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
4.3 编写配置
########## 数据库配置 #########
spring:
datasource: # 数据库配置
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://172.160.12.137:3306/test?useUnicode=true&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
username: root
password: root
hikari:
minimum-idle: 5
maximum-pool-size: 20
auto-commit: true
idle-timeout: 30000
pool-name: DatebookHikariCP
max-lifetime: 1800000
connection-timeout: 30000
connection-test-query: SELECT 1
mybatis: # mybatis配置
mapper-locations: classpath:mapper/*.xml
configuration:
mapUnderscoreToCamelCase: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
4.4 开启包扫描
@MapperScan("com.boe.cloud.vh.screen.dao")
@EnableAsync
@SpringBootApplication
@EnableScheduling
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
4.5 代码生成器
根据数据库表生成对应的实体,xml文件,dao文件。生成基础的增删改查代码,提高开发效率。
项目地址:https://gitee.com/Fh_1214/mybatis-generator.git
五、Redis介绍
5.1 Redis 简介
Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区。
5.2 Redis 优点
-
它是基于内存存储减少io操作所带来的性能开销,读写性能高读11w/s,写8.1w/s。
-
提供了丰富的数据存储结构如 字符串(string), 散列(hash), 列表(list), 集合(set), 有序集合(sorted set)与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial)索引半径查询。
-
redis底层采用单线程实现数据的IO,所以在数据算法层面并不需要考虑并发安全性问题。Redis是单线程+多路IO复用技术。多路复用是指使用一个线程来检查多个文件描述符(Socket)的就绪状态,比如调用select和poll函数,传入多个文件描述符,如果有一个文件描述符就绪,则返回,否则阻塞直到超时。得到就绪状态后进行真正的操作可以在同一个线程里执行,也可以启动线程执行(比如使用线程池)。
-
redis虽然是基于内存存储的但是它也支持两种持久化方式,避免因为服务器故障导致数据丢失的问题。
-
redis一般用来实现分布式缓存,从而降低应用程序对关系型数据库检索带来的性能影响。
-
redis应用场景:分布式锁,分布式队列,排行榜热点新闻的缓存,查找附近的人等功能。为复杂的应用提供非常方便的和成熟的解决方案。
5.3 SpringBoot整合Redis
引入Redis依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
编写配置
spring:
redis: # redis配置
host: 172.16.1.137
port: 6379
database: 0
password: abc123@cto_2020
ssl: false
lettuce:
pool:
max-active: 8
max-idle: 8
min-idle: 0
max-wait: 1000ms
5.3 Redis常用数据类型
链接地址:Redis常见知识总结
六、代码案例
@RestController
@RequestMapping("/test")
public class TestController {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Autowired
private AccountService accountService;
/**
* 根据Id查询账号
* 若数据存在redis则返回,不存在就查询数据库,若数据库不存在则报错,存在则写入缓存后返会数据
*
* @return
*/
@GetMapping("/findByAccountId")
public Result<AccountDTO> findByAccountId(Integer accountId) {
String accountKey = RedisPrefix.ACCOUNT + accountId;
String accountStr = stringRedisTemplate.opsForValue().get(accountKey);
if (StringUtil.isNotEmpty(accountStr)) {
AccountDTO accountDTO = JSON.parseObject(accountStr, AccountDTO.class);
return Result.success(accountDTO);
}
TAccount account = accountService.findById(accountId);
AssertUtil.isTrue(account != null && YNEnum.N.getCode().byteValue() == account.getIsDelete(), ResultCodes.ACCOUNT_NOT_FOUND);
AccountDTO accountDTO = AccountConverter.convert2DTO(account);
// 写入缓存
stringRedisTemplate.opsForValue().set(accountKey, JSON.toJSONString(accountDTO), 300, TimeUnit.SECONDS);
return Result.success(accountDTO);
}
}
/**
* 根据id查询账号
*
* @param id
* @return
*/
public TAccount findById(Integer id) {
if (id == null) {
return null;
}
return tAccountDAO.selectByPrimaryKey(id);
}