项目开发操作笔记
项目操作
SpringBoot 初始化:
- Spring Initializr 一般 jdk 选 8,版本选 3.0 以下的(报错的话重新初始化)
- 常见依赖:SpringWeb、SpringConfigurationProcessor、SpringBootDevTools、mysqlDriver、junit、mybatisFramework、Lombok
- 如果是直接下载的整个项目文件的pom.xml版本报错,先右键重新加载成maven文件
- application.yml不是小绿叶而是红色的:
- 找到maven重新刷一遍
- 还不行的话看这个:[IDEA创建application.yml不是小绿叶图标解决办法](https://blog.csdn.net/weixin_43085797/article/details/106333243#:~:text=1、File >>Project Structure 将项目关联到spring中 2、File >>Project,Structure 将项目resources文件变成配置文件夹 选中java文件夹,点击Sources,将java文件夹变成下图所示,这样才能在java这个文件夹里面新建java.class 3、添加application.yml 4、添加启动类 在启动类上加%40SpringBootApplication注解提升没有这个包,点击下载 完美解决,application.yml变成绿叶了)
常量可以专门放在一个包里面(比如说是 controller、service 都要用的那种)
导包相关操作
http://mvnrepository.com/
这里面找选择风险点少的,人数多的
复制依赖进 pom.xml,再刷新就行【有时需要注意各个包之间的版本关系】
Test 类增加断言:
Assertions.assertEquals(预期值, 实际值);
封装全局异常处理逻辑关系:
ErrorCode
定义错误码 –>ResultUtil
利用BaseResponce
生成响应对象 –>BusinessException
用于标识业务异常 –>GlobalExceptionHandler
用于捕获和处理这些异常并返回适当的响应throw new RuntimeException("xxx");
和return Result.fail(xxx);
的区别抛出异常会被全局异常处理器捕获,返回fail不会
用Object数据类型获取session属性值
Object是 Java 中的一个通用数据类型,是所有类的超类。因此,
Object
可以用来表示任何 Java 对象。【很牛的功能】session.getAttribute("xxx")
方法返回的值是一个通用的Object
类型,因为会话可以存储各种不同类型的数据如果知道是具体的数据类型也可以进行转换
String code = (String) cacheCode; // 将 Object 强制转换为 String
8. 自动装箱和自动拆箱
1. 自动装箱(Autoboxing):将基本数据类型转换为对应的包装类对象。
1. 自动拆箱(Unboxing):将包装类对象转换为对应的基本数据类型。
1. ❗尤其注意:如果尝试对一个为null的包装类对象进行自动拆箱,会导致NullPointerException异常,因此在使用自动拆箱时需要谨慎处理可能为null的情况。
```Java
Integer num = 5; // 自动装箱:将int类型的5自动转换为Integer对象
int intValue = num; // 自动拆箱:将Integer对象num自动转换为int类型巧用泛型写工具类(redis)
使用ThreadLocal获取当前登录用户
// ThreadLocal 是一个线程级别的变量,它允许你在每个线程中存储和访问不同的数据。 |
- Idea启动多个SpringBoot项目 https://blog.csdn.net/linxingliang/article/details/129248244
辅助工具操作(插件/库)
MybatisX-Generato
r 快速生成 domain、mapper、service 配置apache common utils
库:很好用,比如说判断字符串是否为空StringUtills.isAnyBlank(s1,s2...)
mybatisplus
可以默认帮助我们查询出来没有被删的用户:application 配置 + @TableLogic 配置:逻辑删除 | MyBatis-Plus (baomidou.com)- 想输出日志时传入多个参数的log要从@sl4fj导入,不然只能传一个参数
log.debug("发送验证码:{},到手机:{}", code, phone); |
TODO:检验数据输入格式是否正确:封装正则表达式 ——> 能不能直接调用个第三方库
MyBatis-Plus——LambdaQueryWrapper的使用
// QueryWrapper 最基础的使用方法 |
常见方法
wrapper.eq("实体类::查询字段", "条件值"); //相当于where条件 |
BeanUtils.copyProperties使用
需要对应的属性有
getter
和setter
方法(内部实现时,使用反射拿到set
和get
方法,再去获取/设置属性值)如果两个类之间存在名称不相同的属性,则 BeanUtils 不对这些属性进行处理,需要程序员手动处理。
BeanUtils.copyProperties(Object source, Object target); |
idea 操作
- alt+enter 快捷键
- 创建测试,会在 test 文件夹创建测试类
- Genterate all setter with default value,就会调用该对象所有的 set 方法,并可以指定默认值
- ctrl 快捷键
- ctrl+p,会显示该方法或函数所接受的参数信息【我趣好好用,就是这个快捷键单手不太好按,比弹琴跨得还开、、、】
- ctrl+B 快速进入
- fn+shift+f6 重构
- ctrl + alt + t 构建try方法
- private static final 可以先输入 prsf,按下 enter 快速生成
- 添加快捷输入(像 sout) 设置—编辑器-实时模板—新建模板/快捷指令,类似
ResultUtil.success($END$)
,$END$就是输入快捷指令后光标在的位置;然后再 define 里面选上 Java - 注意在写接口的时候先写完接受参数再/**+回车快速生成注释,因为是 java doc 注解类型,可以直接生成参数和返回类
- idea 自带测试工具,生成的测试在临时文件和控制台里面,(主要是不用自己手敲 url 就比 apifox 方便( •̀ ω •́ )y
- 在 service 修改了参数之后,点击左侧的 R 可以快速在 serviceimpl 中添加这个参数
- 在 serviceimpl 中写好了方法,再加个@Override 就可以直接拉到 service 中
- 写控制器函数快速填参:插件 Auto filling Java call arguments,鼠标放在括号中间 alt+enter(虽然 copilot 也会自动提示(●’◡’●)
代码操作
- 序列化相关操作代码:
public class UserLoginRequest implements Serializable { |
注解类
@Data
注解作用:简化一般实体类的 get, set, toString,construct(构造函数)等的书写,简洁化代码。@Data≈@Getter + @Setter + toString() + equals 等方法@RestController
注解:这个类里面所有的请求的接口返回值,响应的数据类型都是 application.json@RequestBody
接收前端传递给后端的 json 字符串中的数据@RunWith
(SpringRunner.class) 表明 Test 测试类要使用注入的类,比如@Autowired 注入的类,有了@RunWith(SpringRunner.class)这些类才能实例化到 spring 容器中,自动注入才能生效@RestController
// 这个类里面所有的请求的接口返回值,响应的数据类型都是 application json@RequestMapping("/user")
//定义请求的总路径
// 就把前端url请求中的id赋值给followUserId,isFollow赋值给isFollow
public Result follow({ Long followUserId, Boolean isFollow)
return followService.follow(followUserId,isFollow);
}额额额找个时间补一下
LambdaQueryWrapper
git操作
- 撤销未push的commit
Git – 选择Reset HEAD – To Commit 填写 HEAD
1(撤销一次,两次的话就HEAD2或者HEAD^^,以此类推),相当于终端输出git reset --soft HEAD^
- 撤销push的内容(hard和soft的区别)
// 本地修改全部清空
git reset --hard 修订号 // 让本地分支回退到指定修订号
git push origin main(分支名) --force //将本地强制推送到远程
//不影响任何本地修改
git reset --soft 修订号 // 让本地分支回退到指定修订号
奇怪Bug
- 额额额什么笨蛋忘记了测试类加@SpringBootTest,所以一直报错空指针异常
- nginx改了端口号但是访问地址没改
- 更离谱的出现了,没开mysql服务就去跑后端,出现的报错是
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure .The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets
常用库:
工具
- Guava:谷歌开发的 Java 工具库(https://github.com/google/guava)
- Apache Commons:各类工具库,比如 commons-lang、commons-io、commons-collections 等(https://github.com/apache/commons-lang)
- Hutool:Java 工具集库(https://github.com/looly/hutool)
- Lombok:Java 增强库(https://github.com/projectlombok/lombok)
- Apache HttpComponents Client:HTTP 客户端库(https://github.com/apache/httpcomponents-client)
- OkHttp:适用于 JVM、Android 等平台的 Http 客户端(https://github.com/square/okhttp)
- Gson:谷歌的 JSON 处理库(https://github.com/google/gson)
- Jcommander:Java 命令行参数解析框架(https://github.com/cbeust/jcommander)
- Apache PDFBox:PDF 操作库(https://github.com/apache/pdfbox)
- EasyExcel:阿里的 Excel 处理库(https://github.com/alibaba/easyexcel)
- Apache POI:表格文件处理库(https://github.com/apache/poi)
测试
- JUnit:Java 测试框架(https://github.com/junit-team/junit4)
- Mockito:Java 单元测试 Mock 框架(https://github.com/mockito/mockito)
- Selenium:浏览器自动化框架(https://github.com/SeleniumHQ/selenium)
- htmlunit:Java 模拟浏览器(https://github.com/HtmlUnit/htmlunit)
- TestNG:Java 测试框架(https://github.com/cbeust/testng)
- Jacoco:Java 代码覆盖度库(https://github.com/jacoco/jacoco
其他
- cglib:字节码生成库(https://github.com/cglib/cglib)
- Arthas:Java 诊断工具(https://github.com/alibaba/arthas)
- config:针对 JVM 的配置库(https://github.com/lightbend/config)
- Quasar:Java 纤程库(https://github.com/puniverse/quasar)
- drools:Java 规则引擎(https://github.com/kiegroup/drools)
- Caffeine:Java 高性能缓存库(https://github.com/ben-manes/caffeine)
- Disruptor:高性能线程间消息传递库(https://github.com/LMAX-Exchange/disruptor)
- Knife4j:Swagger 文档增强(https://doc.xiaominfo.com/)
- Thumbnailator:Java 缩略图生成库(https://github.com/coobird/thumbnailator)
- Logback:Java 日志库(https://github.com/qos-ch/logback)
- Apache Camel:消息传输集成框架(https://github.com/apache/camel)
- Quartz:定时任务调度库(https://github.com/quartz-scheduler/quartz)
- Apache Mahout:机器学习库(https://github.com/apache/mahout)
- Apache OpenNLP:NLP 工具库(https://github.com/apache/opennlp)
- RxJava:JVM 反应式编程框架(https://github.com/ReactiveX/RxJava)
- JProfiler:性能分析库(https://www.ej-technologies.com/products/jprofiler/overview.html)
- jsoup:HTML 文档解析库(https://jsoup.org/)
- webmagic:Java 爬虫框架(https://github.com/code4craft/webmagic/)