Spring Boot开发介绍

  • Spring Boot介绍
  • 安装Spring Boot插件
  • 创建Spring Boot项目
    • Idea 创建Spring Boot项目失败
      • 解决方法1-更换为aliyun地址创建Spring Boot项目
      • 解决方法2-手工到spring网站生成项目后导入
  • Maven pom文件介绍
  • SpringBoot 项目打包
    • Maven jar包下载问题
    • 项目运行报错没有主清单信息
  • SpringBoot properties配置文件
  • SpringBoot yml文件说明
    • 多环境编辑
  • 利用properties文件为属性赋值/加载固定配置
  • lombok插件
    • Idea 安装插件
    • pom.xml 文件中添加依赖jar包
    • lombok 插件注解
  • SpringBoot项目介绍
    • 项目入口
    • 项目测试入口
    • SpringBoot支持热部署
    • 数据源介绍
    • 整合Mybatis相关配置
      • Mybatis相关注解
      • Mybatis 定义包别名及指定Mapper文件扫描路
      • 关于绑定异常报错处理
      • 数据库密码问题
      • Mapper对象创建流程
    • mybatis 采用基于接口开发方式
    • 整合Mybatis-plus
      • MP介绍
      • MP原理介绍
      • MP SQL转换过程
      • Mybatis-plus 注解
      • MP queryWrapper 条件构造器
      • Mybatis-plus 案例1
        • 导入jar依赖包
        • pojo类
        • 接口类继承BaseMapper
        • 修改YML配置文件
      • Mybatis 案例2
      • 解决注入警告问题
    • SpringMVC
      • Servlet作用
      • Spring MVC 重要组件说明(重要)
      • Sping MVC 调用过程
      • Sping MVC 开发注解
      • Sping MVC 简单参数传递
    • SpingMVC重定向和转发
      • 转发
      • 重定向
      • 重定向到外部网站
      • RestFul风格
        • 删除多个id的数据
  • Spring 整合其他框架
    • idea 编辑html时引入变量时显示错误
  • jQuery 获取数据
    • Ajax下载
      • Ajax 请求
      • Ajax 请求类型
  • Vue开发
    • Vue 展现问题{{xxx}}问题解决
    • MVVM 思想
    • Vue命令
    • 表单修饰符
    • 计算属性
    • 计算属性与方法的区别
    • 监听器
    • 过滤器
      • 过滤器级联
    • Vue声明周期
    • 数组
    • 组件

Spring Boot介绍

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
作用:SpringBoot的推出 让程序员更加专注于业务处理, SpringBoot是学习微服务框架基石
Spring 和SpringBoot关系 :
SpringBoot是Spring的工具API框架

安装Spring Boot插件

1)Idea 商业版本,自带Spring Boot插件无需安装
2)Idea 社区版本,需要安装Spring Boot 插件

创建Spring Boot项目

1)Idea商业版本创建项目:

2)选择依赖项:

Idea 创建Spring Boot项目失败

解决方法1-更换为aliyun地址创建Spring Boot项目

更换aliyun地址:https://start.aliyun.com/

解决方法2-手工到spring网站生成项目后导入

地址**:https://start.spring.io/

Maven pom文件介绍

parent 标签:

<!--1.parent标签  父级工程SpringBoot将现有主流的框架都进行了整合,在内部完成了jar包的依赖的配置.如果用户需要,则只添加某些核心包那么所有的依赖都会按照规则自动的下载.--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.5</version><relativePath/> <!-- lookup parent from repository --></parent>

依赖项:

<!--Springboot通过启动项的方法的 进行jar包文件的加载.同时这些功能中的配置项 SpringBoot有些也会自动的完成.无特殊的要求 无需手动的配置.开箱即用的思想!!!!--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

build标签:

 <!--关于build标签说明:1、build标签是Maven工程的要求。2、作用:完成项目打包发布等一系列的功能3、该标签的使用是SpringBoot必须的,如果没有该标签则项目无法使用jar包运行--><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>

SpringBoot 项目打包


在Maven本地仓库中找到对应的jar包

将jar包部署到指定目录(目录中不要包含中文、空格等特殊字符)


运行项目:

java -jar springboot_demon_8080.jar

Maven jar包下载问题

解决方案:
1.检查maven配置是否正常 (切换maven软件)
2.检查IDEA配置maven是否正确
3.去本地仓库中删除原始jar包文件 ,之后更新maven重新下载.

项目运行报错没有主清单信息


解决方案:
检查是否有build标签

<!--关于build标签说明1.build标签它是maven工程的要求.2.作用: 完成项目的打包/发布等一系列的功能.3.该标签的使用是SpringBoot必须的,如果没有该标签则项目无法使用jar包运行--><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>

SpringBoot properties配置文件

说明: 虽然pro文件是SpringBoot默认配置文件.但是其中编码格式比较繁琐,不便于查看.所以在项目中一般使用YML文件.
注1:程序读取properties文件时默认为iso-8859-1字符集格式

SpringBoot yml文件说明

#YML文件语法
##1.YML数据结构K-V结构
##2.k与v需要使用 ”:空格“ 链接
##3.YML配置文件有父子级关系,所以注意缩进项的位置
server:port: 8090 #配置端口servlet:   #web项目发布目录context-path: / #/表示根目录

多环境编辑

环境分割线:—
默认环境选择:
spring:
profiles:
active: prod
定义环境名称:
spring:
config:
activate:
on-profile: prod
application.yml 详细配置:

#默认环境选项
spring:profiles:active: prod
#环境分割
---
spring:config:activate:on-profile: prod
server:port: 80 #配置端口servlet:   #web项目发布目录context-path: / #/表示根目录
#环境分割
---
spring:config:activate:on-profile: test
server:port: 80 #配置端口servlet:   #web项目发布目录context-path: / #/表示根目录

注1:SpringBoot项目中,需要容器管理的对象代码必须是主启动类的同级目录或者子目录中。

利用properties文件为属性赋值/加载固定配置


import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;@Component   //将对象交给Spring容器管理
@PropertySource(value = "classpath:/dept.properties",encoding = "UTF-8")  //加载指定配置文件
public class Dept {//spel表达式@Value("${dept.id}")private  Integer id;@Value("${dept.name}")private  String  name;@Value("${dept.id2}")private Integer id2;@Value("${dept.name2}")private String  name2;@Overridepublic String toString() {return "Dept{" +"id=" + id +", name='" + name + '\'' +", id2=" + id2 +", name2='" + name2 + '\'' +'}';}
}

dept.properties文件

@程序读取时时默认为iso-8859-1字符集
dept.id2=110
dept.name2=spring测试

lombok插件

Idea 安装插件

pom.xml 文件中添加依赖jar包

     <!--引入插件lombok 自动的set/get/构造方法插件  --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency>

lombok 插件注解

@Data // data 是lombok 使用最多的注解, 自动生成get/set/toString/equals/hashCode 方法
@Accessors(chain = true) //重写set方法,返回this对象
@NoArgsConstructor //无参构造
@AllArgsConstructor //全参构造

SpringBoot项目介绍

项目入口

@SpringBootApplication注解,标注的类项目启动时会自动加载Spring容器

项目测试入口

@SpringBootTest注解,标注的类会自动加载Spring容器管理的对象

SpringBoot支持热部署

注1:支持热部署后硬件资源要求较高,建议8G内存以上
pom.xml引入热部署依赖jar包

     <!--支持热部署  缺点:IDEA使用特别占内存 配置了热部署之后内存开销将会增加   --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency>

idea 开启自动编译功能:

修改idea配置支持热部署:
IntelliJ IDEA开启热部署功能都会写到在IntelliJ IDEA中的注册表中开启compiler.automake.allow.when.app.running选项(Ctrl+Alt+Shift+/ 或者 Ctrl+Alter+A 选择 Registry),
此选项在IntelliJ IDEA 2021.2之后的版本迁移到高级设置中
安装中文插件后:

数据源介绍

application.yml

spring:datasource:url: jdbc:mysql://127.0.0.1:3306/jtadmin?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=trueusername: root#检查密码是否正确password: root

参数介绍:
serverTimezone=GMT%2B8 : GMT代表时区, %2B 代表“+” 东 , 8 东8时区;新版本驱动必须配置时区
useUnicode=true 代表使用Unicode编码
characterEncoding=utf8 代表使用utf-8字符集
autoReconnect=true 是否自动重连
allowMultiQueries=true 是否允许批量操作,同时执行多个SQL

整合Mybatis相关配置

Mybatis相关注解

@Mapper : 在单个Mapper接口类中添加,将当前接口交给Spring容器管理
@MapperScan(“com.jt.mapper”) :在主启动类上添加此注解开启Mapper接口扫描,指定相关目录后不需要在单独针对每个接口进行标注

Mybatis 定义包别名及指定Mapper文件扫描路

application.yml:

#SpringBoot整合Mybatis配置
mybatis:#定义别名包type-aliases-package: com.jt.pojomapper-locations: classpath:/mybatis.mappers/*.xml#开启驼峰映射configuration:map-underscore-to-camel-case: true

相关Mapper配置文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace1.Mapper.xml配置文件的唯一标识2.需要与Mapper接口保持一致.UserMapper.findAll();  通过方法映射Sql语句!!!
-->
<mapper namespace="com.jt.mapper.DemoUserMapper"><!--编辑更新操作  #mybatis中的一种表达式写法 --><update id="updateUser">update demo_user set name=#{nowName} where name=#{oldName}and sex=#{sex}</update><!--完成用户入库操作 id="与方法名称保持一致"sql结束时不需要添加;号 在Mysql数据库中执行;号没有问题,但是如果在Oracle中执行则必然报错.--><insert id="insertUser">insert into demo_user(id,name,age,sex)value(null,#{name},#{age},#{sex})</insert><!--查询标签必须有返回值resultType :直接返回POJO对象的数据  单表查询resultMap: 适用于关联查询的结果封装 一般采用第三方对象接收问题:能否将不变的包路径进行优化???解决方案: 定义别名包即可说明:resultType="包名.类名"  resultType="com.jt.pojo.DemoUser"定义别名包type-aliases-package: com.jt.pojoresultType="DemoUser" 可以直接返回对象的名称程序解析时: 首先根据别名包的名称进路径的拼接 com.jt.pojo.DemoUser--><select id="findAll" resultType="DemoUser">select * from demo_user</select><!--更新操作的标签就是为了方便程序员开发时使用,程序执行时没有任何的差别,所以可以混用<insert id=""></insert>-->
</mapper>

关于绑定异常报错处理

绑定异常:mapper的接口与xml的映射文件绑定异常

 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.jt.mapper.DemoUserMapper.findAll

解决方法:
1).检查Mapper接口的路径

2).检查mapper.xml引入过程

3).检查mapper.xml映射文件

4).检查方法名称
检查mapper接口方法名称,与标签的ID是否一致.

5). 清空/重新编译项目
1).clean项目

2).build项目

7).检查目录层级,是否使用/进行分割.

数据库密码问题

问题描述:创建数据库密码时以数字0开头,例如 012345时Mysql数据库存储时会去掉0;
解决方案:如果以特殊数字开头则用双引号包裹“012345”

Mapper对象创建流程

mybatis 采用基于接口开发方式

1、定义pojo类的操作接口

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jt.pojo.DemoUser;import java.util.List;
//@Mapper  //将mapper接口交给Spring管理
public interface DemoUserMapper extends BaseMapper<DemoUser> {//使用MP不要重载里面的方法List<DemoUser> findAll();void insertUser(DemoUser User);void updateUser(String oldName, String nowName, String sex);
}

2、定义SQL

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace1.Mapper.xml配置文件的唯一标识2.需要与Mapper接口保持一致.UserMapper.findAll();  通过方法映射Sql语句!!!
-->
<mapper namespace="com.jt.mapper.DemoUserMapper"><!--编辑更新操作  #mybatis中的一种表达式写法 --><update id="updateUser">update demo_user set name=#{nowName} where name=#{oldName}and sex=#{sex}</update><!--完成用户入库操作 id="与方法名称保持一致"sql结束时不需要添加;号 在Mysql数据库中执行;号没有问题,但是如果在Oracle中执行则必然报错.--><insert id="insertUser">insert into demo_user(id,name,age,sex)value(null,#{name},#{age},#{sex})</insert><!--查询标签必须有返回值resultType :直接返回POJO对象的数据  单表查询resultMap: 适用于关联查询的结果封装 一般采用第三方对象接收问题:能否将不变的包路径进行优化???解决方案: 定义别名包即可说明:resultType="包名.类名"  resultType="com.jt.pojo.DemoUser"定义别名包type-aliases-package: com.jt.pojoresultType="DemoUser" 可以直接返回对象的名称程序解析时: 首先根据别名包的名称进路径的拼接 com.jt.pojo.DemoUser--><select id="findAll" resultType="DemoUser">select * from demo_user</select><!--更新操作的标签就是为了方便程序员开发时使用,程序执行时没有任何的差别,所以可以混用<insert id=""></insert>-->
</mapper>

3、测试代码

    @Testpublic void testInsert(){DemoUser user = new DemoUser();user.setId(0).setName("mybatis信息2").setAge(18).setSex("男");userMapper.insertUser(user);}@Testpublic void testUpdate(){String oldNmae="mybatis信息";String nowNmae="测试信息";String sex="男";userMapper.updateUser(oldNmae,nowNmae, sex );}

整合Mybatis-plus

MP介绍

MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

Mybatis-plus官网:

MP原理介绍

1.对象与数据表进行关联 @TableName
2.MP采用BaseMapper的方式 将公共的接口方法进行了抽取. 采用泛型T的方式进行约束
3.MP将用户操作的对象在底层自动的转化为Sql语句!!!

MP SQL转换过程

对象方法: userMapper.insert(User对象);
Sql语句: insert into demo_user(id,name…) value(100,xxx…)
步骤:
1.根据userMapper找到对应的class类型
2.根据userMapper的类型通过反射机制获取父级接口类型BaseMapper
3.找到BaseMapper类型之后,获取泛型类型 User.class
4.获取User.class之后,获取class的注解名@TableName注解.获取注解名称. 至此表名获取成功
5.根据User.class获取其中的属性名称.之后获取属性上的@TableField 获取字段名称.
6.之后利用对象的get方法获取属性的值最终实现了Sql语句的拼接过程.
7.MP将整理好的Sql交给Mybatis(jdbc)去处理. 最终实现了以对象的方式操作数据库.

Mybatis-plus 注解

@TableName:对象与表绑定
@TableId:设置主键
@TableField:设置表字段与对象属性绑定

MP queryWrapper 条件构造器

queryWrapper 条件构造器 用于根据对象中不为null的属性拼接where条件;若两个方法之间不使用链接符(and/or)默认为and可以默认不写
常用方法:
.gt():大于
.lt():小于
.eq():等于
.ge():大于等于
.le():小于等于
.ne():不等于
.or():或者or
.and(): 并且and,默认链接符可以省略
.orderByDesc:按照指定列降序排列
.in(): SQL语句中的in关键字,不支持基本类型,需要使用对应的包装类型
.select():挑选指定的字段,进行查询

org.springframework.util.StringUtils类中hasLength()方法可以判断字符串是否为空串或者null.
注1:更多方法介绍参考官网条件构造器章节

测试代码:

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jt.mapper.DemoUserMapper;
import com.jt.pojo.DemoUser;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.List;@SpringBootTest
public class TestMP {@Autowiredprivate DemoUserMapper userMapper;@Testpublic void insert(){DemoUser demoUser = new DemoUser();demoUser.setName("MP测试").setSex("男").setAge(19);userMapper.insert(demoUser);}@Testpublic void updateById(){DemoUser demoUser = new DemoUser();demoUser.setName("中午吃什么").setAge(18).setId(234);/*** 原则:根据对象中部位null的属性当做set条件* 如果是ById的操作,则ID必须赋值并且ID当做唯一where条件*/userMapper.updateById(demoUser);}/*** 1、查询id=21的用户   1条记录* 2、查询name=“白骨精” sex=女 的用户 List* 知识点:* 1、queryWrapper 条件构造器 拼接where条件的*    根据对象中不为null的属性拼接where条件*/@Testpublic void testSelect(){//查询id=21的用户DemoUser demoUser= userMapper.selectById(21);System.out.println(demoUser);//根据属性查询DemoUser demoUser1=new DemoUser();demoUser1.setName("白骨精").setSex("女");QueryWrapper<DemoUser> queryWrapper = new QueryWrapper<>(demoUser1);List<DemoUser> userList=userMapper.selectList(queryWrapper);System.out.println(userList);}/*** 需求:查询age>18算 并且性别为女的用户* Sql:select  *  from  demo_user where age > 18 and sex="女"* 特殊字符: >:gt <:lt   =:eq*          >=:ge  <=: le* 默认链接符:and 可以不写,若要使用or调用.or()方法*/@Testpublic void testSelect2(){QueryWrapper<DemoUser> queryWrapper= new QueryWrapper<>();queryWrapper.gt("age", 18).eq("sex", "女");List<DemoUser> userList = userMapper.selectList(queryWrapper);System.out.println(userList);}/*** 联系like关键字:*    查询name中包含“精字的数据* SQL: like "%精%“*       以精开头  like "精%“  likeRight*       以精结尾  like "%精“  likeLeft*/@Testpublic void testSelect3(){QueryWrapper<DemoUser> queryWrapper= new QueryWrapper<>();queryWrapper.like("name", "精");List<DemoUser> userList = userMapper.selectList(queryWrapper);System.out.println(userList);}
}

Mybatis-plus 案例1

导入jar依赖包

pom.xml文件

        <!--spring整合mybatis-plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.2</version></dependency>

注意1:Mybatis-plus 依赖添加后,需要删除Mybatis的依赖否则项目依赖有问题

pojo类

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.stereotype.Component;@Component
@Data
@Accessors(chain = true)   //重写Set方法实现返回this
/*** 1.如果没有添加注解的属性值,则默认以类名字(DemoUser)当做表名demouser*/
@TableName("demo_user")  //对象与表绑定
public class DemoUser {@TableId(type = IdType.AUTO)  //主键自增//@TableId(type = IdType.ASSIGN_UUID)  // uuid 随机hash算法,几乎保证不重复private Integer id;//@TableField(value="name", exist = true) 如果表字段与属性一致且存在则可以不写private String  name;private Integer age;private String  sex;
}

接口类继承BaseMapper

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jt.pojo.DemoUser;import java.util.List;
//@Mapper  //将mapper接口交给Spring管理/*** 注意事项:BaseMapper必须添加泛型对象,即操作的表名*/
public interface DemoUserMapper extends BaseMapper<DemoUser> {//使用MP不要重载里面的方法List<DemoUser> findAll();void insertUser(DemoUser User);void updateUser(String oldName, String nowName, String sex);
}

修改YML配置文件

修改mybatis名字为mybatis-plus

#SpringBoot整合MybatisPlus配置
mybatis-plus:#定义别名包type-aliases-package: com.jt.pojomapper-locations: classpath:/mybatis.mappers/*.xml#开启驼峰映射configuration:map-underscore-to-camel-case: true

Mybatis 案例2

接口类:

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jt.pojo.DemoUser;import java.util.List;
//@Mapper  //将mapper接口交给Spring管理/*** 注意事项:BaseMapper必须添加泛型对象,即操作的表名*/
public interface DemoUserMapper extends BaseMapper<DemoUser> {//使用MP不要重载里面的方法List<DemoUser> findAll();void insertUser(DemoUser User);void updateUser(String oldName, String nowName, String sex);
}

pojo类:

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.stereotype.Component;@Component
@Data
@Accessors(chain = true)   //重写Set方法
/*** 1.如果没有添加注解的属性值,则默认以类名字(DemoUser)当做表名demouser*/
@TableName("demo_user")  //对象与表绑定
public class DemoUser {@TableId(type = IdType.AUTO)  //主键自增//@TableId(type = IdType.ASSIGN_UUID)  // uuid 随机hash算法,几乎保证不重复private Integer id;//@TableField(value="name", exist = true) 如果表字段与属性一致且存在则可以不写private String  name;private Integer age;private String  sex;
}

application.yml配置文件:

#SpringBoot整合MybatisPlus配置
mybatis-plus:#定义别名包type-aliases-package: com.jt.pojomapper-locations: classpath:/mybatis.mappers/*.xml#开启驼峰映射configuration:map-underscore-to-camel-case: true#添加MP日志  打印执行的sql
logging:level:com.jt.mapper: debug

测试类:

import com.jt.mapper.DemoUserMapper;
import com.jt.pojo.DemoUser;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
public class TestMP {@Autowiredprivate DemoUserMapper userMapper;@Testpublic void insert(){DemoUser demoUser = new DemoUser();demoUser.setName("MP测试").setSex("男").setAge(19);userMapper.insert(demoUser);}@Testpublic void updateById(){DemoUser demoUser = new DemoUser();demoUser.setName("中午吃什么").setAge(18).setId(234);/*** 原则:根据对象中部位null的属性当做set条件* 如果是ById的操作,则ID必须赋值并且ID当做唯一where条件*/userMapper.updateById(demoUser);}
}

解决注入警告问题

参考csdn博客提供的6中解决方式:

SpringMVC

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts 2(一般老项目使用)等等。

Servlet作用

说明: servlet是浏览器与服务器(tomcat) 进行交互的一种机制.
核心对象:
1.Request 包含了用户的所有的请求相关信息(参数…协议…地址…)
2.Response 包含了服务器相关的信息(服务器地址,返回的数据)

Spring MVC 重要组件说明(重要)

1)前端控制器 Dispatcherservlet(内部核心机制)接收用户所有的请求
2)处理器映射器 HandlerMapping 查找用户的请求与业务处理方法
3)处理器适配器 HandlerAdapter 在众多处理器中挑选合适的处理器去执行业务
4)视图解析器ViewResolver 实现页面路径的拼接

Sping MVC 调用过程

1.当用户发起请求时,被SpringMVC框架中的前端控制器拦截.
2.由于前端控制器,并不清楚哪个方法与请求对应,所以查询处理器映射器.
3.当tomcat服务器启动,则处理器映射器会加载所有的@RequestMapping注解,将其中的路径与方法进行绑定. Map</请求路径,包名.类名.方法名(参数)>,将查找到的方法信息回传给前端控制器 进行后续调用.
4.秉承着松耦合的思想,前端控制器将查询得到的方法, 请求处理器适配器(mvc针对不同的配置文件有专门的处理器(运行程序的机制))挑选合适的处理器去执行(程序内置的规则 无需人为干预)
5.当挑选合适的处理器之后,程序开始真正的执行业务方法. Controller-Service-Mapper(Dao),执行业务. 当业务执行成功之后.返回统一的ModelAndView对象.
其中包含2部分数据 1-Model(服务器数据) 2.View(页面逻辑名称)
6.当前端控制器获取ModelAndView对象之后,交给视图解析器 解析View对象的逻辑名称. 动态的拼接前缀 + 页面逻辑名称 + 后缀. 最终形成了用户展现页面的全路径.
7.将Model数据填充到页面中的过程,叫做视图渲染. 渲染之后,将数据交给前端控制器处理.
8.将得到的完整页面 响应给用户进行展现.

Sping MVC 开发注解

@RequestMapping:实现web页面动作与java方法绑定
@RequestParam:用于控制输入参数

   /***@RequestParam注解:* 1、name/value 接收参数的名称* 2.required 默认值为true, 该数据必须填写* 3、defaultValue:设定数据默认值,如果参数为null则设定默认值* required=true与defaultValue互斥*/

Sping MVC 简单参数传递

SpingMVC重定向和转发

转发

概念: 由服务器内部进行页面的跳转.
说明: 一般情况下 SpringMVC内部 以转化为主.

重定向

说明: 当用户发起请求时,由服务器返回有效的网址信息.之后由用户再次发起请求的结构.
总结:多次请求,多次响应。

重定向到外部网站

return new ModelAndView(new RedirectView(“https://www.baidu.com”));
或者
return “redirect:https://www.baidu.com”;

RestFul风格

删除多个id的数据

Spring 整合其他框架

idea 编辑html时引入变量时显示错误


解决方案:
修改idea配置信息

jQuery 获取数据

Ajax下载

Ajax 请求

Ajax 请求类型

get请求
1、将参数以?号的形式进行拼接: http://localhost:8090/findUser?id=1&name=tom
2.get请求会将所有的参数动态拼接url中,相对不安全
3.get请求不适用于大量数据提交,各类浏览器对于get请求一般都有上限控制。
总结:
1.查询数据库时使用
2.获取简单数据时使用(页面/js/css…)
3.一般请求中get请求居多
post请求
1.post请求将所有的参数都会进行form的封装
2.如果需要传递海量的数据则首选post请求
3.post的请求使用form进行封装,相对于get请求更加安全。
总结:
1.提交海量的数据时使用
2.一般用来提交文件时使用。
3.一般用于提交数据使用

作业;实现数据的修改/删除/新增

Vue开发

Vue 展现问题{{xxx}}问题解决

MVVM 思想

1.M Model 代表数据
2.V View 代表视图
3.VM(view-model)视图与数据控制层

Vue命令

表单修饰符

1、number:将用户输入的内容内容转换为数值类型
2、trim 去除左右2边多余的空格
3、lazy:简化input框调用js的次数,当失去焦点时调用

计算属性

计算属性与方法的区别

考点:
1.方法调用时每次都会执行,调用多次时执行多次
2.计算属性调用时,有缓存,调用多次时实际只执行一次
3.如果数据被大量的引用则使用计算属性更好,效率高

监听器

用于业务处理

过滤器

一般使用过滤器格式化数据,价格、时间等

过滤器级联

Vue声明周期

数组

组件

Spring Boot开发介绍相关推荐

  1. 开源oa_圈子哥推荐一款基于 Spring Boot 开发 OA 开源产品,学习/搞外快都是不二选择!...

    点击上方蓝字关注「程序员的技术圈子」 今天圈子哥给大家推荐一套Spring Boot 开发 OA系统,系统功能齐全,不管是用来学习或者搞外快都是不错的选择,clone下来吧! 办公自动化(OA)是面向 ...

  2. 从零搭建一个 Spring Boot 开发环境!Spring Boot+Mybatis+Swagger2 环境搭建

    从零搭建一个 Spring Boot 开发环境!Spring Boot+Mybatis+Swagger2 环境搭建 本文简介 为什么使用Spring Boot 搭建怎样一个环境 开发环境 导入快速启动 ...

  3. spring boot 开发soap webservice

    介绍 spring boot web模块提供了RestController实现restful,第一次看到这个名字的时候以为还有SoapController,很可惜没有,对于soap webservic ...

  4. springboot thymeleaf配置_【程序源代码】Spring Boot 开发笔记web开发实战1

    关键字:<Spring Boot 开发笔记>系列文章 各位亲爱的小伙伴:大家好! <Spring Boot 开发笔记>系列文章 这套笔记和源码是我自己在学习springboot ...

  5. Spring Boot文件目录介绍

    创建Spring Boot项目后,会产生一个工程目录,该工程目录存放了工程项目的各种文件,对于Spring Boot开发人员来说,了解该工程目录非常必要. • /src/main/java:目录下放置 ...

  6. spring boot入门 -- 介绍和第一个例子

    "越来越多的企业选择使用spring boot 开发系统,spring boot牛在什么地方?难不难学?心动不如行动,让我们一起开始学习吧!" 使用Spring boot ,可以轻 ...

  7. 基于Spring boot开发电子宿舍管理系统毕业设计源码132056

    摘  要 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用.信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代 ...

  8. (附源码)springboot+mysql+基于Spring boot开发电子宿舍管理系统 毕业设计132056

    摘 要 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用.信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代. ...

  9. springboot+mysql+基于Spring boot开发电子宿舍管理系统 毕业设计-附源码132056

    摘  要 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用.信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代 ...

最新文章

  1. pkg-config工具在实际工程中的用法
  2. 我也转发一个关于特斯拉的文章
  3. re_path 的 ?P
  4. 【转】JAVA 并发性和多线程 -- 读感 (二 线程间通讯,共享内存的机制)
  5. Kudu - 一个融合低延迟写入和高性能分析的存储系统
  6. android webview 字体 系统字体大小,Android 系统字体大小动态改变,导致webview中显示不兼容的问题解决...
  7. 平板android优化网络,Android版Firefox更新 针对平板设备优化
  8. STM32工作笔记0063---PWM输出实验
  9. Java-Android 之Hello World
  10. Wireshark 文件分割和合并
  11. ASP 中用Ctrl+Enter提交表单
  12. Java视频教程从入门到精通(2021完整版)
  13. DOS那一代的程序员现在都干嘛呢
  14. Win10怎么去除桌面快捷方式图标左下角的小箭头
  15. 2021牛客多校第六场补题
  16. 揭秘抖音快手刷赞刷评论骗局,揭秘抖音刷赞兼职套路
  17. 短轮询和长轮询的区别到底是什么
  18. Windows 组策略 应用
  19. Google Android 开发者网站更新了
  20. Windows Server 2016-Nano Server介绍

热门文章

  1. 我奋斗了18年才和你坐在一起喝咖啡与我奋斗了18年不是为了和你一起喝咖啡
  2. Suzy找到实习了吗 Day 1 | 704. 二分查找、27. 移除元素
  3. linux桌面无法显示U盘,电脑桌面右下角不能显示u盘图标解决方法
  4. 丛林木马(数学 思维
  5. Selenium滑块验证登录天猫淘宝网站
  6. Siri语音打电话APP
  7. Dev-C++ 实用安装教程
  8. 中企海外周报 | 海尔俄罗斯洗衣机互联工厂开业;奥克斯建造泰国智能生产基地...
  9. docker网络模式与资源控制
  10. 手机发送短信验证码登录完整实例