基于SpringBoot的Web开发案例过程讲解-项目准备

news2024/11/28 13:34:02

基于SpringBoot的Web开发案例过程笔记-项目准备

  • 1)环境搭建
      • 【1】准备数据库表
      • 【2】创建Springboot项目并引入相关依赖
      • 【3】配置application.properties文件
      • 【4】创建相关的包和类
  • 2) 三层架构工作流程
  • 3)开发规范-Restful
  • 4)相关的注解
  • 5)项目开发流程
  • 6)知识小课堂

前言:基于黑马的学习总结,该文章的案例是完成tlias前后端分离web项目的部分功能。包括部门信息和员工信息的增删改查。根据页面原型和接口文档来进行功能开发。

1)环境搭建

在这里插入图片描述

【1】准备数据库表

-- 部门管理
create table dept(
                     id int unsigned primary key auto_increment comment '主键ID',
                     name varchar(10) not null unique comment '部门名称',
                     create_time datetime not null comment '创建时间',
                     update_time datetime not null comment '修改时间'
) comment '部门表';
-- 插入部门数据
insert into dept (id, name, create_time, update_time) 
values(1,'学工部',now(),now()),
      (2,'教研部',now(),now()),
      (3,'咨询部',now(),now()), 
      (4,'就业部',now(),now()),
      (5,'人事部',now(),now());



-- 员工管理
create table emp (
                     id int unsigned primary key auto_increment comment 'ID',
                     username varchar(20) not null unique comment '用户名',
                     password varchar(32) default '123456' comment '密码',
                     name varchar(10) not null comment '姓名',
                     gender tinyint unsigned not null comment '性别, 说明: 1 男, 2 女',
                     image varchar(300) comment '图像',
                     job tinyint unsigned comment '职位, 说明: 1 班主任,2 讲师, 3 学工主管, 4 教研主管, 5 咨询师',
                     entrydate date comment '入职时间',
                     dept_id int unsigned comment '部门ID',
                     create_time datetime not null comment '创建时间',
                     update_time datetime not null comment '修改时间'
) comment '员工表';

-- 插入员工数据
INSERT INTO emp
(id, username, password, name, gender, image, job, entrydate,dept_id, create_time, update_time) VALUES


(1,'jinyong','123456','金庸',1,'1.jpg',4,'2000-01-01',2,now(),now()),
(2,'zhangwuji','123456','张无忌',1,'2.jpg',2,'2015-01-01',2,now(),now()),
(3,'yangxiao','123456','杨逍',1,'3.jpg',2,'2008-05-01',2,now(),now()),
(4,'weiyixiao','123456','韦一笑',1,'4.jpg',2,'2007-01-01',2,now(),now()),
(5,'changyuchun','123456','常遇春',1,'5.jpg',2,'2012-12-05',2,now(),now()),
(6,'xiaozhao','123456','小昭',2,'6.jpg',3,'2013-09-05',1,now(),now()),
(7,'jixiaofu','123456','纪晓芙',2,'7.jpg',1,'2005-08-01',1,now(),now()),
(8,'zhouzhiruo','123456','周芷若',2,'8.jpg',1,'2014-11-09',1,now(),now()),
(9,'dingminjun','123456','丁敏君',2,'9.jpg',1,'2011-03-11',1,now(),now()),
(10,'zhaomin','123456','赵敏',2,'10.jpg',1,'2013-09-05',1,now(),now()),
(11,'luzhangke','123456','鹿杖客',1,'11.jpg',5,'2007-02-01',3,now(),now()),
(12,'hebiweng','123456','鹤笔翁',1,'12.jpg',5,'2008-08-18',3,now(),now()),
(13,'fangdongbai','123456','方东白',1,'13.jpg',5,'2012-11-01',3,now(),now()),
(14,'zhangsanfeng','123456','张三丰',1,'14.jpg',2,'2002-08-01',2,now(),now()),
(15,'yulianzhou','123456','俞莲舟',1,'15.jpg',2,'2011-05-01',2,now(),now()),
(16,'songyuanqiao','123456','宋远桥',1,'16.jpg',2,'2010-01-01',2,now(),now()),
(17,'chenyouliang','123456','陈友谅',1,'17.jpg',NULL,'2015-03-21',NULL,now(),now());

【2】创建Springboot项目并引入相关依赖

需要的依赖:

        <!--web开发的起步依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--mybatis的起步依赖-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>3.0.2</version>
        </dependency>

        <!--mysql的驱动依赖-->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!--lombok依赖:提高代码复用性-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <!--SpringBoot单元测试依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter-test</artifactId>
            <version>3.0.2</version>
            <scope>test</scope>
        </dependency>

【3】配置application.properties文件

目的

#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url
spring.datasource.url=jdbc:mysql://localhost:3306/自己要操作的数据库名
#连接数据库的用户名
spring.datasource.username=root
#连接数据库的密码
spring.datasource.password=自己设置的密码


#指定mybatis输出日志的位置,输出控制台
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl


#开启Mybatis的驼峰命名自动映射的开关
mybatis.configuration.map-underscore-to-camel-case=true

【4】创建相关的包和类

在java主包:com.example包下创建四个主要包:

  • controller包
    • DeptController类
    • EmpConteoller类

说明:需要在类加上@RestController注解
在Web开发中,"controller"负责处理HTTP请求并决定如何响应。它接收来自用户的请求,并根据请求的内容选择相应的动作(Action)来处理。通常,"controller"会解析URL、验证输入数据、调用相应的服务或模型进行业务逻辑处理,并返回处理结果给用户。

  • service包
    • impl包
      • DeptServiceimpl实现类
      • EmpServicrimpl实现类
    • DeptService接口
    • EmpServicr接口

说明:需要在实现类中加上@Service注解,表明把该实现类交给IOC容器管理,称为IOC容器中的bean对象.
接收来自控制层的请求。实现应用程序的业务逻辑,处理数据验证、计算、算法等。协调不同的数据访问对象进行数据操作。
将处理结果返回给表示层。

  • mapper包
    • DeptMapper接口
    • EmpMapper接口

说明:需要在接口上加上@Mapper注解
提供与数据存储和持久化相关的操作。包括数据库访问、文件操作或者外部API调用等。负责对数据进行增删改查等操作。在业务逻辑层的指导下执行数据操作。

  • pojo包
    • Dept实体类
    • Emp实体类
    • Result实体类:封装结果响应回前端渲染

说明:pojo包下的实体类属性和数据库表中的字段一一对应,注意在数据库表中的下划线_分割命名方式,项目实现类中式驼峰命名。

2) 三层架构工作流程

  • 前端通过UI界面与应用程序进行交互,发送请求到控制层controller.
  • 控制层controller接收请求并将其转发给业务逻辑层service
  • 业务逻辑层service根据请求的类型和内容,处理业务逻辑,可能需要调用数据访问层mapper进行数据操作。
  • 数据访问层mapper执行相应的数据操作,如从数据库读取数据或将数据写入到数据库中。
  • 数据访问层mapper将结果返回给业务逻辑层service
  • 业务逻辑层service对结果进行处理和封装,并将其返回给控制层controller
  • 控制层controller接收业务逻辑层service返回的结果,并进行视图展示或将结果传递给前端。

3)开发规范-Restful

  • REST(Representational State Transfer),表述性状态转换,它是一种软件架构风格
  • REST是风格,是约定方式,约定不是规定,可以打破。
  • 描述模块的功能通常使用复数,也就是加s的格式来描述,表示此类资源,而非单个资源。如:user、emps、books…

4)相关的注解

@Slf4j 是一种注解,用于在Java类中自动生成日志记录器(Logger)。它是基于Simple Logging Facade for Java (SLF4J) 的一个简化版注解。
具体而言,@Slf4j 注解可以通过在类上使用它来自动为该类生成一个名为 “log” 的日志记录器对象。使用这个日志记录器对象,我们可以方便地输出日志信息,以便在程序运行期间进行调试和追踪。

@Autowired 是Spring框架中的一个注解,用于实现自动依赖注入。它使得我们可以方便地将依赖对象注入到需要它们的类中,从而减少了手动编写依赖关系的代码。

@RestController 是 Spring MVC 提供的一个注解,它用于标识一个类是一个 RESTful 风格的控制器,并且会自动将其返回值转换为 JSON 格式。因此,我们可以把 @RestController 看作是 @Controller@ResponseBody两个注解的组合。@Controller 注解标识一个类是一个 MVC 控制器,它可以处理来自客户端浏览器的 HTTP 请求。 在 Spring MVC 中,一个控制器类通常会包含多个方法,每个方法对应一个或多个具体的请求路径。控制器中的方法返回值通常为视图名称(如 “home”),表示需要跳转到某个视图页面进行渲染。@ResponseBody 注解用于标识请求处理方法返回的对象不是视图名称,而是响应体本身。Spring MVC 框架会自动将返回值转换成 JSON、XML 或其他格式的响应体, 然后发送给客户端浏览器。

@Service注解用于标记一个类,表示它是服务层(Service Layer)中的一个Bean,也就是业务逻辑处理层的组件。通过使用 @Service 注解,可以告诉Spring框架该类是一个服务层组件,并且Spring会将其扫描并装配到应用程序上下文中,以便能够在其他地方进行依赖注入或者使用。

@Mapper 注解是一种用于标注数据访问层接口的注解。它的作用是告诉MyBatis框架该接口是一个映射器(Mapper)接口,用于定义数据库操作的方法。具体而言,@Mapper 注解是用于与MyBatis持久层框架结合使用的,通过标注接口,MyBatis可以自动为该接口创建代理对象,并提供对应的SQL语句执行能力。

@Override 是一个注解,用于在Java类中表示当前方法是对父类方法的重写(覆盖)。
当我们使用 @Override 注解时,编译器会检查当前方法是否满足重写父类方法的条件,如果不满足,则会产生编译错误。这有助于我们及时发现代码逻辑错误或者方法签名不一致的问题。

5)项目开发流程

  • 查看页面原型明确需求
  • 阅读接口文档
  • 思路分析
  • 接口开发
  • 接口测试
  • 前后端联调

6)知识小课堂

nginx是一个高性能的开源反向代理服务器和 Web 服务器。 默认前端测试网站:localhost:90

一个完整的请求路径,应该是类上的 @RequestMapping 的value属性+方法上的 @RequestMapping的value属性。

mybatis如何实现分页查询
select * from dept limit 0,5;
SELECT * FROM dept:该部分指定要从表"dept"中选择的所有列(*表示选择所有列)。
LIMIT 0,5:这个部分告诉数据库查询只返回从第0行开始的5行数据。第一个参数0表示起始位置,第二个参数5表示要返回的行数。
所以,这个查询将返回"dept"表中前5行数据的所有列。
分页查询语法
参数1: 起始索引=(页码 - 1) * 每页展示记录数
参数2: 查询返回记录数 =每页展示记来数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/975909.html

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

相关文章

【数据结构与算法】栈

文章目录 前言一&#xff1a;基本概念1.1 介绍1.2 入栈和出栈示意图1.3 栈的应用场景 二&#xff1a;使用数组模拟栈2.1 思路分析2.2 代码实现2.3 测试 三&#xff1a;使用栈模拟中缀表达式计算器3.1 整体思路3.2 验证32*6-2133.2.1 定义栈3.2.2 返回运算符的优先级3.2.3 判断是…

如何通过Instagram群发消息高效拓展客户?

之前小S有跟大家说过关于独立站&#xff0b;Instagram如何高效引流&#xff0c;发现大家都对Instagram的话题挺关注的。Instagram作为全球最受欢迎的社交媒体之一&#xff0c;对于许多商家和营销人员来说&#xff0c;Instagram是一个不可忽视的营销平台&#xff0c;他们可以通过…

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU硬件那些事(2.3)- 串行NOR Flash下载算法(J-Link工具篇)

https://www.cnblogs.com/henjay724/p/13770137.html 大家好&#xff0c;我是痞子衡&#xff0c;是正经搞技术的痞子。今天痞子衡给大家介绍的是J-Link工具下i.MXRT的串行NOR Flash下载算法设计。 在i.MXRT硬件那些事系列之《在串行NOR Flash XIP调试原理》一文中&#xff0c;痞…

通过rabbitmq生成延时消息,并生成rabbitmq镜像

通过rabbitmq生成延时消息队列&#xff0c;并生成rabbitmq镜像 整体描述1. 使用场景2. 目前问题3. 前期准备 具体步骤1. 拉取镜像2. 运行镜像3. 安装插件4. 代码支持4.1 config文件4.2 消费监听4.2 消息生产 5. 功能测试 镜像操作1. 镜像制作2. 镜像导入 总结 整体描述 1. 使用…

MySql学习笔记08——事务介绍

事务 基本概念 事务是一个完整的业务逻辑&#xff0c;是一个最小的工作单元&#xff0c;不可再分。 一个完整的业务逻辑包括一系列的操作&#xff0c;这些操作是整个业务逻辑中的最小单元&#xff0c;这些操作要么同时成功&#xff0c;要么同时失败。 由于只有DML语句中才会…

C++那些事之Step by step上手grpc

C那些事之grpc小Demo github上比较火的rpc有grpc、brpc&#xff0c;腾讯内部比较牛逼的trpc等等&#xff0c;这些rpc支持不同的语言、不同平台。今天来聊聊如何使用grpc&#xff0c;从一个简单的demo入手&#xff0c;整个项目使用CMake构建&#xff0c;一个非常标准的rpc项目管…

公园气象站——观测实时气象,保障游客安全

公园气象站是一种用于监测和记录气象数据的系统。在公园内设置公园气象站可以帮助我们了解公园内的气候状况&#xff0c;包括空气湿度、空气温度、风速和风向等参数。这些数据是公园管理、游客安全和环境保护等方面重要的辅助依据。 负氧离子监测&#xff1a;负氧离子是指空气…

Serverless Framework 亚马逊云(AWS)中国地区部署指南

Serverless Framework 亚马逊云(AWS)中国地区部署指南 Serverless Framework 亚马逊云(AWS)中国地区部署指南 前言前置准备 1. 账号的注册2. 全局安装 serverless3. 设置你的系统环境变量4. 设置部署凭证 快速部署一个 hello world 创建入口函数 index.js event 参数context 参…

学习Bootstrap 5的第四天

目录 表格 基础表格 实例 条纹表格 实例 带边框表格 实例 有悬停效果的行 实例 黑色/深色表格 实例 黑色/深色条纹表格 实例 可悬停的黑色/深色表格 实例 无边框表格 实例 上下文类 可用的上下文类&#xff1a; 实例 表头颜色 实例 小型表格 实例 响应…

SpringBoot实现Excel导入导出

话不多说&#xff0c;直接上代码 依赖文档 找到pom文件&#xff0c;如下图所示 引入需要的依赖 <!-- hutool--><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.20</version>&…

如何利用顶级AI简历工具优化求职过程

追求梦想工作既是挑战又是机会。而在这一竞争激烈的职场中&#xff0c;拥有一份完美的简历成为与雇主初次互动的黄金名片。但问题是&#xff0c;如何才能使简历真正脱颖而出&#xff1f; 为何简历如此关键? 很多时候&#xff0c;简历的影响力被忽视&#xff0c;尽管它实际上…

2023年下半年广州/深圳软考(中/高级)认证报名,当然弘博创新

软考是全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff08;简称软考&#xff09;项目&#xff0c;是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试&#xff0c;既属于国家职业资格考试&#xff0c;又是职称资格考试。 系统集成…

新晋开源项目 DisJob 加入 Dromara 社区,分布式任务调度框架

作者简介 网名Ponfee&#xff0c;Dromara开源组织成员&#xff0c;dromara/disjob项目作者。在国内多个一线大厂待过&#xff0c;有过后端、全栈、大数据等相关工作经历。 关于Disjob Disjob是天然为支持分布式长任务执行而设计的&#xff0c;它除了具备常规的任务调度功能外…

K210-关于K210基本操作

1.点亮RGB灯 from modules import ybrgb RGB ybrgb() #设置RGB颜色&#xff1a;RGB.set(r, g, b) #参数r控制红灯开关&#xff0c; #参数g控制绿灯开关&#xff0c; #参数b控制蓝灯开关&#xff0c; #输入0表示关闭&#xff0c;输入1表示开启。 RGB.set(1, 0, 0)2.按键功能 …

【Arduino实验笔记】机械臂篇(二) 开关控制LED灯

文章目录 前言硬件介绍实物接线图软件实现库函数介绍程序代码 下一篇的目标总结 前言 本章节介绍如何通过按键控制LED灯&#xff0c;在上一章节中&#xff0c;我们学习了如何控制IO输出电平。而本章节&#xff0c;我们将学会如何读取IO输入的电平。 硬件介绍 观察独立按键&am…

Taurus: 面向机器学习的数据面架构

日益复杂的网络和多样化的工作负载要求网络内置更多的自动化决策能力&#xff0c;通过可编程网络设备在用户面支持机器学习工作负载就是一个可能的选项&#xff0c;本文提出了一种支持用户面推理的架构设计&#xff0c;相对控制面机器学习的性能有数量级的提升。原文: Taurus: …

联想集团财报不及华尔街预期,财务业绩恐将继续恶化

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 华尔街对联想集团财报的预测 在联想集团&#xff08;00992&#xff09;公布2024财年第一季度财务业绩之前&#xff0c;华尔街分析师就曾预测&#xff0c;联想集团的收入和利润将实现强劲增长。 具体而言&#xff0c;根据S&…

VB6.0 设置窗体的默认焦点位置在 TextBox 中

文章目录 VB6.0 窗体的加载过程确定指针的焦点位置添加代码效果如下未设置指定焦点已设置焦点 VB6.0 窗体的加载过程 在VB6.0中&#xff0c;窗体&#xff08;Form&#xff09;加载时会触发多个事件&#xff0c;这些事件按照特定的顺序执行。下面是窗体加载过程中常见事件的执行…

高忆管理:光刻胶概念强势拉升,同益股份、格林达涨停

光刻胶概念5日盘中强势拉升&#xff0c;截至发稿&#xff0c;同益股份、格林达涨停&#xff0c;波长光电、晶瑞电材涨超7%&#xff0c;容大感光涨逾5%&#xff0c;华懋科技、茂莱光学、苏大维格、南大光电等均走强。 音讯面上&#xff0c;据新加坡《联合早报》网站9月2日报导&…

Android jni引用第三方so动态库和.a静态库并且调用(c)方法

最近花了一周时间来入门学习 Android JNI方面的知识&#xff0c;因为后续的工作很多需要用到c c库&#xff0c;我需要用jni来包装一下c函数&#xff0c;来提供给上次java调用。总之多学点知识对自己有好处。 案例效果&#xff1a; 上文我们讲解了 android studio cmake生成.a…