Java小白成长记(创作笔记一)

news2024/11/23 2:09:10

目录

序言

思维导图

 开发流程

新建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.coloradmin.cn/o/2244544.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue--响应式数据

1、建一个vue应用程序&#xff08;简约&#xff09; 引入外链式 <title>第一个Vue程序</title><script src"../vue.global.js"></script> </head> {{}}插值表达式 <body><!-- {{ }} 插值表达式, 可以将 Vue 实例中定义的…

网络安全,文明上网(2)加强网络安全意识

前言 在当今这个数据驱动的时代&#xff0c;对网络安全保持高度警觉已经成为每个人的基本要求。 网络安全意识&#xff1a;信息时代的必备防御 网络已经成为我们生活中不可或缺的一部分&#xff0c;信息技术的快速进步使得我们对网络的依赖性日益增强。然而&#xff0c;网络安全…

怎么做好白盒测试?

白盒测试 一、什么是白盒测试&#xff1f;二、白盒测试特点三、白盒测试的设计方法1、逻辑覆盖法1、测试设计方法—语句覆盖a、用例设计如下&#xff1a;b、语句覆盖的局限性 2、测试设计方法—判定覆盖a、测试用例如下&#xff1a;b、判定覆盖的局限性 3、测试设计方法—条件覆…

阻尼Newton方法-数值最优化方法-课程学习笔记-5

这篇文章我们继续来学习数值最优化方法第三章的后续内容 阻尼Newton方法 这一章我们以及在之前了解过了&#xff1a;最速下降法&#xff0c;基本Newton方法&#xff0c;这一节我们来了解阻尼newton方法 之前我们提到的基本Newton方法是以一固定步长和Newton方向进行迭代的&a…

力扣 只出现一次的数字-136

只出现一次的数字-136 class Solution { public:int singleNumber(vector<int>& nums) {//按位异或的规则是&#xff1a;两个二进制位相同时结果为0&#xff0c;不同时结果为1//具有自反性&#xff0c;两个二进制位相同时结果为0&#xff0c;一个数(a)和0按位异或的…

Vue.js 自定义指令:从零开始创建自己的指令

vue使用directive 前言vue2使用vue3使用 前言 关于使用自定义指令在官网中是这样描述的 vue2:对普通 DOM 元素进行底层操作&#xff0c;这时候就会用到自定义指令。 vue3:自定义指令主要是为了重用涉及普通元素的底层 DOM 访问的逻辑。 在 Vue.js 中使用自定义指令&#xf…

MySQL-关键字执行顺序

&#x1f496;简介 在MySQL中&#xff0c;SQL查询语句的执行遵循一定的逻辑顺序&#xff0c;即使这些关键字在SQL语句中的物理排列可能有所不同。 &#x1f31f;语句顺序 (8) SELECT (9) DISTINCT<select_list> (1) FROM <left_table> (3) <join_type> JO…

Odoo :免费且开源的农牧行业ERP管理系统

文 / 开源智造Odoo亚太金牌服务 引言 提供农牧企业数字化、智能化、无人化产品服务及全产业链高度协同的一体化解决方案&#xff0c;提升企业智慧种养、成本领先、产业互联的核心竞争力。 行业典型痛点 一、成本管理粗放&#xff0c;效率低、管控弱 产品研发过程缺少体系化…

labview记录系统所用月数和天数

在做项目时会遇到采集系统的记录&#xff0c;比如一个项目测试要跑很久这个时候就需要在软件系统上显示项目运行了多少天&#xff0c;从开始测试开始一共用了多少年多少月。 年的话还好计算只需要把年份减掉就可以了&#xff0c;相比之下月份和天数就比较难确定&#xff0c;一…

【C++笔记】list使用详解及模拟实现

前言 各位读者朋友们大家好&#xff01;上期我们讲了vector的使用以及底层的模拟实现&#xff0c;这期我们来讲list。 目录 前言一. list的介绍及使用1.1 list的介绍1.2 list的使用1.2.1 list的构造1.2.2 list iterator的使用1.2.3 list capacity1.2.4 list element access1.…

window 中安装 php 环境

window 中安装 php 环境 一、准备二、下载三、安装四、测试 一、准备 安装前需要安装 Apache &#xff0c;可以查看这篇博客。 二、下载 先到这里下载 这里选择版本为“VS16 x64 Thread Safe”&#xff0c;这个版本不要选择线程安全的&#xff0c;我试过&#xff0c;会缺少文…

【大模型】LLaMA: Open and Efficient Foundation Language Models

链接&#xff1a;https://arxiv.org/pdf/2302.13971 论文&#xff1a;LLaMA: Open and Efficient Foundation Language Models Introduction 规模和效果 7B to 65B&#xff0c;LLaMA-13B 超过 GPT-3 (175B)Motivation 如何最好地缩放特定训练计算预算的数据集和模型大小&…

流程图图解@RequestBody @RequestPart @RequestParam @ModelAttribute

RequestBody 只能用一次&#xff0c;因为只有一个请求体 #mermaid-svg-8WZfkzl0GPvOiNj3 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-8WZfkzl0GPvOiNj3 .error-icon{fill:#552222;}#mermaid-svg-8WZfkzl0GPvOiNj…

论文阅读--supervised learning with quantum enhanced feature spaces

简略摘要 量子算法实现计算加速的核心要素是通过可控纠缠和干涉利用指数级大的量子态空间。本文在超导处理器上提出并实验实现了两种量子算法。这两种方法的一个关键组成部分是使用量子态空间作为特征空间。只有在量子计算机上才能有效访问的量子增强特征空间的使用为量子优势提…

django+boostrap实现注册

一、django介绍 Django 是一个高级的 Python 网络框架&#xff0c;可以快速开发安全和可维护的网站。由经验丰富的开发者构建&#xff0c;Django 负责处理网站开发中麻烦的部分&#xff0c;因此你可以专注于编写应用程序&#xff0c;而无需重新开发。 它是免费和开源的&#x…

【面试题】接口怎么测试?如何定位前后端的Bug?

接口怎么测试&#xff1f; 接口测试用来验证不同软件组件之间的交互是否正常。包括验证数据传输&#xff0c;参数传递&#xff0c;我在多个项目中有过测试接口的经验。&#xff08;… 当进行接口测试时&#xff0c;会使用Postman和Python的Requests库。首先根据接口文档设计测…

151页PDF | XX集团数字化转型SAP项目规划方案(限免下载)

一、前言 这份报告是XX集团数字化转型SAP项目规划方案&#xff0c;该报告涵盖了集团战略解读、管理痛点分析、信息化建设目标、整体架构方案、实施策略、SAP系统价值和预期收益&#xff0c;旨在通过数字化推动集团运营模式变革&#xff0c;实现降本增效和价值创新。 《XX集团…

iOS逆向入门:使用theos注入第三方依赖库

背景 theos是一个跨平台的软件开发框架&#xff0c;常用于管理&#xff0c;开发和部署iOS项目&#xff0c;同时也是开发iOS越狱插件的主要工具。和MonkeyDev不同的是&#xff0c;它不依赖于xcode&#xff0c;可以在多个操作系统上运行。一个完整的iOS越狱开发流程包括&#xf…

LLM文档对话 —— pdf解析关键问题

一、为什么需要进行pdf解析&#xff1f; 最近在探索ChatPDF和ChatDoc等方案的思路&#xff0c;也就是用LLM实现文档助手。在此记录一些难题和解决方案&#xff0c;首先讲解主要思想&#xff0c;其次以问题回答的形式展开。 二、为什么需要对pdf进行解析&#xff1f; 当利用L…

HarmonyOS Next 浅谈 发布-订阅模式

HarmonyOS Next 浅谈 发布-订阅模式 前言 其实在目前的鸿蒙应用开发中&#xff0c;或者大前端时代、vue、react、小程序等等框架、语言开发中&#xff0c;普通的使用者越来越少的会碰到必须要掌握设计模式的场景。大白话意思就是一些框架封装太好了&#xff0c;使用者只管在它…