文章目录
一,SpringBoot
–1,概述
是由Spring团队开发的,整合了Spring框架,SpringMVC框架的所有jar包.
好处:
1.简化了Maven的操作,以前自己找jar包的坐标,现在直接创建springboot工程勾选你要的功能
2.SpringBoot项目可以快速启动/关闭,就是像服务器(Tomcat)一样的操作.被整合了
3.简单快速整合其他技术
–2,使用
1.创建SpringBoot项目–配置Maven





2.启动服务器,并且访问服务器里的资源
3,添加类
package cn.tedu.cgb2108boot01;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class Hello {
@RequestMapping("abc")
public String get(){
return "hello boot~";
}
}
4,打开浏览器测试
http://localhost:8080/abc
修改pom.xml
添加SpringBoot的依赖包
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.tedu</groupId>
<artifactId>jkboot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
创建RunApp.java
SpringBoot使用了全新的运行方式,两句话,直接执行main方法,默认启动tomcat中间件,端口为8080。
注意:类必须放在其他类的父级目录,它底层使用了包扫描机制,扫描的要求只扫描本类所在的目录极其子目录。
package cn.tedu.jk;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication //标识为springboot项目
public class RunApp {
public static void main(String[] args) {
//全新的启动方式,执行run方法会自动启动集成的tomcat中间件
SpringApplication.run(RunApp.class, args);
}
}
创建HelloController.java
目前市场主流已经采用注解方式进行开发
package cn.tedu.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController//接受浏览器的请求 并返回json数据
public class HelloController {
// @RequestMapping("hi")//只匹配一个路径
@RequestMapping({"hi","hello/hi"})//匹配两种路径/hi或者/hello/hi
public String hi() {
return "hi springboot!";
}
}
启动Tomcat WebServer
ApacheTomcat是一个非常著名的web中间件,于之前学习的技术的不同在于它提供了web程序的容器环境,专门用于网站服务。
SpringBoot默认集成了tomcat中间件,会自动把项目打包jar发布到tomcat,这样我们就形成了自己的网站。但这个网站只能局域网访问,如果外网(广域网),自己购买一个网站,部署上去即可。

注意:不用服务时,关闭tomcat服务

url解析:
- localhost代表本机,等价于ip:127.0.0.1
- 8080代表本机的服务,tomcat默认端口8080
- /hi等请求地址在一个web服务中请求具有唯一性(多个就没法区分了)
SpringBoot整合Mybatis
创建项目

修改pom.xml文件
说明: 在新项目中添加依赖信息
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--引入插件lombok 自动的set/get/构造方法插件 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--mybatis依赖包-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<!--jdbc依赖包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
代码结构

SpringBoot整合Mybatis
编辑application.yml
#配置端口号
server:
port: 8090
#管理数据源
spring:
datasource:
#高版本驱动使用
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/jt?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
#设定用户名和密码
username: root
password: root
#SpringBoot整合Mybatis
mybatis:
#指定别名包
type-aliases-package: com.jt.pojo
#扫描指定路径下的映射文件
mapper-locations: classpath:/mybatis/mappers/*.xml
#开启驼峰映射
configuration:
map-underscore-to-camel-case: true
将Mapper接口交给容器管理
通过@Mapper注解 管理对象
@Mapper //将Mapper接口交给Spring容器管理.
public interface UserMapper {
List<User> findAll();
}
通过包扫描的方式,管理mapper接口 编辑主启动类, 指定包扫描路径
@SpringBootApplication
//按照指定的包路径,扫描mapper的接口管理对象
@MapperScan("com.jt.mapper")
public class SpringbootSsmApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootSsmApplication.class, args);
}
}
Mybatis 单元测试案例
@SpringBootTest
class SpringbootSsmApplicationTests {
@Autowired //注入指定的对象
private UserMapper userMapper; //IDEA 编译提示 不影响执行
/**
* 测试SpringBoot整合Mybatis
*/
@Test
public void testfindAll(){
List<User> userList = userMapper.findAll();
System.out.println(userList);
}
}
关于Mapper接口对象的说明

解释:
- 将接口交给Spring容器管理,spring会根据class类型,动态的选择创建代理对象. 最终将代理对象交给spring容器管理.

- 代理对象的使用

代理方式介绍
JDK动态代理
特点:
- 要求被代理者,必须有接口.
- 默认条件下如果有接口,则使用JDK动态代理
CGLIB动态代理
特点:
1.不管被代理者是否有接口,都可以为其创建代理对象.
2. 代理对象是目标对象的子类. 继承关系.
结论:
1.Spring中如果有接口,默认使用JDK代理方式,如果没有接口,则默认使用CGLIB代理方式.
2.Spring5以后,自身接口对象创建代理对象时,使用cglib
SSM框架案例
SSM是SpringMVC,Spring,Mybatis的简称
业务需求
用户访问URL: http://localhost:8090/findAll
返回值: List 的JSON串.
框架关系图

层级代码实现

编辑UserController
@RestController //@ResponseBody 将list集合转化为json
public class UserController {
@Autowired
private UserService userService;
/**
* URL: http://localhost:8090/findAll
* 参数: 无
* 返回值: List<User>
*/
@RequestMapping("/findAll")
public List<User> findAll(){
return userService.findAll();
}
}
编辑UserService
@Service
public class UserServiceImpl implements UserService{
@Autowired
private UserMapper userMapper;
@Override
public List<User> findAll() {
return userMapper.findAll();
}
}
编辑UserMapper
1.mapper接口
public interface UserMapper {
List<User> findAll();
}
2.mapper映射文件
<mapper namespace="com.jt.mapper.UserMapper">
<!--必须配置别名包-->
<select id="findAll" resultType="User">
select * from demo_user
</select>
</mapper>
页面效果展现

框架代码案例练习
根据ID查询数据
需求说明
根据Id查询数据库
URL: http://localhost:8090/findUserById?id=1
返回值: User对象
编辑UserController
/**
* 需求: http://localhost:8090/findUserById?id=1
* 参数接收: id=1
* 返回值: User对象
*/
@RequestMapping("/findUserById")
public User findUserById(Integer id){
return userService.findUserById(id);
}
编辑UserService
@Override
public User findUserById(Integer id) {
return userMapper.findUserById(id);
}
编辑UserMapper
//注解和映射文件只能二选一
@Select("select * from demo_user where id = #{id}")
User findUserById(Integer id);
页面效果展现

根据age和sex查询数据
业务需求
URL: http://localhost:8090/findUserByAS
返回值: List集合封装.
编辑UserController
/**
* URL地址: http://localhost:8090/findUserByAS?age=18&sex=女
* 参数: age=18 sex=女
* 返回值: List<集合>
* 参数接收: 如果是多个参数,并且参数名称与属性名称一致,可以使用对象接收
*/
@RequestMapping("/findUserByAS")
public List<User> findUserByAS(User user){
return userService.findUserByAS(user);
}
编辑UserService
@Override
public List<User> findUserByAS(User user) {
return userMapper.findUserByAS(user);
}
编辑UserMapper

RestFul参数传递
业务需求
说明: 要求按照id修改数据
restFul请求路径: http://localhost:8090/updateById/1/黑熊精/3000/男
编辑UserController
/**
* URL: http://localhost:8090/updateById/1/黑熊精/3000/男
* 参数: 4个
* 返回值: "修改成功!!!!"
* restFul结构 参数分析 {属性名称}
* 参数接收:
* 1. 单个参数使用 @PathVariable Integer id接收
* 2. 如果多个参数接收 使用对象 mvc自动提供的功能.
*/
@RequestMapping("/updateById/{id}/{name}/{age}/{sex}")
public String updateById(User user){
userService.updateById(user);
return "用户修改成功";
}
编辑UserService
//spring整合mybatis之后,事务自动提交.
@Override
public void updateById(User user) {
userMapper.updateById(user);
}
编辑UserMapper
@Update("update demo_user set name=#{name},age=#{age},sex =#{sex} where id=#{id}")
void updateById(User user);
扩展
执行过程

url 的解析执行过程:
浏览器输入的url,就会被解析后传入web中间件(/hi),web中间件再会进一步的解析,找到对应的Controller的某个注解里对应的url @RequestMapping({"/","/hi"}) ,从而就找到HelloController的hi()方法。最终利用反射执行这个类的方法(将来这个方法中就用来编写实现业务逻辑代码)。因为使用了@RestController,返回的String字符串对象底层会使用jackson工具类转换java对象为json字符串,返回给浏览器,浏览器将字符串回显(展示)在页面上。
常见问题:8080端口冲突
Tomcat服务不会自动关闭,需要手动关闭,如不关闭,下次启动就会报下面错误:
port 8080 was already in use. 端口8080已经被占用。关闭服务,重新启动即可。

仍未解决的话,以下三种方式任选一个来测试.
1,需要执行DOS命令处理:
C:\Users\lpx>netstat –ano --查看所有端口号,找到8080端口对应的PID号
C:\Users\lpx>taskkill -pid 688 –f --杀死688进程号
2,可能是因为电脑里安装过Oracle数据库:
要找到Oracle的服务OracleXETNSListener,停掉.
3,直接使用yml方式配置修改端口号:
在src/main/resources下添加application.yml文件,内容如下:
server:
port: 8090
清除项目缓存,再次重启服务,测试即可: http://localhost:8090/hello/hi

@SpringBootTest
问题分析
需求: 有时在执行测试方法时,必须编辑大量的Controller等代码,虽然可以测试成功,但是显得繁琐.
核心机制: 让Spring容器启动并且为对象提供服务.
@SpringBootTest
说明: SpringBoot为了测试方便专门开发了@SpringBootTest 主要的作用就是启动Spring容器. 完成测试案例.
注意事项: 测试类应该在测试包下完成,并且在主启动类的同包及子包中编辑.

@SpringBootTest 用法
package com.jt.test;
import com.jt.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
/**
* 注意事项: 测试代码必须在主启动类的同包及子包中编辑
* @SpringBootTest用法说明:
* 只要在该类中 执行@Test测试方法,则就会启动Spring容器.
*/
@SpringBootTest
public class TestUserDemo {
@Autowired
private User user;
/**
* 测试方法要求:
* 1.不能有返回值 必须为void
* 2.不能携带参数
* 3.测试方法名称 不能叫test
*/
@Test
public void testUser1(){
System.out.println(user);
}
}
Apache Tomcat
Web中间件历史
最早的网站技术是Apache,但它只支持html。当微软推出asp技术后,第一代动态网站技术诞生,微软同时推出了ISS以支持asp技术。随着sun公司的j2ee架构横空出世,提出第二代动态网站技术规范servlet、jsp后,servlet容器就如雨后春笋。Tomcat、Jetty、GlassFish、JBoss、WebSpare、WebLogic,后三者非常厉害,性能超群,但由于昂贵的费用及微服务新架构的兴起,而开始没落,Jetty一直号称性能远胜Tomcat,但Tomcat的霸主地位已经难以撼动(就像编程语言中的java)。目前市场主流都采用Tomcat,特别国内一线互联网企业,而国企采用WebSpare和WebLogic居多。
servlet-api.jar
我们按sun公司的java规范写的servlet(HttpServlet)就专门支持网站的请求request(HttpServletRequest)和响应response(HttpServletResponse)的处理。
各大web中间件厂商按照servlet规范做自己的实现如tomcat的servlet-api.jar。

注:我们的关注点在于实现项目,这里会使用tomcat,初步了解底层结构,不必过渡深入研究。
Git忽略特殊目录和文件
gitignore
在git工作空间的根目录下创建文本文件 .gitignore git忽略,配置如下:
.gitignore
*.class
#maven ignore
target/*
#eclipse ignore
.settings/
.project
.classpath
注意:target临时目录配置了不生效
git rm -r --cached . #把本地缓存删除(改变成未track状态),然后再提交
通过变通方式暂时解决:配置 *.class,禁止上传class文件
扩展:请求响应过程
HTTP协议
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML文件、图片文件、查询结果等)。
执行过程
怎么浏览器输入url就可以找到我们写的controller进行执行并且返回呢?
其实这底层是有一套标准的,这个标准称为HTTP协议。我们浏览器成输入的http://这就代表执行http协议。

谷歌浏览器查看请求响应信息

头信息

响应头

请求头

本文介绍了如何在SpringBoot项目中整合Mybatis,包括添加依赖、配置数据源、创建Mapper接口和Controller、单元测试,以及实战案例如根据ID和条件查询数据。涵盖了启动流程、常见问题解决和测试用法。
2771

被折叠的 条评论
为什么被折叠?



