当前位置: 首页 > article >正文

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,还有结果封装和异常处理机制.....让我们和小小白一起坚持学习吧🙆🙆‍♂️


http://www.kler.cn/a/402574.html

相关文章:

  • 使用POLL函数实现聊天室
  • LabVIEW实现TCP/IP通信
  • jdk-VarHandle 翻译
  • Flink学习连载第二篇-使用flink编写WordCount(多种情况演示)
  • 百度在下一盘大棋
  • 深入理解下oracle 11g block组成
  • Agent AI:智能代理AI:多模态交互视野的探究
  • Docker 数据卷 和 挂载 的区别
  • python脚本实现csv中百度经纬度转84经纬度
  • 高级网络安全——WEP, WPA(week6)
  • Android Glide load origin Bitmap, Kotlin
  • 【优选算法篇】分治乾坤,万物归一:在重组中窥见无声的秩序
  • 深度学习三大框架对比与实战:PyTorch、TensorFlow 和 Keras 全面解析
  • Android开发实战班 - 应用架构 之 Kotlin 协程基础
  • 【实用技能】使用 TX Text Control 创建带有嵌入式附件的 PDF 文档
  • 从零开始的c++之旅——map_set的使用
  • 如何对AWS进行节省
  • OpenCvSharp Demo 饱和度、明度、对比度、锐化、阴影、高光、色温实现滤镜效果
  • B站直播模块解读——MVVM类似物
  • 微软在Ignite 2024发布Copilot+新功能
  • 深度学习是什么?
  • 抽象工厂方法模式
  • 谈一下开源生态对 AI人工智能大模型的促进作用
  • 微信小程序上传微信官方审核流程(1)
  • 【C++融会贯通】哈希表的使用
  • ROS VRRP软路由双线组网方式