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

基于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.mzph.cn/news/69968.shtml

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

相关文章

Laravel 完整开源项目大全

原型项目 Laravel 5 Boilerplate —— 基于当前Laravel最新版本&#xff08;Laravel 6.0&#xff09;并集成Boilerplate的项目Laravel 5 Angular Material Starter —— 这是一个 Laravel 和 AngularJS 的原型项目&#xff08;最高支持版本&#xff1a;5.3&#xff0c;长期未更…

Qt Creato配置PCL库

Qt Creator中使用PCL库_业务不精er的博客-CSDN博客 Qt6.1.0中配置pcl1.11.1_qt6导入pcl库_朽一的博客-CSDN博客 VS2017 中配置QTPCL显示点云或3D图形_pcl显示3d图tiff_桂林巡山的博客-CSDN博客 Windows10下QTVTKPCL环境配置&#xff08;一次成功&#xff09;_qt pcl_v俊逸的…

MySQL中分区与分表的区别

MySQL中分区与分表的区别 一、分区与分表的区别 分区和分表是在处理大规模数据时的两种技术手段&#xff0c;尽管它们的目标都是提升系统的性能和数据管理的效率&#xff0c;但它们的实现方式和应用场景略有不同。 1. 分区 分区是将一个大表分割为多个更小的子表&#xff0c…

Linux 访问进程地址空间函数 access_process_vm

文章目录 一、源码解析二、Linux内核 用途2.1 ptrace请求2.2 进程的命令行 参考资料 一、源码解析 /*** get_task_mm - acquire a reference to the tasks mm** Returns %NULL if the task has no mm. Checks PF_KTHREAD (meaning* this kernel workthread has transiently a…

vue修饰符的用法

Vue修饰符是指在Vue模板中用于改变指令行为的特殊后缀。修饰符以.开头&#xff0c;用于指示指令应该如何绑定或响应事件。Vue修饰符在一些常见的指令中使用&#xff0c;例如v-on和v-model。常见的Vue修饰符包括&#xff1a; .prevent&#xff1a;阻止默认事件的发生。.stop&am…

AggregateFunction结合自定义触发器实现点击率计算

背景&#xff1a; 接上一篇文章&#xff0c;ProcessWindowFunction 结合自定义触发器会有状态过大的问题&#xff0c;本文就使用AggregateFunction结合自定义触发器来实现&#xff0c;这样就不会导致状态过大的问题了 AggregateFunction结合自定义触发器实现 flink对于每个窗…

小白开始学习C++

​​​​第一节&#xff1a;控制台输出hello word&#xff01; #include<iostream> //引入库文件 int main() { //控制台输出 hello word! 之后回车 std::cout << "hello word!\n"; #include<iostream> //引入库文件int main() {//控制…

Python3 循环语句

Python3 循环语句 本章节将为大家介绍 Python 循环语句的使用。 Python 中的循环语句有 for 和 while。 Python 循环语句的控制结构图如下所示&#xff1a; while 循环 Python 中 while 语句的一般形式&#xff1a; while 判断条件(condition)&#xff1a;执行语句(statem…

【LeetCode算法系列题解】第61~65题

CONTENTS LeetCode 61. 旋转链表&#xff08;中等&#xff09;LeetCode 62. 不同路径&#xff08;中等&#xff09;LeetCode 63. 不同路径 II&#xff08;中等&#xff09;LeetCode 64. 最小路径和&#xff08;中等&#xff09;LeetCode 65. 有效数字&#xff08;困难&#xff…

py脚本解决ArcGIS Server服务内存过大的问题

在一台服务器上&#xff0c;使用ArcGIS Server发布地图服务&#xff0c;但是地图服务较多&#xff0c;在发布之后&#xff0c;服务器的内存持续处在95%上下的高位状态&#xff0c;导致服务器运行状态不稳定&#xff0c;经常需要重新启动。重新启动后重新进入这种内存高位的陷阱…

回复:c#的Winform如何让ComboBox不显示下拉框?https://bbs.csdn.net/topics/392565412

组合框.Parent this;组合框.Items.AddRange(new object[] { "111", "222", "333", "444" });组合框.DropDownHeight 1;组合框.SelectedIndex 0;//组合框.DropDownStyle ComboBoxStyle.Simple; ComboBox 组合框 new ComboBox();Li…

51单片机电子钟六位数码管显示整点提醒仿真设计( proteus仿真+程序+原理图+报告+讲解视频)

51单片机电子钟六位数码管显示整点提醒仿真设计( proteus仿真程序原理图报告讲解视频&#xff09; 1.主要功能&#xff1a;2.仿真3. 程序代码4. 原理图参考元器件清单 5. 设计报告6. 设计资料内容清单 51单片机电子钟六位数码管显示整点提醒仿真设计( proteus仿真程序原理图报告…

AOP进阶-连接点

连接点 在Spring中用JoinPoint抽象了连接点&#xff0c;用它可以获取方法执行时的相关信息&#xff0c;如目标类名、方法名、方法参数等 对于Around通知&#xff0c;获取连接点信息只能使用 ProceedingJoinPoint对于其它四种通知&#xff0c;获取连接点信息只能使用JoinPoint&…

Go语言高级编程:深度挖掘

Go语言高级编程&#xff1a;深度挖掘 欢迎继续深入Go语言的高级编程领域。在这篇博客中&#xff0c;我们将更深入地探讨Go语言的一些高级主题和技术&#xff0c;包括性能优化、错误处理、反射和自定义数据结构。 性能优化 Go语言因其出色的性能而广受欢迎&#xff0c;但要达…

c++中继承多态virtual和override

目录 virtual&#xff1a; 易错点&#xff1a; 未声明虚函数&#xff1a; 忘记使用 override 关键字&#xff1a; 内存泄漏&#xff1a; 基类指针不指向任何对象&#xff1a; 访问权限问题&#xff1a; 不正确的类设计&#xff1a; 不正确的对象切片&#xff1a; 混淆…

C高级-Linux终端基础指令

在线下载软件 检测网络 ping baidu.com在下载软件前&#xff0c;需将Linux系统中的软件源更新成国内的软件源&#xff1a;清华源、阿里源、163源、中科大源… 更新软件列表 将系统中的软件源更新为国内的软件源后&#xff0c;使用命令sudo apt-get update 使Ubuntu连接到国…

[HDCTF 2023]YamiYami

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言涉及知识点解题详细过程session伪造反弹shell 前言 从暑假末尾一直搁置&#xff0c;当时卡在反弹shell搞得离flag就差一步。不过最近一两天学习完反弹shell的知…

8.(Python数模)(预测模型一)马尔科夫链预测

Python实现马尔科夫链预测 马尔科夫链原理 马尔科夫链是一种进行预测的方法&#xff0c;常用于系统未来时刻情况只和现在有关&#xff0c;而与过去无关。 用下面这个例子来讲述马尔科夫链。 如何预测下一时刻计算机发生故障的概率&#xff1f; 当前状态只存在0&#xff08;故…

肖sir__设计测试用例方法之_(白盒测试)

白盒测试技术 一、定义&#xff1a; 白盒测试也叫透明盒测试&#xff0c;检查程序内部结构及路径一是否符合规格说明&#xff0c;二是否符合其代码规范。 因此&#xff0c;也叫结构测试或者逻辑驱动测试。 二、白盒测试常见方法&#xff1a; a、语句覆盖&#xff1b; b、判断覆…

虚拟机扩容

系统环境centos8&#xff0c;分两步&#xff0c;第一步先在vmware扩容&#xff0c;第二部在虚拟机内部扩容 1.vmware分配磁盘空间 2.虚拟机内部扩容 查看当前磁盘信息&#xff0c;这个是扩容之前的&#xff0c;扩容完成才会显示新的 df -h查看系统分区信息 fdisk -l查看目录…