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

前后端分离------后端创建笔记(上)

本文章转载于【SpringBoot+Vue】全网最简单但实用的前后端分离项目实战笔记 - 前端_大菜007的博客-CSDN博客

仅用于学习和讨论,如有侵权请联系

源码:https://gitee.com/green_vegetables/x-admin-project.git
素材:https://pan.baidu.com/s/1ZZ8c-kRPUxY6FWzsoOOjtA 提取码:up4c
项目概述笔记:https://blog.csdn.net/m0_37613503/article/details/128961102
数据库笔记:https://blog.csdn.net/m0_37613503/article/details/128961401
前端笔记:https://blog.csdn.net/m0_37613503/article/details/128961447
后端笔记:https://blog.csdn.net/m0_37613503/article/details/128961569
 

1、第一步创建一个新项目:用Maven或者Spring Initializr都行

1.1 随便填一下

 Project SDK就是JDK的版本 

1.2 java版本选8

 1.3 设置springBoot版本

 1.4 打开Maven项目 ,添加一个spring的启动器和测试的启动器

 1.5 将笔记的配置依赖粘贴上去,等一会找到笔记

 1.6 找到笔记,配置依赖

 1.7 看一下配置,第一个是web场景的解放器,因为我们做的是web项目吗?:

1.7.1第二个是Mysql的坐标,因为我们用的是Mysql

 1.7.2 往下我们用的是Mybatis-plus

 1.7.3 因为生成器要用,我们导入freemWork,因为生成器要用,所以我们导入这个: 导入lombok,是为了简化我们的代码,比如我们创建一个实体类:

1.7.4 加一下redis的配置和依赖

 1.7.5 这里要修改一下配置文件

 1.7.6 我们先配置一下后端端口,前端端口和后端端口不在一起,后端端口我们放在9999上面

 1.7.7 使用他的数据源

使用用户名和密码:

1.7.8 配置数据库的url

 1.7.9 这里我们不用写连接池,因为springBoot有属于自己的连接池

如果你项目之中有特殊要求,要求替换,那么你就替换,那时你就要指定type属性,限定一下类

1.7.10 我刚才配置一下redis的依赖,因此我要配置一下端口 

 1.7.11 我的文件都在com.lantu这个文件下:下面这句话的意思是我们项目中debug信息都会打印出来。

 1.7.12 完成项目之后,我们跑一下项目,测试一下能不能用,这样就部署成功了

2、我们接下来做代码生成,Mybatis-plus的官网

2.1 到Mybatis-plus的官网(看样子,得看Mybatis-plus的视频)

 2.2 我们直接用,这里复制快速生成的代码,复制完代码之后,我们要创建一个类

2.3 我们要创建这个类,不能放到目录中,因为放到目录中,就会被打包到目录里:

2.4 放到test当中,而不是放到这个类当中,这里我创建的是一个CodeGenerator

 2.4.1 就写一个main方法,然后把这段代码copy过去,然后把Mybatis-plus的代码给复制过去

 2.4.2 alt + insert 导入一下包

 2.4.3 数据库的内容

 2.4.4 如果你想要提出一个参数,你可以提前设置一个参数,方便后期进行修改

 

 

 2.4.5 如果你最后重新运行,就会把生成代码给覆盖掉,这里的覆盖生成文件一定要注释掉。

 2.4.6 输出地址是输出的路径放到D盘

2.4.7复制绝对路径

 2.4.8 将我们java代码输出路径写在我们刚才复制的路径里:

2.4.9 父包名写在我们自己的目录中

 2.4.10 模块名你是需要修改的,因为你把他抽出来,再修改会十分方便

 这里替换成你给他写的目录

2.4.11 写在MapperXml生成路径,这里我们要写成变量的形式,这里等于Mapper的路径等于什么:

 2.4.12 这里路径要放到resource下面 

2.4.13 我们复制resouce下的路径

 复制都是绝对路径

但是这样写不好,具体老师讲的是他有一个默认的配置:

 

如果我直接放到resouces下是跟目录配不上的

 

 2.4.14 把MapperLocation给替换掉

 2.4.15 修改表名

2.4.16 我们可以看一下源码(看源码的方法,然后按住Ctrl键,鼠标点击Random类),他做了很多重载

2.4.17 可以设置排除表

2.4.18 我们可以用这三个里面任何一个

2.4.19 第三个表会产生一个对话分割,我路由有一张表,我可以写A表,B表,C表

 2.4.20  我这里有四张表

2.4.21 用户结论对照表,我将这四张表都写进去,这里看样子要学一下Mybatis

2.4.22 把tables放到下面位置

2.4.23 X_

 2.4.24 没有找到合适的驱动----这里给他注册一个更高的驱动

 

 2.4.25 后来发现报错的原因是,url和password没有写

2.4.26 改成这样就行

 2.4.27 接下来运行一下

2.4.28 在com.lantu下面成功生成了一个模块

2.4.29 控制器里面写的特别少,因为他不知道你写的是哪个方法:

2.4.30 实体类,没有x下滑前缀,因为我们把他给过滤掉了

2.4.31 类名是主键,都做了标识

 2.4.32 Mapper也写好了,这样就有表的增删改查能力

2.4.33 我们在serve里面就可以调方法,实现增删改查 

2.4.34 在控制器调增删改查控制器就全有了,等一会把Mybatis-plus过一遍:

2.4.35 他没有做扫描,现在我们做一下扫描,现在做*的意义在于,可能不仅只有这一个包

2.4.36 我们去查询所有的参数,以及得到一个集合

 2.4.37 我们测试一下,遍历一下,把user给打印出来

2.4.38 查询语句,Mybatis帮助我们将查询语句给做好了

 2.4.39 我们现在做的是测试类,但我们后期将通过控制器暴露我们的接口

 2.4.40 在我们userController中进行测试

 2.4.41在我们userController中装配Userservice对象

2.4.42 首先我们先写一个请求查询的数据getMapping,然后将上面的路径给改一下,上面这个路径现在全部是用户的,不想用sys前缀,: 

2.4.43 我用user进行开头

2.4.44  想查所有的数据,因此我用的是/all,这里返回的数据是List集合,我们查一下所有的用户

2.4.45 这里增删改查方法全都有的,我们想查集合,调List就可以

 

2.4.46 之后我们就可以访问到我们的后端, (“/all”),我们来测试一下,打开我们的启动类,重新运行 

2.4.47 通过观察我们可以看到启动成功

 3、第一次看到配置接口访问浏览器,看样子想利用接口,要掌握springBoot方面知识

 3.1     404 表示我们前面是对的,后面是错的

 3.2  回到配置接口的地方,老师讲这个查询已经做了,但是为什么还报错

 3.3 原因是我们控制器加的注解是不正确的,这里控制器写的内容就是接口的地址,以后找接口地址找控制器就行,加了@Controller,就意味着我们这里最终返回的就是一个视图:

3.4 但是我们返回的List肯定不是视图,所以他找不到视图404了,我们前后端对接,对接的标准是什么,我们交互的数据时json数据,所以我们就不需要这个注解了

3.5 改成RestController,标这个注解就意味着默认所有注解以返回json,处理为结局

 3.6 重启再试一下

 4、六条数据都出来的样子,第一次见到接口出来数据,好开心好开心(*^▽^*)

的样子 

 4.1 之后我们会做新增,删除,修改之类的方法,而每一次返回方法,每个参数都会不一样,这里就出现了一个问题,如果我们跟前端对接的话,返回的数据都不一样的话,那么还是很有问题的。

 4.2 如何形成统一返回数据格式,只要格式能保持统一就行,否则就对接不上,那么我们该如何让格式保持一致

 4.3 code代表接口返回的返回码,data表示返回数据,每一个接口返回的数据是不一样的

4.4 统一数据接口数据后端接口与前端接口的数据标准,我们需要创建一个类来统一这件事情

 4.5 在com.lantu下创建一个类,这个类的目的,返回一个规定的数据格式:

4.6 创建一个common.vo.result结果类

 4.7 我要写一个状态码:

 4.8 往前后端进行说明,针对客户端来进行中文的一个说明,我们就叫message,第三个参数,我们是不确定的,因此你可以选择使用object,但是你使用泛型更好,这里写成T就行,注意类上也要一个泛型<T>

 4.9 这里要加上Data注解,生成get和set方法:

 4.10 补全无参和实参构造方法:

 4.11 如果我们现在要用的话:我们需要返回userController

 4.12 将这种格式给套上,因为我们上面用的泛型,所以得改成泛型

4.13 如果我要返回他我要怎么做,我得new 一个

 4.14 接下来封装一下返回的数据对象

4.15 首先我们回到result类当中,设置静态方法:

4.15.1 这里我们是静态的,因此用static

 4.15.2 返回什么类型:Result<T>

 4.15.3 成功的方法下,我叫success,成功的情况下,我就new 一个return,new 一个result 

 4.15.4 这个代码你可以再进行封装,弄一个常量类,用一个枚举类再去封装,假如我没有数据返回前端,我只要返回这个东西就行了:

 4.15.6 static后面也要返回一个<T>泛型,否则系统识别不了

4.15.7 这个方法显然不能满足,因为显然我还要传入我指定的message和数据,

 4.15.8 利用这个方法做一下重载:

 4.15.8.1 现在我想返回一下数据,返回一个data,这样写就行

4.15.8.2  现在我不仅想返回一下数据,还想带个message过去(),这里等一会一定要把笔记看一下,把软件继续设计下去,这是最优解:

4.15.8.3 比如默认情况下,我返回一个失败

 4.15.8.4 由于每种情况都不一样,因此我们要做相应的重载

5 你看情况, 你做个那个你就采用那个方法

5.1 重新运行一下,查看一下,发现他是一个数组

 5.2 通过result类我们做了一个操作

 

6 接下来,我们来实现一下后端接口,首先我们看一下前端请求接口和响应的参数,F12之后,先点击netWork

6.1 看什么登录请求和地址

 请求地址和方式

7 PayLoad是携带的数据

 

 

相关文章:

前后端分离------后端创建笔记(上)

本文章转载于【SpringBootVue】全网最简单但实用的前后端分离项目实战笔记 - 前端_大菜007的博客-CSDN博客 仅用于学习和讨论&#xff0c;如有侵权请联系 源码&#xff1a;https://gitee.com/green_vegetables/x-admin-project.git 素材&#xff1a;https://pan.baidu.com/s/…...

Java不可变集合详解

什么是不可变集合 不可变集合&#xff0c;英文叫 immutable 顾名思义就是说集合是不可被修改的。集合的数据项是在创建的时候提供&#xff0c;并且在整个生命周期中都不可改变。 为什么要使用不可变集合 不可变对象有很多优点&#xff0c;包括&#xff1a; 当对象被不可信的…...

常见的JavaScript日常问题

在众多的编程语言中&#xff0c; JavaScript 给大部分的人的第一印象是人畜无害&#xff0c;看起来就简单的&#xff0c;对稍微有点儿开发经验的人来说&#xff0c;在网页中写个JavaScript功能也相当简单。但是当你真的得了解了JavaScript之后就会发现&#xff0c;它比我们想象…...

css modules的用法和在react项目中的应用

参考文章 CSS Modules 的用法 CSS Modules 的功能很单纯&#xff0c;只加入了局部作用域和模块依赖&#xff0c;可以保证某个组件的样式&#xff0c;不会影响到其他组件。 局部作用域 CSS的规则都是全局的&#xff0c;任何一个组件的样式规则&#xff0c;都对整个页面有效。…...

【LangChain概念】了解语言链️:第2部分

一、说明 在LangChain的帮助下创建LLM应用程序可以帮助我们轻松地链接所有内容。LangChain 是一个创新的框架&#xff0c;它正在彻底改变我们开发由语言模型驱动的应用程序的方式。通过结合先进的原则&#xff0c;LangChain正在重新定义通过传统API可以实现的极限。 在上一篇博…...

步入React前厅 - Css In React

目录 扩展学习资料 行内样式 引入样式表 CSS Module /src/components/common.module.css /src/components/listitem.module.css css管理进阶 Css管理工具 练习 扩展学习资料 资料名称 链接 css module CSS Modules 用法教程 - 阮一峰的网络日志 在React中使…...

OpenCV(三)——图像分割(二)

目录 4.边缘检测 4.1 图像梯度的概念 4.2 模板卷积和梯度图的概念 4.3 梯度算子...

28.Netty源码之缓存一致性协议

Mpsc Queue 基础知识 Mpsc 的全称是 Multi Producer Single Consumer&#xff0c;多生产者单消费者。Mpsc Queue 可以保证多个生产者同时访问队列是线程安全的&#xff0c;而且同一时刻只允许一个消费者从队列中读取数据。 Netty Reactor 线程中任务队列 taskQueue 必须满足多个…...

造个轮子-任务调度执行小框架-任务清单执行恢复实现

文章目录 前言恢复执行流程失败任务执行重启执行中任务恢复执行修复组件整合组件整合容器启动类总结前言 okey,通过前面的两篇文章,关于这个任务执行这一块,我想应该是明白了。但是这里的话,还是不够的。我们希望对于任务还可以做到执行失败的重试执行,关于这个意外宕机的…...

若依部署前后端

打包项目 前端打包 npm run build:prod将代码上传到指定目录 配置nginx转发 server{listen 8090;server_name localhost;location / {root /home/cc_library/dist;index index.html index.htm;# 配置 history模式&#xff0c;刷新页面会404&#xff0c;&#xff0c;因为服…...

2009年上半年 软件设计师 下午试卷

博主介绍&#xff1a;✌全网粉丝3W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…...

SpringBoot使用自定义事件监听器的demo

记录一下SpringBoot自定义事件监听器的使用方法 案例源码:SpringBoot使用自定义事件监听器的demo 使用的SpringBoot2.0.x版本 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><…...

arcgis定义投影与投影

1、定义 地理坐标系&#xff08;GCS&#xff09;&#xff1a;利用地球表面的经纬度表示的坐标系统。一般单位为度。投影坐标系&#xff08;PCS&#xff09;&#xff1a;利用数学换算将三维地球表面上的经纬度坐标转换到二维平面上的坐标系统。一般单位为米。可以认为&#xff…...

Flink多流处理之Broadcast(广播变量)

写过Spark批处理的应该都知道,有一个广播变量broadcast这样的一个算子,可以优化我们计算的过程,有效的提高效率;同样在Flink中也有broadcast,简单来说和Spark中的类似,但是有所区别,首先Spark中的broadcast是静态的数据,而Flink中的broadcast是动态的,也就是源源不断的数据流.在…...

LVS/DR+Keepalived负载均衡实战(一)

引言 负载均衡这个概念对于一个IT老鸟来说再也熟悉不过了&#xff0c;当听到此概念的第一反应是想到举世闻名的nginx&#xff0c;但殊不知还有一个大名鼎鼎的负载均衡方案可能被忽略了&#xff0c;因为对于一般系统来说&#xff0c;很多应用场合中采用nginx基本已经满足需求&a…...

测试DWPose的onnx +Unity barracuda

环境&#xff1a; Unity Barracuda 3.0.1 从github直接拉取的barracuda仓库才能装到这个版本Barracuda以后不再升级了&#xff0c;会迁移到Unity AI大计划里的Sentis 我想申请的来着但好像已经不开放了 Unity 2021.3.20模型&#xff1a;dw-ll_ucoco_384.onnx 报了一些错&…...

轻装上阵,不调用jar包,用C#写SM4加密算法【卸载IKVM 】

前言 记得之前写了一个文章&#xff0c;是关于java和c#加密不一致导致需要使用ikvm的方式来进行数据加密&#xff0c;主要是ikvm把打包后的jar包打成dll包&#xff0c;然后Nuget引入ikvm&#xff0c;从而实现算法的统一&#xff0c;这几天闲来无事&#xff0c;网上找了一下加密…...

redis学习笔记(一)

文章目录 一、引言二、redis介绍2.1、定义2.2、Redis的数据类型及主要特性2.3、Redis的应用场景有哪些&#xff1f; 三、redis环境安装3.1、下载和安装 一、引言 在Web应用发展的初期&#xff0c;那时关系型数据库受到了较为广泛的关注和应用&#xff0c;原因是因为那时候Web站…...

最优化问题 - 拉格朗日对偶

primal 原问题 dual 对偶问题 目标函数 约束条件 可行域D 对偶专题 “拉格朗日对偶问题”如何直观理解&#xff1f;“KKT条件” “Slater条件” “凸优化”打包理解——bilibili 王木头 拉格朗日乘子法与对偶问题...

关于ISO27701隐私信息安全管理体系介绍

01 什么是ISO27701 ISO27701是对ISO27001信息安全管理和ISO27002安全控制的隐私扩展&#xff0c;全称《安全技术—扩展ISO27001和ISO27002的隐私信息管理—要求与指南》&#xff0c;是ISO标准委员会以ISO 27001为基准&#xff0c;以ISO27552为蓝本&#xff0c;建立发布的隐私…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...

前端中slice和splic的区别

1. slice slice 用于从数组中提取一部分元素&#xff0c;返回一个新的数组。 特点&#xff1a; 不修改原数组&#xff1a;slice 不会改变原数组&#xff0c;而是返回一个新的数组。提取数组的部分&#xff1a;slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...