基于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.rhkb.cn/news/119778.html

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

相关文章

二三维电子沙盘数字沙盘虚拟现实开发教程第14课

二三维电子沙盘数字沙盘开发教程第14课 很久没有写了&#xff0c;主要前段时间在针对怎么显示高精度的 倾斜数据而努力&#xff0c;现在终于实现了效果不错。以前的版本显示倾斜数据控制不太好。 对了。目前系统暂只支持smart3d生成的kml格式的数据&#xff0c;由专有的录入程…

2023年7月京东投影仪行业品牌销售排行榜(京东大数据)

鲸参谋监测的京东平台7月份投影仪行业销售数据已出炉&#xff01; 7月份&#xff0c;投影仪市场呈现增长趋势。根据鲸参谋平台的数据可知&#xff0c;7月京东平台投影仪的销量将近20万&#xff0c;同比增长约16%&#xff1b;销售额将近3.8亿&#xff0c;同比增长约4%。 ​*数据…

Kubernetes技术--k8s核心技术持久化存储

有时候需要在集群中进行一些重要的数据进行持久化存储,然后需要的时候再进行挂载,那么下面我们一起来看看如何实现数据的持久化存储操作。 1.nfs网络存储 -1.找一台服务器做nfs的服务端,安装nfs。(这里我们直接在master上实现)。 这里应该找再单独的搭建一个node节点做持…

考研408 | 【计算机组成原理】计算机系统的概述

计算机的发展 硬件的发展&#xff1a; 摩尔定律&#xff1a; 微处理机的发展&#xff1a; 软件的发展&#xff1a; 发展趋势&#xff1a; 总结&#xff1a; 计算机硬件的基本组成 早期的冯诺依曼机&#xff1a; 现代计算机的结构&#xff1a; 总结&#xff1a; 各个硬件的工作…

按键精灵调节界面不显示插件

就像我这样的---这是正常的现象 但是假如你不小心把这个给岔了&#xff0c;那么 点击了启动它就是这样的 这个东西的唯一解决措施就是电脑重启&#xff0c;没得办法&#xff0c;天地万物都有bug这个没得办法

数据分析 | 特征重要性分析 | 树模型、SHAP值法

前言 在分析特征重要性的时候&#xff0c;相关性分析和主成分分析往往是比较简单的方法&#xff0c;相关性分析是通过计算特征与目标变量之间的相关系数来评估特征的重要性。它可以告诉我们特征和目标变量之间的线性关系程度&#xff0c;但对于非线性关系就无能为力了&#xff…

虹科产线实时数采检测方案——高速采集助力智能化升级

01 产线数采检测相关技术背景 1.1 典型场景 对于产线数采检测&#xff0c;让我们从典型的工厂场景开始介绍。 每个工位都有上位机监控下方的PLC控制器。指令、执行单元和作用对象的状态通过内置传感器进行采集和测量&#xff0c;反馈给PLC实现闭环控制。 工业4.0和智能制…

输出归一化位置式PID(COTRUST完整梯形图代码)

SMART PLC单自由度和双自由度位置式PID的完整源代码,请参看下面文章链接: 位置式PID(S7-200SMART 单自由度、双自由度梯形图源代码)_RXXW_Dor的博客-CSDN博客有关位置型PID和增量型PID的更多详细介绍请参看PID专栏的相关文章,链接如下:SMART PLC增量型PID算法和梯形图代码…

pdf怎么转换成word?

随着数字化时代的到来&#xff0c;PDF(Portable Document Format)已成为最受欢迎的文档格式之一&#xff0c;因其在各种设备上的可视性和稳定性而备受推崇。然而在某些情况下&#xff0c;将PDF转换为Word文档可能是必要的&#xff0c;这使得编辑、修改和重新格式化文本变得更加…

freemarker学习+集成springboot+导出word

目录 一 FreeMarker简介 二 集成springboot&#xff0c;实现案例导出 三 常见面试题总结 一 FreeMarker简介 FreeMarker 是一款 模板引擎&#xff1a; 即一种基于模板和要改变的数据&#xff0c; 并用来生成输出文本(HTML网页&#xff0c;电子邮件&#xff0c;配置文件&…

【Sword系列】Vulnhub靶机HACKADEMIC: RTB1 writeup

靶机介绍 官方下载地址&#xff1a;https://www.vulnhub.com/entry/hackademic-rtb1,17/ 需要读取靶机的root目录下key.txt 运行环境&#xff1a; 虚拟机网络设置的是NAT模式 靶机&#xff1a;IP地址&#xff1a;192.168.233.131 攻击机&#xff1a;kali linux&#xff0c;IP地…

开发一个npm包

1 注册一个npm账号 npm https://www.npmjs.com/ 2 初始化一个npm 项目 npm init -y3编写一段代码 function fn(){return 12 }exports.hellofn;4发布到全局node_module npm install . -g5测试代码 创建一个text文件 npm link heath_apisnode index.js6登录(我默认的 https…

系统中出现大量不可中断进程和僵尸进程(理论)

一 进程状态 当 iowait 升高时&#xff0c;进程很可能因为得不到硬件的响应&#xff0c;而长时间处于不可中断状态。从 ps 或者 top 命令的输出中&#xff0c;你可以发现它们都处于 D 状态&#xff0c;也就是不可中断状态&#xff08;Uninterruptible Sleep&#xff09;。 R …

开源django+mysql+vue3前后端分离商城baykeShop使用指南

baykeShop开源商城系统 项目简介 baykeShop&#xff08;拜客商城系统&#xff09;是一款全开源Python栈商城系统&#xff0c;管理后台完全前后端分离重写以适配项目&#xff0c;前后端100%开源&#xff0c;后台前端采用开源SCUI开源库对接开发&#xff0c;美观、易用、符合当…

C++算法 —— 动态规划(1)斐波那契数列模型

文章目录 1、动规思路简介2、第N个泰波那契数列3、三步问题4、使用最小花费爬楼梯5、解码方法6、动规分析总结 1、动规思路简介 动规的思路有五个步骤&#xff0c;且最好画图来理解细节&#xff0c;不要怕麻烦。当你开始画图&#xff0c;仔细阅读题时&#xff0c;学习中的沉浸…

uni-app之android离线打包

一 AndroidStudio创建项目 1.1&#xff0c;上一节演示了uni-app云打包&#xff0c;下面演示怎样androidStudio离线打包。在AndroidStudio里面新建空项目 1.2&#xff0c;下载uni-app离线SDK&#xff0c;离线SDK主要用于App本地离线打包及扩展原生能力&#xff0c;SDK下载链接h…

k8s使用ECK(2.4)形式部署elasticsearch+kibana-http协议

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、准备elasticsearch-cluster.yaml二、部署并测试总结 前言 之前写了eck2.4部署eskibana&#xff0c;默认的话是https协议的&#xff0c;这里写一个使用http…

开源照片管理服务LibrePhotos

本文是为了解决网友 赵云遇到的问题&#xff0c;顺便折腾的。虽然软件跑起来了&#xff0c;但是他遇到的问题&#xff0c;超出了老苏的认知。当然最终问题还是得到了解决&#xff0c;不过与 LibrePhotos 无关&#xff1b; 什么是 LibrePhotos ? LibrePhotos 是一个自托管的开源…

微服务设计和高并发实践

文章目录 1、微服务的设计原则1.1、服务拆分方法1.2、微服务的设计原则1.3、微服务架构 2、高并发系统的一些优化经验2.1、提高性能2.1.1、数据库优化2.1.2、使用缓存2.1.3、服务调用优化2.1.4、动静分离2.1.5、数据库读写分离 2.2、服务高可用2.2.1、限流和服务降级2.2.2、隔离…

美团 Flink 资源调度优化实践

摘要&#xff1a;本文整理自美团数据平台计算引擎组工程师冯斐&#xff0c;在 Flink Forward Asia 2022 生产实践专场的分享。本篇内容主要分为四个部分&#xff1a; 相关背景和问题解决思路分析资源调度优化实践后续规划 点击查看原文视频 & 演讲PPT 一、相关背景和问题 在…