Part02 ☀️
Part02 ☀️
今日目标
- SpringBoot进阶案例
- JSON的概念数据传输格式
- 请求消息获取和响应消息封装请求和响应
- Tomcat端口修改配置文件
- SpringBoot常用注解
- SpringIOC的概念
- 使用
Mybatis
集成SpringBoot操作完成数据的增删改查Java操作数据库 - 项目介绍
- 开发流程介绍
- 开发角色介绍
- 开发环境介绍
1. SpringBoot获得参数和数据响应 ✏️🍐
SpringBoot获得参数和数据响应
本节,我们主要讲解,如何接收页面传递过来的请求数据

- 接收普通类型参数传递
- 接收json数据参数
- 接收路径参数
响应
- 返回一般Json数据
请求参数获取实操
代码操作
简单参数 :在向服务器发起请求时,向服务器传递的是一些普通的请求数据。
参数格式:
http://localhost:8848/users/simpleParam?name=韩立&age=188
路径上的参数名字和方法的形参必须一模一样,类型也要一致
操作步骤流程: 👇👇

路径参数:
参数格式:
http://localhost:8848/users/112
- 前端:通过请求URL直接传递参数
- 后端:使用
{…}
来标识该路径参数,需要使用@PathVariable
获取路径参数

响应数据实操
SpringBoot工程,Controller中的方法返回值对象,自动转成了Json字符串

总结
课堂作业
- 根据上述提示,完成路径参数和普通参数的传值,可以参考上述的代码🎤
2. Spring核心概念 🍐 🍐
Spring核心概念
之前我们在编写代码时,需要什么对象,就直接new一个就可以了。 这种做法呢,层与层之间代码就耦合了,费时间且不方便,最好是拿来就用!! 有点像 饭来张口衣来伸手!那么得这么做:
1). 不能使用new对象
2). 应用程序中用到这个对象,就直接从容器中获取,不需要创建
我们想要实现上述解耦操作,就涉及到Spring中的两个核心概念:
- 控制反转: Inversion Of Control,简称IOC。
对象的创建控制权由程序自身转移到外部(容器),这种思想称为控制反转。 对象的创建权由程序员主动创建转移到容器(由容器创建、管理对象)。这个容器称为:IOC容器或Spring容器
- 依赖注入: Dependency Injection,简称DI。
容器为应用程序提供运行时,所依赖的资源,称之为依赖注入。
程序运行时需要某个资源,此时容器就为其提供这个资源。
IOC容器中创建、管理的对象,称之为:bean对象

总结
课堂作业
- 截图下图,说说什么IOC,以及IOC有什么好处?🎤

3. SpringBoot下集成Mybatis框架 🍐 ✏️❤️
SpringBoot下集成Mybatis框架

MyBatis 是一个持久层框架,用于简化 Java 应用程序与关系型数据库的交互。它通过将 SQL 语句与 Java 代码进行映射,提供了一种方便且灵活的方式来访问和操作数据库。
如果左边的知识,了解了,那么可以进行Mybatis初体验了!!👇
在体验之前,需要做如下准备工作:
- 项目工程创建完成后,在pom.xml文件中的dependencies标签内,导入Mybatis的起步依赖和MySQL驱动依赖
<!-- lombok的依赖,能免除get和set方法 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.28</version>
</dependency>
<!-- mybatis的起步依赖 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.3.0</version>
</dependency>
<!-- mysql驱动包依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
2.Idea链接Mysql
按照下图,连接数据库:👇

- 创建mybatis数据库,设置编码为utf-8mb4,创建user表,并导入一下假数据
-- 创建数据库 mybatis
create database if not exists mybatis;
-- 删除原有的user表
DROP TABLE IF EXISTS `user`;
-- 创建user表
CREATE TABLE `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(32) NOT NULL UNIQUE,
`password` varchar(32) NOT NULL DEFAULT '12345678',
`age` int(10) NOT NULL,
`hobby` varchar(50) DEFAULT NULL,
`description` varchar(200) NOT NULL,
`department` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=46 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('8', '赵灵儿', '12345678', '20', '阵法、法术修炼', '纯真善良的女子,拥有强大的阴阳之力', '阴阳家');
INSERT INTO `user` VALUES ('9', '楚留香', '12345678', '32', '剑术、侠义行侠', '风流倜傥的豪客,以智慧和剑术征服江湖', '江湖人士');
INSERT INTO `user` VALUES ('10', '白浅', '12345678', '26', '宫廷舞蹈、仙法修炼', '美丽高贵的仙子,守护爱与正义的力量', '青丘派');
INSERT INTO `user` VALUES ('11', '苏明玉', '12345678', '29', '医术、家族事务', '聪明伶俐的女医生,心系家族兴衰', '苏家');
INSERT INTO `user` VALUES ('13', '李逍遥', '12345678', '28', '剑术、侠义行侠', '潇洒自如的剑客,为爱与正义奋斗', '天墉城');
INSERT INTO `user` VALUES ('14', '陆展元', '12345678', '31', '龙族法术、海洋探险', '勇敢善良的龙族王子,探索海洋奥秘', '东海龙宫');
INSERT INTO `user` VALUES ('18', '萧炎', '12345678', '25', '功夫、修炼', '机缘巧合下拥有强大火焰之力的少年', '草庙村');
INSERT INTO `user` VALUES ('19', '陆九淳', '12345678', '29', '家族事务、剑术修炼', '家族责任重于一切的江湖少年', '陆家');
INSERT INTO `user` VALUES ('20', '韩立', '12345678', '22', '灵力修炼、阵法研究', '机智聪明的年轻修士,掌握神奇的法术', '韩家');
INSERT INTO `user` VALUES ('21', '顾惜朝', '12345678', '28', '法术修炼、守护门派', '心地善良的女子,为守护门派而战', '古玄门');
INSERT INTO `user` VALUES ('22', '九霄真人', '12345678', '35', '仙法修炼、教导弟子', '威严正直的仙人,指导后辈修仙道路', '蓝霞宫');
INSERT INTO `user` VALUES ('23', '姬昌', '12345678', '33', '阴阳术、仙法修炼', '智勇双全的江湖人物,掌握阴阳之力', '太阴派');
INSERT INTO `user` VALUES ('24', '西门吹雪', '12345678', '30', '剑术、侠义行侠', '风流倜傥的剑客,执着追求剑道境界', '独孤家');
INSERT INTO `user` VALUES ('25', '夏冰', '12345678', '26', '魔法修炼、冰雪之力', '美丽神秘的女子,掌握冰雪之力', '幻冥宗');
INSERT INTO `user` VALUES ('26', '杨影枫', '12345678', '27', '暗器、侠义行侠', '冷酷无情的刺客,为正义而战', '影家');
INSERT INTO `user` VALUES ('27', '白素素', '12345678', '24', '文学创作、人界事务', '善良纯真的女子,用文字记录人间百态', '人界');
INSERT INTO `user` VALUES ('28', '独孤剑', '12345678', '32', '剑术、侠义行侠', '心系家族的剑客,剑法高超', '独孤家');
INSERT INTO `user` VALUES ('29', '楚九霄', '12345678', '28', '阵法、家族事务', '机智聪明的年轻人,心系家族荣耀', '楚家');
INSERT INTO `user` VALUES ('30', '谢晓峰', '12345678', '31', '拳脚功夫、江湖恩怨', '正直勇敢的江湖豪杰,忠于兄弟情义', '铁血帮');
INSERT INTO `user` VALUES ('31', '叶孤城', '12345678', '29', '剑术、侠义行侠', '冷酷无情的剑客,追求剑道极致', '武境城');
INSERT INTO `user` VALUES ('32', '李逸风', '12345678', '25', '修炼、探险', '热血青年,勇往直前探索未知世界', '蓝枫大陆');
INSERT INTO `user` VALUES ('33', '萧霜', '12345678', '27', '冰雪法术、守护宗门', '冷艳高傲的女子,守护冰霜宗的利益', '冰霜宗');
INSERT INTO `user` VALUES ('34', '楚玉峰', '12345678', '30', '家族事务、阵法修炼', '机智聪明的年轻人,家族责任重于一切', '楚家');
INSERT INTO `user` VALUES ('35', '陆雪琪', '12345678', '24', '法术、修行', '美丽冷傲的仙子,修炼法术追求修行境界', '青云门');
INSERT INTO `user` VALUES ('36', '明月心', '12345678', '26', '琴音、舞蹈', '温柔善良的女子,以音乐传递爱与希望', '云裳派');
INSERT INTO `user` VALUES ('37', '程灵素', '12345678', '27', '仙法修炼、仙岛事务', '温柔善良的仙子,守护仙岛和平', '蓬莱仙岛');
INSERT INTO `user` VALUES ('38', '韩非', '12345678', '23', '学术研究、阵法修炼', '聪明睿智的年轻人,研究阵法和学术', '韩家');
INSERT INTO `user` VALUES ('40', '戚芳', '12345678', '23', '武功、家族事务', '机智勇敢的女子,为家族荣誉而战', '戚家');
INSERT INTO `user` VALUES ('41', '楚轩辕', '12345678', '28', '家族事务、剑术修炼', '家族责任重于一切的剑客', '楚家');
INSERT INTO `user` VALUES ('42', '秦王', '12345678', '35', '政务、战争', '智勇双全的帝王,统一六国的志向', '秦国');
INSERT INTO `user` VALUES ('43', '李寻欢', '12345678', '30', '剑术、侠义行侠', '聪明机智的江湖人物,正义心十足', '大宛城');
INSERT INTO `user` VALUES ('44', '唐三藏', '12345678', '45', '佛法修行、西行取经', '慈悲心肠的高僧,带领徒弟西天取经', '大唐');
INSERT INTO `user` VALUES ('45', '吴青烟', '12345678', '26', '法术修行、江湖事务', '冷艳高傲的女子,修炼法术追求江湖大业', '青云门');
- 根据数据库表结构,创建User类,属性和数据库user表的字段对应

- 在application.yml配置文件下(如果没有在resources下创建即可),配置数据库信息(驱动、链接、用户名、密码)
配置文件后缀名.yaml .yml都可以 点击查看详细步骤
# 顶格写
spring:
#数据库连接信息
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false
username: root
password: 1234
#Mybatis配置
mybatis:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
map-underscore-to-camel-case: true
- 创建UserMapper接口,添加@Mapper注解
@Mapper
public interface UserMapper{
}
需求1:查询id为30的用户,返回浏览器可以先自己分析
点击查看详细步骤
- 在UserMapper接口中,创建getById方法,并且在方法上添上注解@Select,写上sql语句。

- 在UserController.java中自动注入
UserMapper
接口的代理对象,并在getById方法中调用这个对象的getById方法,输出结果。

- 重新启动程序,访问http://localhost:8848/user?id=30 观察返回值是否为JSON格式。

需求2:查询名字叫 陆雪琪的用户,返回浏览器
点击查看详细步骤
- 在UserMapper接口中,创建selectByName方法,并且在方法上添上注解@Select,写上sql语句。

在UserController.java中自动注入
UserMapper
接口的代理对象,并在selectByName方法中调用这个对象的selectByName方法,输出结果。重新启动程序,访问http://localhost:8080/selectbyname?name=陆雪琪 观察返回值是否为JSON格式。
需求3:爱好中含有 "法术" 的用户,返回浏览器
点击查看详细步骤
在UserMapper接口中,创建selectLikeName方法,并且在方法上添上注解@Select,写上sql语句。
在UserController.java中自动注入
UserMapper
接口的代理对象,并在selectLikeName方法中调用这个对象的selectLikeName方法,输出结果。重新启动程序,访问http://localhost:8080/selectlikename?hobby=法术 观察返回值是否为JSON格式。
需求4:删除用户为 韩立的用户,返回 ok 字符串
点击查看详细步骤
在UserMapper接口中,创建deleteByName方法,并且在方法上添上注解@Delete,写上sql语句。
在UserController.java中自动注入
UserMapper
接口的代理对象,并在deleteByName方法中调用这个对象的deleteByName方法,输出结果。重新启动程序,访问http://localhost:8080/deleteByName?name=韩立 观察返回值是否为JSON格式。
需求5:将id为36的用户,hobby修改为 听焱哥上课,返回 ok 字符串
点击查看详细步骤
在UserMapper接口中,创建updateById方法,并且在方法上添上注解@Update,写上sql语句。
在UserController.java中自动注入
UserMapper
接口的代理对象,并在updateById方法中调用这个对象的updateById方法,输出结果。重新启动程序,访问http://localhost:8080/updatebyid?id=36&hobby=听焱哥上课 观察返回值是否为JSON格式。
总结
课堂作业
- 如果你完成上面的5个需求,那么你掌握了SpringBoot集成Mybatis的操作 🎤
4. 软件开发整体介绍 🍐
软件开发整体介绍
作为一名软件开发工程师,我们需要了解在软件开发过程中的开发流程, 以及软件开发过程中涉及到的岗位角色,角色的分工、职责, 并了解软件开发中涉及到的三种软件环境。那么这一小节,我们将从 三个方面,来整体上介绍一下软件开发。
软件开发流程 🍐

岗位/角色 | 职责/分工 |
---|---|
项目经理 | 对整个项目负责,任务分配、把控进度 |
产品经理 | 进行需求调研,输出需求调研文档、产品原型等 |
UI 设计师 | 根据产品原型输出界面效果图 |
架构师 | 项目整体架构设计、技术选型等 |
开发工程师 | 功能代码实现 |
测试工程师 | 编写测试用例,输出测试报告 |
运维工程师 | 软件环境搭建、项目上线 |
角色分工是在一个项目组中比较标准的角色分工, 但是在实际的项目中, 有一些项目组由于人员配置紧张, 可能并没有专门的架构师或测试人员, 这个时候可能需要有项目经理或者程序员兼任
软件环境 🍐

1). 开发环境(development)
我们作为软件开发人员,在开发阶段使用的环境,就是开发环境,一般外部用户无法访问 。
比如,我们在开发中使用的 MySQL 数据库和其他的一些常用软件,我们可以安装在本地, 也可以安装在一台专门的服务器中, 这些应用软件仅仅在软件开发过程中使用, 项目测试、上线时,我们不会使用这套环境了,这个环境就是开发环境。
2). 测试环境(testing)
当软件开发工程师,将项目的功能模块开发完毕,并且单元测试通过后,就需要将项目部署到测试服务器上,让测试人员对项目进行测试。那这台测试服务器就是专门给测试人员使用的环境, 也就是测试环境,用于项目测试,一般外部用户无法访问 。
3). 生产环境(production)
当项目开发完毕,并且由测试人员测试通过之后,就可以上线项目,将项目部署到线上环境,并正式对外提供服务, 这个线上环境也称之为生产环境。
总结
课堂作业
- 请回答软件的开发流程是什么?🎤
- 请回答软件开发过程中,有哪些角色,以及实际工作中这些角色都需要招聘吗?
- 测试环境和生产环境有什么区别?