黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(1)准备工作、部门管理

一、准备工作

1.明确需求

根据产品经理绘制的页面原型,对部门和员工进行相应的增删改查操作。

2.环境搭建

将使用相同配置的不同项目作为Module放入同一Project,以提高相同配置的复用性。

  • 准备数据库表(dept, emp)=== 资料中包含了创建表的代码
  • 创建springboot工程,引入对应的起步依赖
  • 配置application.properties中引入mybatis的配置信息,准备对应的实体类
  • 准备对应的Mapper(Dao===数据访问),Service(接口,实现类===逻辑处理),Controller(接受请求、响应数据)基础结构

9fdda918179e46d59141581938e17d0b.png

b712fac9e01d4b509c6c1053773e16ba.png

👆添加相应依赖

IDEA:*.properties文件中文乱码解决方案_xx.properties注释中文乱码-CSDN博客https://blog.csdn.net/u010285974/article/details/107102644👆修改配置文件中的中文乱码情况

200a1fb6992a41dd93bbac76a9c6cd29.png

  • pojo:存放的是两个实体类,实体类中的属性(驼峰命名)和表结构的字段(下划线分割)是一一对应的;
  • controller:控制层,接受前端发送的请求,对请求进行处理,并响应数据;
  • service:业务逻辑层,准备两个接口,并准备了两个接口的实现类,在实现类上面加了注解@Service,表示将当前实现类交给IOC容器管理,成为IOC容器里的bean对象;
  • Mapper:在mapper接口上面加上注解@Mapper。

3.开发规范

基于当前最主流的前后端分离模式进行开发。

前端开发人员将打包好的前端工程部署在ngix服务器上运行,后端开发人员将打包好的服务端程序运行在Tomcat服务器上。

前端向后端请求数据,再有后端给前端响应数据。

所以前后端在开发过程中需要共同遵守【接口文档】(根据产品经理绘制的页面原型和需求制作)进行开发。

本案例的前后端交互是根据Restful风格的接口进行交互的。

  • REST(REpresentational State Transfer),表述性状态转换,是一种软件架构风格。
  • 前后端交互统一响应结果Result

整体开发流程:

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


二、部门管理

1.查询部门

需求分析:

查询全部数据(由于部门数据比较少,不考虑分页)

思路流程⭐:

前端发起一个查询部门的请求

=====》

被DeptController处理

  1. 接收请求;
  2. 调用service查询部门;
  3. 响应(封装在统一响应结果Result中相应给前端)

=====》

DeptService进行逻辑处理(调用mapper接口查询)

=====》

DeptMapper数据处理(selec * from dept;)

=====》

查询访问数据库

代码编写:

1)@Slf4j:定义日志记录对象

4e15fb7d070541529c95ad6b333ee5ea.png

注意:项目开发过程中,尽量不要使用sout输出日志,使用日志记录框架记录日志。

private static Logger log = LoggerFactory.getLogger(DeptController.class);

固定代码,lombok为了简化代码书写,可以直接增加注释@Slf4j,定义日志记录对象

3a43cdc9702f4db08bd293f210f8a9cc.png

2)@GetMapping:限定接口请求方式为GET

a2d86a9ba3da42429572ed97d36fc9b5.png

3)@Autowird:依赖注入

当标注的属性是接口时,注入的是这个接口的实现类

查询操作:

07c1d3ab51f945698a1b73daba2e5581.png

691f5bf3fccd4716a718a88b0ce10cca.png

前后端联调:

解压打包文件到没有中文路径的目录下,双击ngix.exe运行,然后打开设备管理器==详细信息里面查看ngix是否正常运行==访问测试:localhost:90访问

95a87ae9b2b44b1e9e46e389ddcb5662.png

按下F12,打开浏览器的开发者工具,抓取这次网络请求

865918b7076c4503b548c2219281b355.png

d8015da1a253493db52fd45c3b08ba2a.png

2.删除部门

需求分析:

弹出确认框 , 提示 "您确定要删除该部门的信息吗 ?"  如果选择确定 , 则删除该部门 , 删除成功后 , 重新刷新列表页面。  如果选择了取消,则不执行任何操作。

代码编写:

1)@PathVariable:获取路径参数

将URL中占位符参数绑定到Controller处理方法的输入参数中

6e796b1c57524c4aa9f1df4d16dff0c0.png

表示获取路径变量中的id,然后绑定给方法中的id参数

DeptController(设置url,接收响应)==>DeptService(接口)==>DeptServiceImpl(实现类)==>DeptMapper(数据库操作)

删除操作:

29ce21b6925f42cba1685a5022e18f84.png

0cc040c5e2494443ae5759a3169a6ce6.png

前后端联调:

fc87b6c82c684b9c97c439632934dec6.png

3.新增部门

需求分析:

1.1 点击新增部门,会打开新增部门的页面。 

1.2 部门名称,必填,唯一,长度为2-10位。

代码编写:

1)@RequestBody:接收json参数

新增结果:

请求👇

11112bb1d2b2499ea08f9465de47adb3.png


响应👇

4432737e6cce429c82137d28d1d44db1.png

前后端联调:

c675ecd1dafc4137976379a011c5f459.png

ada5e73137c5465fab6b70ce0f3346b1.png

4.Controller优化

08ae4ea581184759b849ff0c3a337baf.png

1677b46bb8bb4f6b909d4ed534963520.png

3fdd4456f247496fa82f37f48d6dce49.png

可以看出上面的三种响应的地址有重复,可以将/depts抽取出来,变成公共地址,将后面的地址中有公共部分的地方进行删除

7e3383713d334aa2b1e6a93323b1c058.png

dc10362f36274e589a19b239a7b9fd38.png

6cdd5579c3d7438f92acbc22a363b59d.png

569ca71eea4a43b58448ca3a9f5b033d.png

5.修改部门(自行实现)

需求分析:

根据id查询到数据然后再修改部门

代码编写:

结合查询和删除操作

修改结果:

测试时,需要注意注释掉删除部门操作,因为二者的url一致,会有冲突。

14ebf9d8b51344d790c4bbc7e6f8c6c9.png

6025859f4fa54ae483a88d130455c725.png

前后端联调:

d90748ec1be548559bfa1e332a3d28d7.png

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[Linux 进程(三)] 进程优先级,进程间切换,main函数参数,环境变量

文章目录 1、进程优先级1.1 Linux下查看进程优先级1.2 Linux 进程优先级的修改PRI and NItop命令配合操作更改优先级 1.3 竞争 独立 并行 并发 2、进程间切换3、Linux2.6内核进程调度队列3.1 活跃进程3.2 过期进程 4 main函数参数 — 命令行参数4.1 利用main函数的参数实现一个…

golang实现rpc方法二:使用jsonrpc库【跨平台】

首先在golang实现rpc方法一net/rpc库中实现了RPC方法,但是那个方法不是跨平台的,没法在其他语言中调用这个实现的RPC方法,接下来我们可以通过jsonroc库实现跨语言的RPC方法。俩种实现方式的代码其实也是差不多的,大差不差&#xf…

Spark---累加器

1.累加器实现原理 累加器用来把 Executor 端变量信息聚合到 Driver 端。在 Driver 程序中定义的变量,在Executor 端的每个 Task 都会得到这个变量的一份新的副本,每个 task 更新这些副本的值后,传回 Driver 端进行 merge。 //建立与Spark框架…

wpf使用Popup封装数据筛选框

(关注博主后,在“粉丝专栏”,可免费阅读此文) 类似于DevExpress控件的功能 这是DevExpress的winform筛选样式,如下: 这是DevExpress的wpf筛选样式,如下: 这是Excel的筛选样式,如下: 先看效果 本案例使用wpf原生控件封装,功能基本上都满足,只是颜色样式没有写…

扫描电镜技术在材料科学中的应用及发展趋势

在材料科学领域,扫描电镜技术扮演着极为重要的角色,广泛应用于多种材料形态结构、界面状况、损伤机制和材料性能预测的研究。本文将深入探讨扫描电镜技术的结构、主要性能、工作原理、试样制备技术以及在不同领域的应用。 第一部分:扫描电镜…

【现代密码学】笔记4--消息认证码与抗碰撞哈希函数《introduction to modern cryphtography》

【现代密码学】笔记4--消息认证码与抗碰撞哈希函数《introduction to modern cryphtography》 写在最前面4 消息认证码与抗碰撞哈希函数MAC概念回顾(是的,我忘记这些缩写是什么了。。)MAC的定义适应性CMA(Chosen Message Attack&a…

Android json功能解析

1. 简介 JAVAScript Object Notation是一种轻量级的数据交换格式具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持)。  JSON采用兼容性很高的文本格式&#xf…

Python | 四、链表

为什么需要链表 在Python中,引入链表这一结构没有像C等语言那样有很多好处,因为Python里的列表和字符串结构已经十分灵活且大小可变,仍保留的好处如下: 列表、字符串等结构是连续存储的,因此如果有一块较小的内存区域…

QuEra 10,000个物理量子位和100个逻辑量子位的量子计算机2026

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

mongoose6.0版以上操作mongodb数据库的基本使用

1、介绍 Mongoose 是一个对象文档模型库,官网 http://www.mongoosejs.net/ 2、作用 方便使用代码操作 mongodb 数据库 3、使用流程 3.1、链接数据库 //1. 安装 mongoose---> npm install mongoose --save//2. 导入 mongoose const mongoose require(&quo…

网络安全B模块(笔记详解)- 网络渗透测试

LAND网络渗透测试 1.进入虚拟机操作系统:BT5中的/root目录,完善该目录下的land.py文件,填写该文件当中空缺的Flag1字符串,将该字符串作为Flag值(形式:Flag1字符串)提交;(land.py脚本功能见该任务第6题) 输入flag sendp(packet) Flag:sendp(packet) 2.进入虚拟机操作…

鸿蒙Harmony-PersistentStorage--持久化存储UI状态储详解

用简单的心境,对待复杂的人生,方能看淡得失,从容入世,潇洒自如,心变得简单了,世界也就简单了 目录 一,定义 二,限制条件 三,使用 一,定义 LocalStorage和App…

Open3D AABB包围盒计算与使用(19)

Open3D AABB包围盒计算与使用(19) 一、算法速览二、算法实现1.代码2.结果少年听雨歌楼上。红烛昏罗帐。壮年听雨客舟中。江阔云低、断雁叫西风。 而今听雨僧庐下。鬓已星星也。悲欢离合总无情。一任阶前、点滴到天明。 一、算法速览 AABB包围盒就是将点云用一个各条边沿着坐…

Android Studio 虚拟机 Unknown Error 解决

前言 尝试了网上很多解决方式,但很遗憾,都没效果; 于是我就想啊🤔,虚拟机属于SDK的一部分,那有没有一种可能,是SDK出了问题; 于是我就换了新的SDK,结果 ---- 完美解决…

halcon学习-blob分析统计木材个数

本文用到的主要算子简单介绍如下: 1、矩形结构开运算opening_rectangle1(); 2、圆形结构腐蚀运算erosion_circle(); 3、统计非连通区域个数count_obj(); 4、合并非连通区域concat_obj(); *读取图像 read_image(image,../wood.jpg) *图像转灰度 rgb1_to_gray(image,…

爬虫补环境jsdom、proxy、Selenium案例:某条

声明: 该文章为学习使用,严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关 一、简介 爬虫逆向补环境的目的是为了模拟正常用户的行为,使爬虫看起来更像是一个真实的用户在浏览网站。这样可以…

《最新出炉》系列入门篇-Python+Playwright自动化测试-9-页面(page)

1.简介 通过前边的讲解和学习,细心认真地小伙伴或者童鞋们可能发现在Playwright中,没有Element这个概念,只有Page的概念,Page不仅仅指的是某个页面,例如页面间的跳转等,还包含了所有元素、事件的概念&#…

大数据仓库开发规范示例

大数据仓库开发规范示例 一、前提概要二、数仓分层原则及定义2.1 数仓分层原则2.2 数仓分层定义 三、数仓公共开发规范3.1 分层调用规范3.2 数据类型规范3.3 数据冗余规范3.4 NULL字段处理规范3.5 公共字段规范3.6 数据表处理规范3.7 事实表划分规范 四、数仓各层开发规范4.1 分…

Linux配置JAR包为服务实现自启动

一、实现bash脚本 1.1 绘图工具 绘图需安装idea的插件plantUML-Integration 只需要上图一个就可以,别的也不需要装。 启动服务的逻辑如下 关闭服务的逻辑如下 1.2 逻辑实现 在/root路径下创建entrance文件,实现逻辑如下 #!/usr/bin/env bash # 2>…

【120版本】最新谷歌浏览器驱动下载地址

在使用selenium时可能会遇到谷歌浏览器和谷歌驱动器版本不一致的问题,并且国内可以搜到的谷歌浏览器下载地址里面最新的驱动器只有114版本的,但目前谷歌浏览器最新版本是120。所以这里记录下最新版本120谷歌驱动器下载地址: Chrome for Test…