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

前言:基于黑马的学习总结,该文章的案例是完成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: 查询返回记录数 =每页展示记来数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

语言-逆行者

一起交流学习

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值