Spring Boot开发介绍

Spring Boot开发介绍

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;

    @Override
    public 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=true
    username: 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.pojo
  mapper-locations: classpath:/mybatis.mappers/*.xml
  #开启驼峰映射
  configuration:
    map-underscore-to-camel-case: true

相关Mapper配置文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace
	1.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.pojo
        resultType="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 mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace
	1.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.pojo
        resultType="DemoUser" 可以直接返回对象的名称
        程序解析时: 首先根据别名包的名称进路径的拼接 com.jt.pojo.DemoUser
    -->
    <select id="findAll" resultType="DemoUser">
        select * from demo_user
    </select>

    <!--更新操作的标签就是为了方便程序员开发时使用,程序
    执行时没有任何的差别,所以可以混用
    <insert id="">
    </insert>-->
</mapper>

3、测试代码

    @Test
    public void testInsert(){
        DemoUser user = new DemoUser();
        user.setId(0).setName("mybatis信息2").setAge(18).setSex("男");
        userMapper.insertUser(user);
    }
    @Test
    public 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 {
    @Autowired
    private DemoUserMapper userMapper;
    @Test
    public void insert(){
        DemoUser demoUser = new DemoUser();
        demoUser.setName("MP测试").setSex("男").setAge(19);
        userMapper.insert(demoUser);
    }
    @Test
    public 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条件
     */
    @Test
    public 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()方法
     */
    @Test
    public 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
     */
    @Test
    public 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.pojo
  mapper-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.pojo
  mapper-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 {
    @Autowired
    private DemoUserMapper userMapper;
    @Test
    public void insert(){
        DemoUser demoUser = new DemoUser();
        demoUser.setName("MP测试").setSex("男").setAge(19);
        userMapper.insert(demoUser);
    }
    @Test
    public 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声明周期

数组

组件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值