概述
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;
@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声明周期
数组
组件
最后
以上就是开放萝莉为你收集整理的Spring Boot开发介绍Spring Boot介绍安装Spring Boot插件创建Spring Boot项目Maven pom文件介绍SpringBoot 项目打包SpringBoot properties配置文件SpringBoot yml文件说明利用properties文件为属性赋值/加载固定配置lombok插件SpringBoot项目介绍Spring 整合其他框架jQuery 获取数据Vue开发的全部内容,希望文章能够帮你解决Spring Boot开发介绍Spring Boot介绍安装Spring Boot插件创建Spring Boot项目Maven pom文件介绍SpringBoot 项目打包SpringBoot properties配置文件SpringBoot yml文件说明利用properties文件为属性赋值/加载固定配置lombok插件SpringBoot项目介绍Spring 整合其他框架jQuery 获取数据Vue开发所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复