栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot

SQL注入
● 用户往输入值的地方输入了SQL语句,导致原有SQL语句的逻辑发生改变,这个过程称为SQL注入
● 通过PreparedStatement带有预编译效果的执行SQL语句的对象,解决SQL注入问题
● 如何解决?
○ 使用PreparedStatement,将编译SQL语句的时间点提前到创建对象时,此时编译用户输入的内容还没有在SQL语句中, 编译后可以理解为将SQL语句的逻辑锁死, 用户输入的内容只能以值的形式添加到原有SQL语句中,这样将不再影响原有SQL语句的逻辑,从而避免了SQL注入的问题.
select count() from user where username=‘tom’ and password=‘123456’;
select count(
) from user where username=‘abcd’ and password=‘’ or ‘1’=‘1’

SpringBoot

什么是服务器?
● 服务器就是一台高性能的电脑
什么是Web服务器?
● 就是在高性能电脑上安装了Web服务软件,比如安装了Tomcat
什么是Web服务软件?
● Web服务软件是不具备任何业务功能的, 可以理解为容器,用来装实现具体业务功能的组件(组件指Servlet,而Controller的作用是将多个Servlet整合到了一个类文件中)
● Web服务软件做了哪些事儿?
○ 负责搭建底层的网络连接
○ 负责根据客户端请求的静态资源路径找到静态资源文件并响应给客户端
○ 负责根据客户端请求的动态资源路径找到对应Controller里面的方法并且执行
三大框架SSM
● SpringMVC: 从第二阶段开始接触到第四阶段
● Spring: 从第四阶段开始讲到最后
● Mybatis:从第三阶段开始到最后
SpringBoot框架
● 如果不使用SpringBoot工程, 创建Maven工程,工程里面如果需要添加其它框架,需要在pom.xml文件中添加大量的依赖信息然后个别的框架还需要添加xml配置文件,在配置文件中还需要添加大量的配置信息, 这些操作都需要程序员独立完成, 使用SpringBoot创建工程时如果需要引入其它框架只需要在创建时打钩的方式引入各种框架即可, 大大提高了构建工程的效率
创建SpringBoot工程

  1. 创建工程时需要设置url路径为https://start.springboot.io
  2. 创建工程的第一个页面中还需要修改以下内容
  3. 勾选Web->Spring Web
  4. 点击finish 创建完成
  • 创建完工程后 看build页卡里面的内容 如果显示红色报错如下图,
  • 通过刷新Maven解决上面错误
  • 直到build页卡中显示如下图的绿色对勾说明工程创建并编译成功
  • 如果刷新Maven后还是没有出现绿色对勾, 删除.m2文件夹下的repository文件夹 后再次刷新Maven,如果还是不能解决检查Maven是否配置成功, 删除工程重新换一个工程名再次从头创建

客户端发出请求的几种方式:

  1. 地址栏中输入请求地址后回车发出请求
  2. 通过超链接发出请求
  3. 通过form表单发出请求
    服务器端接收请求参数的几种方式
  4. 通过HttpServletRequest对象获取参数 (以后基本不用)
  5. 通过在处理请求的方法参数列表处声明的方式接收参数
  6. 通过在处理请求的方法参数列表处声明自定义对象的方式接收参数

练习

  1. 在static文件夹下面创建bmi.html页面 在页面中添加form表单 两个文本框获取用户输入的身高和体重 ,再添加一个提交按钮 提交地址为/bmi
  2. 创建BMIController, 添加bmi方法 处理/bmi请求, 参数列表中接收传递过来的身高和体重类型为float类型 , 在方法中通过bmi公式 得到bmi的值然后安照以下范围给客户端响应对应提示信息
    ● 计算公式为:BMI=体重/(身高*身高) 体重单位是公斤 身高单位是米 1.8
    ● 偏瘦<18.5<正常<24<超重

工程中需要使用数据库的步骤:

  1. 创建utils的包
  2. 把jdbc01工程中的DBUtils.java工具类复制到新工程的utils包下
  3. 在pom.xml中添加两个依赖
  
        
            mysql
            mysql-connector-java
            8.0.15
        
        
        
            com.alibaba
            druid
            1.1.21
        

注册功能步骤:

  1. 创建springboot工程, 工程名1-1
  2. 创建index.html首页 首页里面添加注册超链接 href=“/reg.html”
  3. 创建reg.html页面, 页面中form表单提交地址为/reg 三个文本框和一个提交按钮
  4. 创建controller.UserController在里面添加reg方法处理/reg请求,创建User实体类,然后声明在reg方法的参数列表处,用来接收传递过来的参数
  5. 创建utils包,把DBUtils复制到包下面
  6. 在pom.xml里面添加两个依赖 想着刷新maven
  7. 在UserController的reg方法中调用JDBC代码把传递过来的用户信息保存到数据库里面,并且给客户端响应:“注册成功!”;

SpringBoot day02
商品管理系统
● 准备工作:
○ 创建boot2工程
○ 在pom.xml中添加数据库和数据库连接池两个依赖
○ 工程中创建utils包 把boot1里面的DBUtils工具类复制到包下
○ 创建商品表:

create table product(id int primary key auto_increment,
title varchar(50),
num int,
price double(10,2));

  1. 添加商品步骤:
    a. 创建index.html首页, 并在页面中添加 用于添加商品的超链接
    b. 创建insert.html页面, 页面中准备form表单提交地址/insert 3个文本框和一个提交按钮
    c. 创建controller.ProductController 并且添加insert方法处理/insert请求
    d. 创建Product实体类
    e. 在ProductController里面的insert方法参数列表处声明Product 用于接收客户端传递过来的参数,方法中通过JDBC代码实现插入数据到product表的操作
  2. 商品列表步骤:
    a. 首页添加商品列表的超链接 请求地址为/select
    b. 在ProductController中添加select方法处理/select请求
    c. 在select方法中获取数据库连接,通过JDBC代码查询到所有商品的信息,把商品信息封装到Product对象中, 然后再创建一个ArrayList集合把遍历结果集过程中创建的Product对象装进集合中
    d. 将集合里面的数据装进一个表格标签里面
    e. 最后将装着数据的表格标签响应给客户端
  3. 删除商品步骤:
    a. 在表格里面添加删除的超链接 请求地址为/delete?id=xxx
    b. 在ProductController中添加delete方法处理/delete请求在参数列表处声明id,用来接收传递过来的参数,控制台中输出传递过来的id 运行测试
    c. 在delete方法中通过JDBC代码执行通过id删除数据的SQL语句
  4. 修改商品步骤:
    a. 在首页添加修改商品超链接 请求地址为/update.html
    b. 创建update.html页面,页面中添加form表单请求地址为/update, 有四个文本框和一个修改按钮
    c. 在ProductController里面添加update方法处理/update请求,参数列表处声明Product 用来接收传递过来的参数, 给客户端响应"修改完成! 返回列表页面",在控制台输出product 测试是否接收到了数据
    d. 在update方法中通过JDBC代码把product对象中的数据进行修改

Mybatis框架
● 目前最流行的数据持久层框架
● Mybatis框架可以根据用户通过注解或配置文件所指的的SQL语句自动生成对应的JDBC代码,从而提高了开发效率
● 如何使用?
○ 创建SpringBoot工程
○ 打钩三个:
■ Spring Web
■ Mybatis Framework
■ MySql Driver
○ 创建完工程后 需要在application.properties配置文件中添加连接数据库的信息 否则工程无法正常启动 会报以下错误

● 配置文件中添加以下内容

商品管理(商品增删改查) Mybatis版本
○ 创建SpringBoot工程boot3, 打3个√
○ 创建完工程后,在application.properties里面添加连接数据库的信息
● 添加商品
○ 创建首页index.html 里面添加超链接
○ 创建insert.html页面 里面准备form表单 提交地址为/insert
○ 创建ProductController, 在里面添加insert方法处理/insert请求,创建Product实体类, 在insert方法参数列表处声明Product 用来接收传递过来的参数,
○ 创建ProductMapper,并在里面提供insert方法
○ 在ProductController里面吧ProductMapper 自动装配进来, 然后在insert方法中调用mapper的insert方法 给客户端响应添加完成

表设计面试题
2021年过年时小明在这些天都收到了许多亲戚朋友还有同事的红包,也发出了一些红包,有的是微信,有的是支付宝也有现金,请参考下面的题目帮小明设计表格保存红包的信息

  1. 设计表 (至少包含一张流水表)
    ● 列出需要保存的所有信息
    ○ 关系,红包类型,金额,时间,性别,名字

● 流水表
金额,红包类型,时间
create table trade(id int primary key auto_increment,money int,type varchar(10),time date,p_id int);
● 人物表
名字,性别,关系
create table person(id int primary key auto_increment,name varchar(20),gender varchar(1),rel varchar(10));

刘德华 微信 收1000 2021-03-20
杨幂 现金 收500 发50 2021-04-14
马云 支付宝 收20000 发5 2021-03-11
特朗普 微信 收2000 2021-05-18
貂蝉 微信 发20000 2021-07-22
insert into person values(null,‘刘德华’,‘男’,‘亲戚’),(null,‘杨幂’,‘女’,‘亲戚’),(null,‘马云’,‘男’,‘同事’),(null,‘特朗普’,‘男’,‘朋友’),(null,‘貂蝉’,‘女’,‘朋友’);

insert into trade values(null,1000,‘微信’,‘2021-03-20’,1),
(null,1000,‘微信’,‘2021-03-20’,1),
(null,500,‘现金’,‘2021-04-14’,2),
(null,-50,‘现金’,‘2021-04-14’,2),
(null,20000,‘支付宝’,‘2021-03-11’,3),
(null,-5,‘支付宝’,‘2021-03-11’,3),
(null,2000,‘微信’,‘2021-05-18’,4),
(null,-20000,‘微信’,‘2021-07-22’,5);
2. 统计2021年2月15号到现在的所有红包收益
select sum(money) from trade where time>“2021-02-15”;
3. 查询2021年2月15号到现在 金额大于100 所有女性亲戚的名字和金额
select name,money
from trade t join person p on t.p_id=p.id
where time>“2021-02-15” and gender=‘女’ and rel=‘亲戚’
and money not between -100 and 100;
4. 查询三个平台(微信,支付宝,现金)分别收入的红包金额
select type,sum(money) from trade where money>0 group by type;

SpringBoot day03
商品管理(商品增删改查) Mybatis版本
○ 创建SpringBoot工程boot3, 打3个√
○ 创建完工程后,在application.properties里面添加连接数据库的信息
● 添加商品
○ 创建首页index.html 里面添加超链接
○ 创建insert.html页面 里面准备form表单 提交地址为/insert
○ 创建ProductController, 在里面添加insert方法处理/insert请求,创建Product实体类, 在insert方法参数列表处声明Product 用来接收传递过来的参数,
○ 创建ProductMapper,并在里面提供insert方法
○ 在ProductController里面吧ProductMapper 自动装配进来, 然后在insert方法中调用mapper的insert方法 给客户端响应添加完成
● 商品列表
○ 在首页index.html添加商品列表超链接 请求地址为 /select
○ 在ProductController里面创建select方法处理/select请求
○ 在ProductMapper中添加select方法查询product表中所有的数据并且返回值为List集合
○ 在ProductController的select方法中调用mapper里面的select方法 得到集合, 把集合中的数据装进table标签中(这部分代码可以复制粘贴), 最后返回给客户端
● 删除商品
○ 添加删除超链接, 请求地址为 /delete?id=xxx
○ 在ProductController中创建delete方法处理/delete请求, 参数列表处声明id用来接收传递过来的参数 , 在控制台输出id 测试效果
○ 在Mapper中创建deleteById方法参数为id , 通过@Delete注解删除表中的数据
○ 在ProductController的delete方法中 调用mapper的deleteById方法把id传递进去,最后给客户端响应删除完成!
● 修改商品
○ 在首页添加修改超链接 请求地址/update.html
○ 创建update.html页面 和之前一样 向/update发出请求
○ ProductController中处理/update请求声明Product对象接收参数, 在方法中调用mapper的update方法把product对象传递进去,给客户端响应修改完成!
○ 实现Mapper里面的update方法

同步请求和异步请求
● 同步: 指单线程依次做几件事
● 异步:指多线程同时做几件事
● 同步请求: 指客户端只有一个主线程, 既要负责页面展示相关,也要负责发请求获取数据,由于只有一个线程当发请求时则不能显示页面(清空页面), 当把数据请求回来之后再把请求到的数据展示到页面中, 这样的话只能实现页面的整体改变,无法实现页面的局部改变
● 异步请求: 指客户端主线程负责页面展示相关, 由子线程发请求获取数据, 这样页面内容就不需要清空, 子线程得到数据后可以把数据直接展示到原页面中, 这个过程称为页面的局部改变,异步请求就是用来实现页面局部刷新的
客户端如何发出异步请求?
● 通过前端Axios框架发出异步请求
○ 在页面中引入axios框架的js文件
https://cdn.bootcdn.net/ajax/libs/axios/0.21.1/axios.min.js
常见错误列表
404状态码
● 404代表找不到资源
○ 静态资源: /index.html /a.jpg /web/reg.html
■ 检查请求的地址拼写是否正确
■ 检查文件的位置是否正确
■ 如果以上都没问题,Build->ReBuild后再重启工程
○ 动态资源: /hello /reg /showAllUser
■ 检查请求的地址拼写是否正确
■ 检查RequestMapping注解中的路径是否正确
■ 检查controller包是否在工程自带的包里面
■ 如果以上都没问题,Build->ReBuild后再重启工程
400状态码
● 代表客户端发请求时传递参数类型和服务器接收参数的类型不匹配导致

500状态码
● 代表客户端发出的请求已经被服务器处理到,执行服务器业务代码时出错,此时需要看idea控制台的错误提示,再根据错误提示找具体错误的原因

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1039898.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号