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

一个完整的springboot项目,我们还需要做什么

文章目录

  • 一 从0创建Srpingboot项目
    • 1.1 启动springboot项目
    • 1.2 导入必要的依赖
  • 二、还缺什么
    • 2.1 统一异常捕获
    • 2.2 统一MVC返回
    • 2.3 数据分层
    • 2.4 连接数据库模块
    • 2.5 放置常量和工具类
    • 2.6 基础controller、基础entity、query查询类
    • 2.7 为了方便处理异常,一般还可以入参打印、出参打印
    • 2.8 集成swagger方便接口查看调用
  • 三、完整项目还缺什么
    • 3.1 鉴权模块
    • 3.2 数据缓存模块
    • 3.3 图片处理模块
    • 3.3 定时模块
    • 3.4 代码生成模块
  • 四、后记

本人从事java web项目开发多年,跟大家分享一下一些心得,原创不易,希望对大家有所帮助

一 从0创建Srpingboot项目

我们从0开始创建Springboot,一般都需要选择Springboot的版本,因为Springboot的版本一年好几个更新,我们通常在 https://start.spring.io 上,选择我们要的版本,以及开启启动的start依赖,即可把一个springboot项目搭建起来

1.1 启动springboot项目

在 https://start.spring.io 选择需要的依赖,确定之后就是一个最基础的springboot项目了。
我们用IDEA打开项目,启动之后,就可以使用了。

现在springboot版本已经更新到3.x以上了,旧的springboot版本已经在这个里面找不到了

虽然官方推荐用最新的版本,但是对于springcloud的适配非常不友好,尤其是jdk必须更新到17,也是让新手接触springboot感觉比较困惑的地方

我个人建议,刚刚开始,还是用官方推荐用的最新版本。到工作后,最好用公司统一的版本,一般公司如果非特殊,是不会随便更新公司的版本的

1.2 导入必要的依赖

Springboot如果想要单体使用,一般只需要导入mvc模块就行了

如果使用Springcloud之后,还可以选择需要导入特定Springcloud依赖

二、还缺什么

很久之前,在使用springboot的时候,一直强调,约定大于配置,也就是说,有些约定俗成的东西,就尽量不要去违背,违背了虽然也没有关系,但是会导致大部分情况下,这些代码只有你自己能进行维护,其他人阅读起来很是困难。

以下我列举了一些大部分项目需要统一的跟大家分享,希望阅读的人可以从中得到启发,增进项目的高效使用。

2.1 统一异常捕获

使用springboot统一异常捕获

2.2 统一MVC返回

封装JsonResult

2.3 数据分层

controller - service - mapper

如果是mybatis-plus还可以考虑使用 face 层

2.4 连接数据库模块

一般选择 mybatis-plus

2.5 放置常量和工具类

创建文件夹

constant 
util

2.6 基础controller、基础entity、query查询类

为了复用性更强

2.7 为了方便处理异常,一般还可以入参打印、出参打印

使用切面的方式处理

2.8 集成swagger方便接口查看调用

方便接口的查看,以及跟前端进行信息交互

三、完整项目还缺什么

3.1 鉴权模块

shiro
security

3.2 数据缓存模块

引用中间件redis

3.3 图片处理模块

引用中间件

存本地路径
存数据库
存nginx
存minio
存mongodb

3.3 定时模块

springboot内置的cron
quart

3.4 代码生成模块

为了方便使用,一般都会集成一个代码生成模块
freemarker

四、后记

一个相对完整的项目,是需要考虑很多东西的,虽然每个项目各有各的不同,但是大部分都是有共通的地方,也就说大家所说的,大同小异。
从0开始搭建springboot项目,对于大部分人还是有一点点难度的,对于了解其中原理,或查看其他人项目,又或者解决bug,都是大有裨益的。

如果觉得太麻烦,又想快速搭建一个后端项目,可以直接在github/gitee 参考开源项目来使用,例如以下项目:

1 Guns
2 pig
3 RuoYi
4 Jeecg-boot
5 iBase4j

但是大部分情况下,如果直接使用开源项目,会发现很多东西就会很臃肿,还是有一些要注意的地方,注意得好,才开源更好的驾驭这个框架。

所以建议使用开源项目的时候,一定要去对应的官网仔细进行阅读,在里面进行答疑解惑,才是用好脚手架的必经之路。

相关文章:

一个完整的springboot项目,我们还需要做什么

文章目录 一 从0创建Srpingboot项目1.1 启动springboot项目1.2 导入必要的依赖 二、还缺什么2.1 统一异常捕获2.2 统一MVC返回2.3 数据分层2.4 连接数据库模块2.5 放置常量和工具类2.6 基础controller、基础entity、query查询类2.7 为了方便处理异常,一般还可以入参…...

QT-界面居中管理

问题:为什么不能对checkbox直接居中,LineEdit可以 复选框是一个固定大小的控件,不适合填满整个单元格,而相比之下QLineEdit是一个可变大小的控件 关于居中: lineEdit:lineEdit -> setAlignment(QT::Al…...

Python | MATLAB | R 心理认知数学图形模型推断

🎯要点 🎯图形模型推断二元过程概率:🖊模型1:确定成功率 θ 的后验分布 | 🖊模型2:确定两个概率差 δ \delta δ 的后验分布 | 🖊模型3:确定底层概率,后验预…...

Linux系统tab键无法补齐命令-已解决

在CentOS中,按下tab键就可以自动补全,但是在最小化安装时,没有安装自动补全的包,需要安装一个包才能解决 bash-completion 1.检查是否安装tab补齐软件包(如果是最小化安装,默认没有) rpm -q ba…...

数据库之函数、存储过程

函数、存储过程 1.函数 函数,常用于对一个或多个输入参数进行操作,主要目的是返回一个结果值,就是一种方法,在postgre里存放的位置叫function,比如创建一个计算长方面积的函数。 举例:建立一个计算长方形…...

安卓启动 性能提升 20-30% ,基准配置 入门教程

1.先从官方下载demohttps://github.com/android/codelab-android-performance/archive/refs/heads/main.zip 2.先用Android studio打开里面的baseline-profiles项目 3.运行一遍app,这里建议用模拟器,(Pixel 6 API 34)设备运行&a…...

Linux C/C++目录和文件的更多操作

1.access()库函数 用于判断当前用户对目录或文件的存取权限 #include<unistd.h>int accsee(const char *pathname,int mode);参数说明&#xff1a; pathname //目录或文件名 mode //需要判断的存取权限&#xff0c;在<unistd.h>预定义如下#define R_OK 4 //读权…...

如何高效地向Redis 6插入亿级别的数据

如何高效地向Redis插入亿级别的数据 背景不可用的方案可用方案:利用管道插入其他命令&#xff1a;参考&#xff1a; 背景 上一条记录&#xff1b;80G的存储&#xff1b;10几个文件&#xff0c;如何快速导入是一个大问题&#xff0c;也是一个很棘手的问题&#xff1b;如下将给出…...

中国历年肥料进口数量统计报告

数据来源于国家统计局&#xff0c;为1991年到2021年我国每年肥料进口数量统计。 2021年&#xff0c;我国进口肥料909万吨&#xff0c;比上年减少151万吨。 数据统计单位为&#xff1a;万吨 数据说明&#xff1a; 数据来源于国家统计局&#xff0c;为海关进出口统计数 我国肥料…...

即时通讯视频会议平台,WorkPlus本地化部署解决方案

随着现代科技的快速发展&#xff0c;传统的会议方式已经不再满足企业和组织的需求。即时通讯视频会议以其便利性和高效性&#xff0c;成为了现代企业沟通和协作的重要工具。通过即时通讯视频会议&#xff0c;企业可以实现无时差的交流和远程协作&#xff0c;增强团队合作和提高…...

Java的数据库编程-----JDBC

目录 一.JDBC概念&使用条件&#xff1a; 二.mysql-connector驱动包的下载与导入&#xff1a; 三.JDBC编程&#xff1a; 使用JDBC编程的主要五个步骤&#xff1a; 完整流程1&#xff08;更新update&#xff09;&#xff1a; 完整流程2(查询query)&#xff1a; 一.JDB…...

如何获取SSL证书,消除网站不安全警告

获取SSL证书通常涉及以下几个步骤&#xff1a; 选择证书颁发机构&#xff08;CA&#xff09;&#xff1a; 你需要从受信任的SSL证书颁发机构中选择一个&#xff0c;比如DigiCert、GlobalSign、JoySSL等。部分云服务商如阿里云、腾讯云也提供免费或付费的SSL证书服务。 生成证…...

Unity动画系统介绍

Unity动画系统介绍 Animator组件&#xff1a; 这是Unity中用于控制动画状态的组件&#xff0c;它与Animator Controller一起工作&#xff0c;可以基于游戏逻辑来切换不同的动画状态。 Animator Controller&#xff1a; 这是一个用于管理动画状态机的组件&#xff0c;它允许…...

Three.js-实现加载图片并旋转

1.实现效果 2. 实现步骤 2.1创建场景 const scene new THREE.Scene(); 2.2添加相机 说明&#xff1a; fov&#xff08;视场角&#xff09;&#xff1a;视场角决定了相机的视野范围&#xff0c;即相机可以看到的角度范围。较大的视场角表示更广阔的视野&#xff0c;但可能…...

ACM实训第25天

第四套 第一道&#xff08;修改&#xff09; #include<stdio.h> #include<string.h> int cnt[10]; void count_digits(int n,int* cnt){for(int i1;i<n;i){int numi;while(num){cnt[num%10];num/10;}} } int main(){int t;scanf("%d\n",&t);whi…...

GraphQL(2):使用express和GraphQL编写helloworld

1 安装express、graphql以及express-graphql 在项目的目录下运行一下命令。 npm init -y npm install express graphql express-graphql -S 2 新建helloworld.js 代码如下&#xff1a; const express require(express); const {buildSchema} require(graphql); const grap…...

Vue中的计算属性和侦听器:提升响应式编程的艺术

引言 Vue.js是一个用于构建用户界面的渐进式框架&#xff0c;它的核心特性之一是响应式编程。Vue通过数据绑定和响应式系统&#xff0c;使得开发者能够以声明式的方式处理数据变化。在Vue中&#xff0c;计算属性&#xff08;Computed Properties&#xff09;和侦听器&#xff…...

JavaScript倍速播放视频

F12打开开发者工具&#xff0c;打开控制台&#xff0c;输入这行代码&#xff0c;视频即可加速播放&#xff0c; 可以调整倍速&#xff08;2&#xff0c;4&#xff0c;8&#xff0c;16&#xff09; document. getElementsByTagName("video")[0]. playbackRate16...

ER图介绍

在数据库设计和建模中&#xff0c;实体-关系图&#xff08;Entity-Relationship Diagram&#xff0c;简称ER图&#xff09;是一个至关重要的工具。ER图通过图形化的方式描述了现实世界中的实体&#xff08;Entity&#xff09;及其之间的关系&#xff08;Relationship&#xff0…...

Oracle通过datax迁移线上表到历史库

历史数据迁移 线上库数据增长迅速&#xff0c;需要定期清理历史数据&#xff0c;因为异地灾备&#xff0c;但是带宽很小&#xff0c;不能使用数据泵直接往历史库导数&#xff0c;会导致本地机房到灾备机房的带宽被占满&#xff0c;调研过flink、golden gate、datax&#xff0c…...

java基础-深拷贝和浅拷贝

java中有一个概念叫深拷贝和浅拷贝&#xff0c;那这两个是什么意思呢&#xff1f;其实你可以对比一下c中的传值和传引用的问题。 深拷贝 即两个相同的对象地址不同&#xff0c;比如对象A通过拷贝出来对象B&#xff0c;在对B对象进行操作时不会影响到A对象的内容。 浅拷贝 和…...

Java数组操作

数组拓展 1.1 数组拷贝 需求&#xff1a;定义一个方法arraycopy, 从指定源数组中从指定的位置开始复制指定数量的元素到目标数组的指定位置。 1.2. 排序操作 需求&#xff1a;完成对int[] arr new int[]{2,9,6,7,4,1}数组元素的升序排序操作. 1.2.1.冒泡排序 对未排序的各元素…...

C++vector及其实现

第一个参数是类型(可以是自定义也可以是内置类型) 相当于生成一个该类型的数组 allocator是空间配置器 遍历 1.下标遍历 2.迭代器遍历 3.范围for 对象访问 有名对象访问 匿名对象访问 隐式类型转换 成员函数 sort 使用sort需要包含头文件algorithm eg. sort的使用非…...

路由策略实验1

先把地址全部配通 对R1 对R2 对R4 对R3 对R5 对R6 对R7 然后起路由协议 对R1 对R2 对R3 对R4 对R5 对R6 对R7...

含情脉脉的进程

冯诺依曼体系结构 一个计算机在工作的时候是怎样的呢&#xff1f; 我们所认识的计算机都是由一个个的硬件组件组成&#xff1a; 输入设备&#xff1a;键盘、鼠标、摄像头、话筒、磁盘、网卡 中央处理器&#xff08;CPU&#xff09;&#xff1a;运算器、控制器 输出设备&#x…...

重复文件怎么查找并清理?电脑重复文件清理工具分享:4个

在日常使用电脑的过程中&#xff0c;我们不可避免地会遇到各种重复文件的问题。这些重复文件不仅占据了宝贵的存储空间&#xff0c;还可能导致系统性能下降&#xff0c;甚至引发一些不必要的问题。因此&#xff0c;如何有效地查找并清理这些重复文件成为了许多用户关注的焦点。…...

Java中连接Mongodb进行操作

文章目录 1.引入Java驱动依赖2.快速开始2.1 先在monsh连接建立collection2.2 java中快速开始2.3 Insert a Document2.4 Update a Document2.5 Find a Document2.6 Delete a Document 1.引入Java驱动依赖 注意&#xff1a;启动服务的时候需要加ip绑定 需要引入依赖 <dependen…...

LabVIEW远程开发与调试

在现代项目开发中&#xff0c;远程开发与调试已经成为一种常见的模式&#xff0c;特别是在使用LabVIEW进行工程项目时。本文将详细分析LabVIEW远程开发与调试的优缺点&#xff0c;并从多个角度说明如何建议客户采用这种方式&#xff0c;以提高项目效率和质量。 优点 灵活性和便…...

C/C++|基于回调函数实现异步操作

首先&#xff0c;要搞懂一点&#xff0c;异步操作本质上也是并发&#xff0c;我们想要在线程级别实现异步并发基本就靠三种方式&#xff1a; 多线程并发回调函数协程 今天我们讨论的是回调函数&#xff0c;我们如何通过回调函数来实现异步操作呢&#xff1f; 非阻塞I/O操作回…...

Mac上搭建Python环境:深入探索与高效实践

Mac上搭建Python环境&#xff1a;深入探索与高效实践 在Mac上搭建Python环境&#xff0c;对于开发者来说是一个既具挑战性又充满乐趣的过程。本文将从四个方面、五个方面、六个方面和七个方面详细阐述如何在Mac上成功搭建Python环境&#xff0c;并帮助您更好地理解和应用Pytho…...