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)@ResponseBodypublic 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.Driverurl: jdbc:mysql://localhost:3306/aurora?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghaiusername: rootpassword: 自己的密码
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.rhkb.cn/news/475118.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot+Vue 2 多方法实现(图片/视频/报表)文件上传下载,示例超详细 !

目录 一、主流方法介绍 1. Base 64 2. 二进制流传输 3. multipart/form-data 4. FTP/SFTP 5. 云存储服务API 二、multipart/form-data 方式上传单个文件 1、前端部分 2、后端部分 三、multipart/form-data 方式上传多个文件 1、前端部分 2、后端部分 四、Base 64 方…

小米顾此失彼:汽车毛利大增,手机却跌至低谷

科技新知 原创作者丨依蔓 编辑丨蕨影 三年磨一剑的小米汽车毛利率大增&#xff0c;手机业务毛利率却出现下滑景象。 11月18日&#xff0c;小米集团发布 2024年第三季度财报&#xff0c;公司实现营收925.1亿元&#xff0c;同比增长30.5%&#xff0c;预估902.8亿元&#xff1b;…

unity中:超低入门级显卡、集显(功耗30W以下)运行unity URP管线输出的webgl程序有那些地方可以大幅优化帧率

删除Global Volume&#xff1a; 删除Global Volume是一项简单且高效的优化措施。实测表明&#xff0c;这一改动可以显著提升帧率&#xff0c;甚至能够将原本无法流畅运行的场景变得可用。 更改前的效果&#xff1a; 更改后的效果&#xff1a; 优化阴影和材质&#xff1a; …

webgl threejs 云渲染(服务器渲染、后端渲染)解决方案

云渲染和流式传输共享三维模型场景 1、本地无需高端GPU设备即可提供三维项目渲染 云渲染和云流化媒体都可以让3D模型共享变得简单便捷。配备强大GPU的远程服务器早就可以处理密集的处理工作&#xff0c;而专有应用程序&#xff0c;用户也可以从任何个人设备查看全保真模型并与…

React Native 基础

React 的核心概念 定义函数式组件 import组件 要定义一个Cat组件,第一步要使用 import 语句来引入React以及React Native的 Text 组件: import React from react; import { Text } from react-native; 定义函数作为组件 const CatApp = () => {}; 渲染Text组件

【专题】中国企业出海洞察报告暨解码全球制胜之道报告汇总PDF洞察(附原数据表)

原文链接&#xff1a;https://tecdat.cn/?p38314 在当今全球化的浪潮中&#xff0c;中国企业的出海行动正以前所未有的规模和速度展开&#xff0c;成为全球经济舞台上的重要力量。本报告旨在对 2024 年中国企业出海情况进行深度洞察&#xff0c;涵盖多个领域和视角。 从对外投…

『VUE』32. 动态组件,组件的动态切换(详细图文注释)

目录 动态组件示例代码总结 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 动态组件 有些时候我们的组件需要切换,这个时候用到<conponent></conponent>标签, <component :is"choseComponent"><…

传输层协议TCP

一.TCP协议格式 对于传输层协议我们之前是学过了UDP&#xff0c;对于传输层协议是存在了一定的了解的&#xff0c;所以现在我们再来看TCP协议格式&#xff1a; 我们之前学过UDP的报文格式&#xff0c;所以源端口和目的端口是不需要进行再次讲解的&#xff0c;对于32序号和确认序…

不能打开网页,但能打开QQ、微信(三种方式)

1.VPN错误 下面三个开关全关闭 2.DNS问题 WINR 输入CMD打开命令行 命令行输入 ipconfig/flushdns 重启电脑 3.直接火绒&#xff08;一键修复&#xff09;

Unity类银河战士恶魔城学习总结(P132 Merge skill tree with skill Manager 把技能树和冲刺技能相组合)

【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili 教程源地址&#xff1a;https://www.udemy.com/course/2d-rpg-alexdev/ 本章节实现了解锁技能后才可以使用技能&#xff0c;先完成了冲刺技能的锁定解锁 Dash_Skill.cs using System.Collections; using System…

Linux-第2集-打包压缩 zip、tar WindowsLinux互传

欢迎来到Linux第2集&#xff0c;这一集我会非常详细的说明如何在Linux上进行打包压缩操作&#xff0c;以及解压解包 还有最最重要的压缩包的网络传输 毕竟打包压缩不是目的&#xff0c;把文件最终传到指定位置才是目的 由于打包压缩分开讲没有意义&#xff0c;并且它们俩本来…

mysql delete后通过日志恢复数据

1.打开navicat查看删除时间 2.查看日志功能是否打开 show variables like %log_bin%;3. 查看日志文件所在目录 show variables like %datadir%;4.用这个路径去找日志文件&#xff0c;名字里带bin&#xff0c;最后修改时间和你第一步找到删除时间一样(如果之后有过其它增删改…

鸿蒙NEXT开发-用户通知服务的封装和文件下载通知

注意&#xff1a;博主有个鸿蒙专栏&#xff0c;里面从上到下有关于鸿蒙next的教学文档&#xff0c;大家感兴趣可以学习下 如果大家觉得博主文章写的好的话&#xff0c;可以点下关注&#xff0c;博主会一直更新鸿蒙next相关知识 专栏地址: https://blog.csdn.net/qq_56760790/…

C++——智能指针剖析

参考&#xff1a; 恋恋风辰官方博客 动态内存管理 - cppreference.com SRombauts/shared_ptr&#xff1a; 一个最小的 shared/unique_ptr 实现&#xff0c;用于处理 boost/std&#xff1a;&#xff1a;shared/unique_ptr 不可用的情况。 C智能指针_c 智能指针-CSDN博客 当…

【java】java入门

盘符名称冒号---------盘符切换 dir---------------查看当前路径下的内容 cd目录--------进入单级目录 cd..----------回退到上一级目录 cd \----------回退到盘符目录 cls----------清屏 exit 为什么要配环境变量&#xff1f; 在任意的目录下都可以打开指定的软件。把软件的路…

11.19.2024刷华为OD

文章目录 HJ51HJ53 杨辉三角HJ56HJ57 高精度整数加法HJ58HJ60 简单题HJ63 DNA序列&#xff08;简单题&#xff09;语法知识记录 HJ51 https://www.nowcoder.com/practice/54404a78aec1435a81150f15f899417d?tpId37&tags&title&difficulty0&judgeStatus0&…

数据挖掘英语及概念

分类 classify 上涨或跌 回归 regression 描述具体数值 分类模型评估 1.混淆&#xff08;误差&#xff09;矩阵 confusion matrix 2.ROC曲线 receiver operating characteristic curve 接收者操作特征曲线 3.AUC面积 area under curve ROC曲线下与坐标轴围成的面积&#x…

GOLANG+VUE后台管理系统

1.截图 2.后端工程截图 3.前端工程截图

go-zero(三) 数据库操作

go-zero 数据库操作 在本篇文章中&#xff0c;我们将实现一个用户注册和登录的服务。我们将为此构建一个简单而高效的 API&#xff0c;包括请求参数和响应参数的定义。 一、Mysql连接 1. 创建数据库和表 在 MySQL 中创建名为 test_zero的数据库&#xff0c;并创建user 表 …

MFC图形函数学习09——画多边形函数

这里所说的多边形是指在同一平面中由多条边构成的封闭图形&#xff0c;强调封闭二字&#xff0c;否则无法进行颜色填充&#xff0c;多边形包括凸多边形和凹多边形。 一、绘制多边形函数 原型&#xff1a;BOOL Polygon(LPPOINT lpPoints,int nCount); 参数&#x…