基于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接口
- impl包
说明:需要在实现类中加上
@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: 查询返回记录数 =每页展示记来数