Java小白成长记(创作笔记一)
目录
序言
思维导图
开发流程
新建SpringBoot并整合MybatisPlus
新建SpringBoot
整合MybatisPlus
统一结果封装
全局异常处理
引入数据库
序言
在一个充满阳光的早晨,一位对编程世界充满好奇的年轻人小小白,怀揣着梦想与激情,踏上了学习Java编程的征程。他/她深知,在这个信息化时代,编程技能的重要性不言而喻。然而,作为一个编程小白,他面临着无数未知与挑战。在这篇成长记中,我们将紧紧跟随小小白的脚步,见证他/她从Java小白成长为大佬的蜕变历程。接下来,让我们出发吧 ····👻👻
思维导图
首页,要开发一个Java项目,我们要事先搭建思维导图,这样我们可以更好地梳理出项目的结构,前期可以做到一目了然,分步骤去写好每一块内容,避免出现这块写一点,又跳到那块再写,反复横跳·····后期完成也可以进行更好地优化和迭代。简而言之,高效 高效 高效
这是此篇博客的思维导图,内容主要针对后端
讲解了此次项目的学习重点、项目功能、技术栈以及开发流程,接下来就让我们跟随小小白的视角进入开发流程的探索吧!
开发流程
新建SpringBoot并整合MybatisPlus
首先推荐大家在IDEA中使用自己的maven包,好处就是可以提高代码的复用性等等···比如多个项目都需要用到某些工具类、配置或者业务逻辑、可以将这些代码打包成maven依赖,多个项目复用,避免重复造轮子的工作... 首页点击File中的Settings,框中搜索maven,点击···选中包,再勾选Override,最后Apply-ok就成功了
如果已经再用,就直接看"新建SpringBoot",没有maven下面有配置教程
(此图是已有maven,没有maven在图片下方哦!)
如果没有自己的maven的话: 点击下面maven官网链接下载一个就是
Maven – Maven Releases History
我的是之前下的3.6.3🤪🤪
下载并解压后还需配置环境变量:1、点开此电脑,右键点击属性
2、点击高级系统设置,进去点击框右下角环境变量
3、点进去后选择下面的系统变量(S),点击新建,对应输入,其中值是压缩后maven包路径,然后点击确定,再选中Path,点击编辑-新建,输入对应的值,最后确定-确定···
4、检查是否配置成功:点击windows+R(也可以是屏幕下方搜索框中)输入cmd进入命令行,输入:mvn -v 此时会显示配置的版本信息,如果出现错误,大部分是java_home变量的事,请仔细检查 解决不了可以私信我帮忙💕💕
5、配置文件:我们需要需改maven/conf/settings配置文件,也就是解压后的maven包,点进去,再点conf/settings,来修改maven的一些默认配置。我们主要修改的有三个配置:1.依赖本地缓存位置(本地仓库位置)2.maven下载镜像3.maven选用编译项目的jdk版本!
注意事项:修改配置时至少像这样可以显示行数!
此次可以自行选择位置
由于我下载的jdk为17版本,jdk不一样改改数字就行
接下来就是
新建SpringBoot
1、File-New-Project
2、图片步骤,Location为项目存储路径,包名记得删去一部分
3、这里可以勾选依赖,比如图片中勾选的,简化代码的
4、点击Create后,就成功了,记得改自己maven 包
点击File中的Settings,框中搜索maven,点击···选中包,再勾选Override,最后Apply-ok就成功了
现在,一个SpringBoot工程就搭建成功啦
整合MybatisPlus
现在就可以进行整合啦! 下面是MybatisPlus官网,可以了解一下
MyBatis-Plus 🚀 为简化开发而生
首先得添加一个pom依赖
<!--整合mybatis-plus https://baomidou.com -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>3.5.7</version>
</dependency>
然后在启动类添加@MapperScan,括号内的内容为自己建的包名/mapper(也是包名)
现在MybatisPlus就集成好啦! 可是小小白在问,为什么要集成它呢?首先来解释一下这个注解@MapperScan
(1)自动创建代理实现:Mybatis-Plus通过@MapperScan
注解指定的包路径,自动为这些接口创建代理实现。这意味着你不需要为每个Mapper接口手动编写实现类
(2)简化配置:通过在启动类上指定@MapperScan
,你不需要在Mapper接口上逐个添加@Mapper
注解,从而简化了配置。了解ssm(Spring + SpringMVC + Mybatis)的小伙伴都知道,需要写很多的配置信息,这里就不给大家展示了,可以下来搜搜看。目前只用一个注解就可实现
作用:BaseMapper<T>中,T是实体类名
对于操作的话,下面讲到了再和大家详细讲解,后面都会一一用到
统一结果封装
为什么我们要统一封装呢?因为现在大多数主流项目都是前后端分离模式开发,当前端请求发来的时候,我们可能在controller接口返回任何类型,例如列表、对象、字符串···这种不同的类型再加上报错异常,就造成了返回给前端的内容多种多样,所以得进行统一封装...
代码展示:AppExceptionCodeMsg是定义的业务异常(下面一张图片有)
package com.aurora.common; //自己的包名
import com.aurora.exception.AppExceptionCodeMsg;
import lombok.Getter;
@Getter
public class Result<T> {
/**
* 统一结果封装
*/
//成功状态码及信息 响应数据
private int code = 200;
private String msg = "success";
private T data;
//构造方法
public Result(int code,String msg,T data){
this.code = code;
this.msg = msg;
this.data = data;
}
//静态方法
public static <T> Result<T> success(T data){
return new Result<>(200,"success",data);
}
public static <T> Result<T> success(String msg , T data){
return new Result<>(200,msg,data);
}
public static <T> Result<T> error(AppExceptionCodeMsg appExceptionCodeMsg){
return new Result<>(appExceptionCodeMsg.getCode(),appExceptionCodeMsg.getMsg(),null);
}
public static <T> Result<T> error(int code,String msg){
return new Result<>(code,msg,null);
}
}
如果看不懂的话,没关系,小小白为大家整理了代码的逐行注解(每行都有注释),点击下方
链接:如何优雅地统一异常处理和信息返回-CSDN博客(代码讲解包括全局异常处理)
全局异常处理
代码展示:这是业务有关的异常,可以在这里对业务有关的异常进行统一处理
package com.aurora.exception;
import lombok.Getter;
@Getter
public enum AppExceptionCodeMsg {
/**
* 业务有关的异常
*/
//错误码10000 ,验证码无效
INVALID_CODE(10000,"验证码错误"),
//错误码10001 ,用户不存在
USERNAME_NOT_EXIST(10001,"用户不存在");
private final int code;
private final String msg;
//构造方法 初始化错误码和信息
AppExceptionCodeMsg(int code,String msg){
this.code = code;
this.msg = msg;
}
}
代码展示:自定义异常
package com.aurora.exception;
import lombok.Getter;
@Getter
public class AppException extends RuntimeException{
/**
* 自定义异常
*/
private int code = 500;
private String msg = "服务器异常";
public AppException(AppExceptionCodeMsg appExceptionCodeMsg){
super();
this.code = appExceptionCodeMsg.getCode();
this.msg = appExceptionCodeMsg.getMsg();
}
public AppException(int code,String msg){
super();
this.code = code;
this.msg = msg;
}
}
代码展示:全局异常捕获
package com.aurora.exception;
import com.aurora.common.Result;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
@ControllerAdvice
public class GlobalExceptionHandler {
/**
* 全局异常处理 捕获程序中未处理的异常 并统一响应
*/
//异常处理方法 接收任何类型的Exception作为参数
@ExceptionHandler(value = Exception.class)
@ResponseBody
public Result exceptionHandler(Exception e){
//自定义异常
if(e instanceof AppException){
AppException appException = (AppException) e;
return Result.error(appException.getCode(), appException.getMsg());
}
//如果抛出的是其他异常 (例如,数据库链接失败)则返回默认
return Result.error(500,"服务器异常");
}
}
提示:这四段代码在上方一个链接都有讲解 😀😀😀
通过这四段代码,可以构成一个较为完善的异常处理和结果封装机制.....
引入数据库
这里暂时不会用到,先让大家了解一下,后面存储前端数据再用🥰🥰🥰
现在我们在idea添加一下数据库(mysql),没有的话大家可以去官网下载一个,这里只给大家提供链接, 注意:不要下载最新版的数据库,有些地方可能出现问题
MySQL :: MySQL Downloads
下载免费的社区版就是,不会操作的话找下CSDN看看
首先选择右侧的这个仓库(我的在右侧)
然后 点击 + 再选中 再选择MySQL
配置信息:默认用户是root,密码是安装mysql时设置的
点击Test···之前要先启动(mysql)数据库,类似这样,才能连接成功
还得给pom.xml引入一下数据库依赖,不然.yml文件driver-class-name会爆红
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
这是application.yml配置信息:如果是后缀是.properties记得改成yml
格式:写前空一格 aurora是我的数据库名,你们的就是你们的名
# 端口号
server:
port: 8081
# DataSource Config
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/aurora?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 自己的密码
mybatis-plus:
mapper-locations: classpath*:/mapper/**Mapper.xml
现在就可以在controller简单测试一下了(数据库在这里暂时不会用到)
先演示代码:
package com.aurora.controller;
import com.aurora.common.Result;
import com.aurora.exception.AppException;
import com.aurora.exception.AppExceptionCodeMsg;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Arrays;
import java.util.List;
@RestController
public class TestController {
@GetMapping("/test")
public Result<String> test_01(String name){
if("ok".equals(name)){
return Result.success("Thanks OK!");
}
if("error".equals(name)){
throw new AppException(AppExceptionCodeMsg.USERNAME_NOT_EXIST);
}
if("1111".equals(name)){
throw new AppException(AppExceptionCodeMsg.INVALID_CODE);
}
return Result.success("default");
}
@GetMapping("/list")
public Result<List> test_02(){
List<String> list = Arrays.asList("张三","李四","王五");
return Result.success(list);
}
}
先把启动类运行起来:可以点击第一个三角形
然后在浏览器输入端口号+地址(@GetMapping里面就是)
(1)路径和参数不同,返回的状态码和数据就不同(看实际)
(2)路径和参数不同,返回的状态码和数据就不同(看实际)
(3)路径和参数不同,返回的状态码和数据就不同(看实际)
(4)路径和参数不同,返回的状态码和数据就不同(看实际)
到这里,Java小白成长记(创作笔记一)就结束了,主要给大家讲解了SpringBoot并整合了MybatisPlus,还有结果封装和异常处理机制.....让我们和小小白一起坚持学习吧🙆🙆♂️