赞
踩
是由Spring团队开发的,整合了Spring框架,SpringMVC框架的所有jar包.
好处:
1.简化了Maven的操作,以前自己找jar包的坐标,现在直接创建springboot工程勾选你要的功能
2.SpringBoot项目可以快速启动/关闭,就是像服务器(Tomcat)一样的操作.被整合了
3.简单快速整合其他技术
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解析:
创建项目

修改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>
代码结构

编辑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);
}
}

解释:


JDK动态代理
特点:
CGLIB动态代理
特点:
1.不管被代理者是否有接口,都可以为其创建代理对象.
2. 代理对象是目标对象的子类. 继承关系.
结论:
1.Spring中如果有接口,默认使用JDK代理方式,如果没有接口,则默认使用CGLIB代理方式.
2.Spring5以后,自身接口对象创建代理对象时,使用cglib
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查询数据库
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);
页面效果展现

业务需求
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

业务需求
说明: 要求按照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字符串,返回给浏览器,浏览器将字符串回显(展示)在页面上。
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

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

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,但它只支持html。当微软推出asp技术后,第一代动态网站技术诞生,微软同时推出了ISS以支持asp技术。随着sun公司的j2ee架构横空出世,提出第二代动态网站技术规范servlet、jsp后,servlet容器就如雨后春笋。Tomcat、Jetty、GlassFish、JBoss、WebSpare、WebLogic,后三者非常厉害,性能超群,但由于昂贵的费用及微服务新架构的兴起,而开始没落,Jetty一直号称性能远胜Tomcat,但Tomcat的霸主地位已经难以撼动(就像编程语言中的java)。目前市场主流都采用Tomcat,特别国内一线互联网企业,而国企采用WebSpare和WebLogic居多。
我们按sun公司的java规范写的servlet(HttpServlet)就专门支持网站的请求request(HttpServletRequest)和响应response(HttpServletResponse)的处理。
各大web中间件厂商按照servlet规范做自己的实现如tomcat的servlet-api.jar。

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

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

头信息

响应头

请求头

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。