CGB2005 0902 jt7

晚上自己回看更新和删除
删除昨晚自己探究过 如果只删除item 可以删除完item 但是itemDesc还在数据库

更新的id问题自己理清 取值赋值 get set

在这里插入图片描述

晚上实现 0901 16.28

新增的时候 观察数据库id
在这里插入图片描述
两个表
tb_item
在这里插入图片描述
tb_item_desc
在这里插入图片描述
id相同
晚上 复习0901 保存模块

@Override
	@Transactional  //注意事务控制   spring一般只能控制运行时异常,检查异常需要手动封装.
	public void saveItem(Item item, ItemDesc itemDesc) {
		//1.默认商品为上架状态
		//item.setStatus(1).setCreated(new Date()).setUpdated(new Date());
		item.setStatus(1);
		itemMapper.insert(item); //先入库之后才有主键,将主键动态的返回.
		//MP支持,用户的操作可以实现自动的主键回显功能.
		//<!--<insert id="" keyProperty="id" keyColumn="id" useGeneratedKeys="true"></insert>-->

		//2.完成商品详情入库操作  要求 item的ID的应该与itemDesc的Id值一致的!!!!
		//知识点: id应该如何获取?
		itemDesc.setItemId(item.getId());
		itemDescMapper.insert(itemDesc);

重温
在这里插入图片描述

有点疑问:
1.数据齐了没
2.能不能正确的入库
在这里插入图片描述
mapper入库 传参的时候 只传递了itemDesc
在这里插入图片描述
属性名叫itemDesc
如下图 会把itemDesc传过去
可以看到 没有把id传过去(可以写好之后 去页面network里面判断)
在这里插入图片描述
业务要求
在这里插入图片描述
***把item里面的id拿出来 取值

数据库 pojo item的id和itemDesc的id的值应该是一致的

再把item的id存(赋值)进itemDesc的id*** 然后基本是可以了
考虑更深层次
item的id是主键自增在这里插入图片描述
在这里插入图片描述
item入库之后 主键应该是空的 虽然数据库(item表)有了主键 但是并没有传回来
所以item里面主键应该是空的
在这里插入图片描述
如上图 item.getId肯定也为空 把一个空值当主键插进去 就会报错

新增代码理解 数据需要回显的缘故

在这里插入图片描述
如上图 需求 要查第二个商品详情表 但需要对应第一个商品表的主键id(会自增 因为是新增插入的)
上图和上行理解
在这里插入图片描述

知识点回顾
主键自增的回显 一般只会出现在insert标签当中

作用 两个表 第二表对应的数据 不需要第二次查询

<insert id="" keyProperty="id" keyColumn="id" useGeneratedKeys="true"></insert>

如上图 经过了MP的支持 MP支持,用户的操作可以实现自动的主键回显功能.等于上面第二个圈圈
在这里插入图片描述

断点深化理解

在这里插入图片描述
在这里插入图片描述
一开始id为空(null)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如下图 第一小步取值
在这里插入图片描述
下图为上图的补充 取值步骤
在这里插入图片描述
下图为上图的补充
在这里插入图片描述
第二小步

在这里插入图片描述
上图的补充 如下图
在这里插入图片描述

最后 经过MP框架帮助完成看不见的回显(第二圈圈 断点可分析) 完成了取值并赋值的操作
在这里插入图片描述
下图为上图补充
在这里插入图片描述

自我再显现 更新

完成商品的修改操作 item itemDesc

在这里插入图片描述
开始测试
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
成功实现
在这里插入图片描述

自我实现删除业务

完成商品的删除操作 item itemDesc

需求:删除不需要数据回显 直接根据同一id删除就可

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
测试
在这里插入图片描述
item
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
页面删除干净了

item表
在这里插入图片描述
item_desc表
在这里插入图片描述
完美实现 id为77尾号的没了
之前如果不加下面对应itemDescMapper可以获取的ids数组的话 对应的item_Desc表会有残余

时间管理 省事的套路

省略 共性直接添加到common里面
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
上传图片
在这里插入图片描述
在这里插入图片描述
京淘文件传输

京淘文件上传

文件上传入门案例

在这里插入图片描述
一般都是form表单的上传
在这里插入图片描述

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>实现文件上传</h1>
	<!--enctype="开启多媒体标签"  -->
	<form action="http://localhost:8091/file" method="post" 
	enctype="multipart/form-data">
		<input name="fileImage" type="file" />
		<input type="submit" value="提交"/>
	</form>
</body>
</html>

在这里插入图片描述
在这里插入图片描述
如上图 很麻烦
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
F:\JT-SOFT\image
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
提交后

package com.jt.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

@RestController
public class FileController {

    /**
     *  MultipartFile 接口作用 主要就是优化了文件上传 API集合
     * 1. 文件上传位置???   D:\JT-SOFT\images
     * 2. 判断一下文件目录是否存在
     * 3. 利用API实现文件上传.
     */
    @RequestMapping("/file")
    public String file(MultipartFile fileImage){
        String fileDir = "F:\\JT-SOFT\\image";
        File file = new File(fileDir);
        if(!file.exists()){ //文件不存在则创建文件

            file.mkdirs(); //一次性创建多级目录
        }
        //文件信息 = 文件名+文件后缀
        String fileName = fileImage.getOriginalFilename();
        //将文件的整体封装为对象 文件路径/文件名称
        File imageFile = new File(fileDir+"/"+fileName);
        //实现文件上传,将文件字节数组传输到指定的位置.
        try {
            fileImage.transferTo(imageFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "文件上传成功!!!!";
    }
}


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

{timestamp: "2020-09-02T02:21:06.281+00:00", status: 404, error: "Not Found",}
error: "Not Found"
message: "No message available"
path: "/pic/upload"
status: 404
timestamp: "2020-09-02T02:21:06.281+00:00"

在这里插入图片描述
晚上 早上10.28

为什么要写 file.mkdirs() 创建多级目录

在这里插入图片描述

if(!file.exists()){ //文件不存在则创建文件

            file.mkdirs(); //一次性创建多级目录
        }

在这里插入图片描述
在d盘下创建aa/bb/cc/dd目录 这是多级目录 存储一个a.jpg格式的文件
如果不写多级目录代码file.mkdirs(); //一次性创建多级目录就只能默认创建一级目录 即: D:images/aa 运行找不到文件就报错
所以 添加file.mkdirs(); //一次性创建多级目录代码 就一直一次性都给我们创建 不仅限于一级目录这么少

transferTO接口作用
必须先准备好目录 之后再生成文件
在这里插入图片描述
和上面的到了一样
1.关键字有下图的 不让用 如果有特殊符号系统分不清
2.目录 如果只有aa 没有aabbcc会报错(找不到指定目录) IO流不会自己创建 需要自己创建 上面示例
在这里插入图片描述
所以要用到
在这里插入图片描述

 file.mkdirs(); //一次性创建多级目录

在这里插入图片描述
总结分析在这里插入图片描述
在这里插入图片描述
第一步 得有标签 不然的话 controller控制层接不到
在这里插入图片描述
第二步 得有post 不然发不过去
在这里插入图片描述
在这里插入图片描述
和下图controller的名字一一对应
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

对应上面的json建立vo对象

在这里插入图片描述
在这里插入图片描述

页面url分析

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

参数说明

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
作业
在这里插入图片描述

自我实现

在这里插入图片描述
点击开始上传 失败
脚手架建好
只有FileController 去建立对应的service层(接口和实现类)

Controller层

在这里插入图片描述

serive层

controller层写好 自动生成
在这里插入图片描述
在这里插入图片描述
完成 运行项目

看控制台
在这里插入图片描述
如上图 完美实现

经典错误页面只有json数据问题 没写完@RequestMapping()

@RequestMapping()

在这里插入图片描述
在这里插入图片描述
控制台也不报错
在这里插入图片描述
把json 数据打印出来了 就是去不了主页面

加了url地址就可以初步把所有实现了

在这里插入图片描述
自我实现 11.40前
定死了url后
如下图 无论上传什么图片
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
点击图片也会变成指定的地址 url都是网络地址 照理来说 物理地址也应该有上传后对应的图片(复制过去)
但是并没有
在这里插入图片描述

总结:文件上传初步已经实现 但是需要用网络地址的图片才行(因为已经校验好了的) 本地物理地址业务未完成完善

ps:在这里插入图片描述
文件上传具体步骤:
* 1.如何校验用户上传的是图片? jpg|png
* 2.如何访问用户上传恶意程序 木马.exe.jpg 宽度*高度
* 3.应该采用分目录存储的方式 保存数据
* 4.上传的文件名称应该尽量避免重名 自定义文件名称… UUID.后缀…

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.如何校验用户上传的是图片? jpg|png

在这里插入图片描述
程序员的价值所在 不去考虑if所有得可能性 尽可能优化方法 因为常用的图片格式有四种 但是一共的话 还是有很多很多中的 无法全部if
但是又不能避免不去写

1.正则表达式

在这里插入图片描述

2.集合去重

在这里插入图片描述
在这里插入图片描述
如上图 是字符串类型的集合
在这里插入图片描述
在这里插入图片描述
点在哪 就从哪截 口诀 :含头不含尾 晚上 11.51前
知识点扩充
JavaScript lastIndexOf() 方法
JavaScript String 对象

定义和用法
lastIndexOf() 方法可返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索。

语法
stringObject.lastIndexOf(searchvalue,fromindex)
参数 描述
searchvalue 必需。规定需检索的字符串值。
fromindex 可选的整数参数。规定在字符串中开始检索的位置。它的合法取值是 0 到 stringObject.length - 1。如省略该参数,则将从字符串的最后一个字符处开始检索。
返回值
如果在 stringObject 中的 fromindex 位置之前存在 searchvalue,则返回的是出现的最后一个 searchvalue 的位置。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
bug问题分析
在这里插入图片描述
fileName 大小写问题 晚上有空验证 什么大写 会错??
在这里插入图片描述

2.如何访问用户上传恶意程序 木马.exe.jpg 宽度*高度

2.判断完类型上传的数据是否为恶意程序. 高度和宽度是否为null. 利用图片API

在这里插入图片描述
下午
在这里插入图片描述
在这里插入图片描述

* 3.应该采用分目录存储的方式 保存数据

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
要注意点的
在这里插入图片描述
在这里插入图片描述

4.上传的文件名称应该尽量避免重名 自定义文件名称… UUID.后缀…

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
实现 拼接的

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值