JavaWeb学习——黑马程序员(更)

JavaWeb学习——黑马程序员

编辑时间:2023/10/27
来源:黑马程序员

web开发

前端:HTML 、CSS 、JavaScript、 Vue 、Element 、Nginx
后端:Maven SpringBoot 、MySql 、SpringBoot Mybatis、 SpringBoot Web
在这里插入图片描述

web前端开发

HTML

JS

Vue

Ajax

1.Ajax概念

Asynchronous JavaScript And XML ,异步的JavaScript和XML
作用:
数据交换:通过ajax可以给ie服务器发生请求,并且过去服务器响应的数据
异步交互:可以给不加载的整个页面的情况下,与服务器交换数据并且更新部分网页的技术,如:搜索联想,用户名是否可以校验等。

2.同步异步交互概念

在这里插入图片描述

3.原生的Ajax

打开开发者工具快捷键:F12
XHR框:查看所有异步请求
在这里插入图片描述

Axios入门

在这里插入图片描述

Axios请求方式别名

在这里插入图片描述

前端工程化

前端工程化-环境准备

1.前后端混合开发

在这里插入图片描述

2.前后端分离开发

在这里插入图片描述

3.YApi 生成接口

添加项目——>添加分类——>添加接口
在这里插入图片描述

4.实际的前端工程开发

模块化(js css)
组件化(UI结构 样式 行为)
规范化(目录结构 编码 接口)
自动化(构建 部署 测试)

5.前端工程化

环境准备
vue-cil

  • 介绍:Vue-cil是Vue官方提供的一个脚手架,用于快速生成一个Vue项目模板。
  • Vue-cil提供了如下的功能:
    统一的目录结构
    本地测试
    热部署
    单元测试
    基础打包上线
  • 依赖环境:NodeJS

vue

1.vue项目创建在这里插入图片描述

2.vue目录结构

在这里插入图片描述

3.vue项目启动

终端:npm run server
或者在package json文件里运行

注意:vue 端口号修改处 vue.config.js
在这里插入图片描述

4.vue项目开发流程

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

Element

Vue路由

打包部署

前端vue文件打包
在这里插入图片描述
在这里插入图片描述

1.所部署的服务器nginx

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

2.若nginx双击没有反应

打开任务管理器(快捷键ctrl+shift+esc)
cmd命令查看占用端口的资源

netstat -ano | findStr 80

3.改nginx端口号

在这里插入图片描述

4.查看任务管理器是否启用进程

在这里插入图片描述

5.输入网址 localhost:端口号

成功部署如下。
在这里插入图片描述

Maven

1.maven介绍

maven是apache旗下的一个开源的项目,是管理构建Java的工具。
apache软件基金会是目前世界上最大最受欢迎的开源软件基金会,也是一个专门为支持开源软件而生的非营利性组织,访问apache网址:
https://www.apache.org/index.html#projects-list

2.maven 的作用

作用一:依赖管理:方便快捷的管理项目依赖的资源(jar包)避免冲突问题。
依赖设置
在建立好maven模块的pom.xml文件建立依赖

    <dependencies>
        <dependency>
<!--            <groupId>包</groupId>-->
<!--            <artifactId>项目</artifactId>-->
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.4</version>
        </dependency>
    </dependencies>

作用二:统一的项目结构:统一项目结构,提供标准。
在这里插入图片描述

项目构建:标准化平台的自动化项目的构建方式。
在这里插入图片描述
编译:运行maven面板的compile生成target文件
在这里插入图片描述
打包:运行maven面板的package生成target文件
在这里插入图片描述

3.maven的概述

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

中央仓库地址:https://repo1.maven.org/maven2/

pom.xml里的maven坐标

    <groupId>org.example</groupId>
    <artifactId>untitled</artifactId>
    <version>1.0-SNAPSHOT</version>

4.maven安装

地址:https://maven.apache.org/download.cgi
在这里插入图片描述

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

    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>certral</mirrorOf>
    </mirror>
  </mirrors>

5.maven安装检测

cmd 输入mvn -v
在这里插入图片描述

6.配置maven环境(当前工程)

在这里插入图片描述

7.配置maven环境(全局环境)

在这里插入图片描述

file–close project–
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
生成的包结构
在这里插入图片描述
在这里插入图片描述

8.Maven坐标

在这里插入图片描述

9.导入Maven项目

在这里插入图片描述
在这里插入图片描述
移除maven文件
注意:磁盘里面没有删除。
在这里插入图片描述

10.依赖管理

在这里插入图片描述

   <dependencies>
       <dependency>
           <groupId>ch.qos.logback</groupId>
           <artifactId>logback-classic</artifactId>
           <version>1.2.3</version>
       </dependency>
   </dependencies>

在这里插入图片描述

11依赖传递

在这里插入图片描述
图表显示依赖关系
在这里插入图片描述

12解除依赖

在这里插入图片描述

13依赖范围

在这里插入图片描述
打包插件

 <build>
        <plugins>
           <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-assembly-plugin</artifactId>
               <version>2.4.1</version>
               <configuration>
                   <descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs>
               </configuration>
               <executions>
                   <execution>
                       <id>make-assembly</id><phase>package</phase>
                       <goals><goal>single</goal></goals>
                   </execution>
               </executions>
           </plugin>
        </plugins>
    </build>

打包好的jar包在target文件夹
14生命周期
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
操作方式1
测试依赖


   <!--  依赖配置-->
  <dependencies>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.2.10</version>
<!--      <scope>test</scope>-->
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

测试代码:

package com.itheima.test;
import org.junit.Test;
public class DemoTest {
    @Test
 public void test1(){
        System.out.println("T1");
 }
    @Test
    public void test2(){
        System.out.println("T2");
    }
    @Test
    public void test3(){
        System.out.println("T3");
    }
}

测试效果图
在这里插入图片描述
maven面板的操作:
在这里插入图片描述
如果要过test执行后面的操作,添加小闪片:在这里插入图片描述
操作方式2
在这里插入图片描述
在所在的cmd窗口执行mvn命令

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

web后端开发

0.spring入门

官网:spring.io
Spring发展到现在已经形成了一种开发生态圈,Spring提供了若干子项目,每个项目用于完成特定的功能。
在这里插入图片描述
Spring Boot:帮助我们快速的构建开发框架,简化开发,提高效率。

01SpringBootWeb入门

需求:使用SpringBoot开发一个web应用,浏览器发起请求之后/hrllo后,给浏览器返回“HelloWord”

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

在这里插入图片描述
需要联网下载
在这里插入图片描述
留下需要的文件
在这里插入图片描述
在这里插入图片描述

如果找不到插件,加入版本号这一行如:

  <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.7.4</version>
            </plugin>
        </plugins>
    </build>

创建的请求类

package com.itheima.controller;

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

//请求处理类
@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String hello(){
        System.out.println("Hello World~");
        return "Hello World~";
    }

}

查看日志是8080端口
在这里插入图片描述

浏览器:
在这里插入图片描述
控制台:
在这里插入图片描述

02HTTP协议概述

HTTP
概念:Hyper Test Transfer Protocol ,超文本概述规定了浏览器和服务器之间数据传输的规则。

在这里插入图片描述
特点:

  1. 基于TCP协议:面向连接ei,安全
  2. 基于请求-响应模型的:一次请求对应一次响应
  3. HTTP协议是无状态的协议:对于事物处理没有记忆能力。每次请求-响应都是独立的。
    缺点:多次请求间不能共享数据
    优点:速度快

03HTTP请求协议

在这里插入图片描述

04HTTP响应协议

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

在这里插入图片描述

05HTTP-协议解析

在这里插入图片描述

06Tomcat介绍

Tomcat简介

  • Tomcat是Apache软件基金会的一个核心的项目,是一个开源免费的轻量级Web服务器,支持Servlet /JSP邵亮javaEE规范。
  • Java EE:Java Enterprise Edition ,java企业版,和Java企业级开发的技术规范总和。包含13项技术规范:JDBC JNDI EJB RMI JSP Serverlet XML JavaIDL JTS JTA JavaMail JAF
  • Tomcat也称为web容器 Servlet容器 Servlet程序需要依赖Tomcat才能运行
  • 官网:https://tomcat.apachee.org
    javase:java标准版
    javame:Java小型版
    javaee:java企业版
    小结
    web服务器
  • 对HTTP协议操作进程封装,简化web程序开发
  • 部署web项目,对外提供网上信息浏览
    Tomcat
  • 一个轻量级的web服务器,支持servlet,jsp等少量javaee规范
  • 也被称为web容器,servlet容器

07Tomcat基本使用

安装-卸载-启动(bin/startup.bat)-终止(bin/shutdown.bat)-部署(应用复制到webapps目录)
下载:https://tomcat.apache.org/download-90.cgi
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

08SpringBootWeb-入门解析

可以知道我们多使用的是内勤啊的tomcat,外部tomcat一般很少使用
https://start.spring.io/
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述知识总结
1.起步依赖

  • spring-boot-starter-web
  • spring-boot-starter-test
    2.内嵌tomcat服务器
  • 基于springboot并发的web应用程序,内置了tomcat服务器,当启动类运行时,会自动启动内嵌的tomcat服务器

请求响应

0请求响应概述

在这里插入图片描述

1请求postman工具

前后端分离开发
在这里插入图片描述
Postman
postman是一款跟强大的我也测试与发送网页HTTP请求的Chrome插件
作用:常用于接口测试

在这里插入图片描述

2 简单参数和实体

简单参数
原始方式:在原始的web程序中,获取请求参数,需要通过HttpServletRequest对象手动获取
在这里插入图片描述
在main的java包里创建RequestController类

package com.itheima.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
//测试请求参数接收
@RestController
public class RequestController {
//    原始方式
    @RequestMapping("/simpleParam")
    public String simpleParam(HttpServletRequest request){
//        获取请求参数
        String name=request.getParameter("name");
        String ageStr=request.getParameter("age");
        int age=Integer.parseInt(ageStr);
        System.out.println(name+":"+age);
        return "OK";
    }
}

启动它的springboot类,在postman里面建立get请求,效果如图
在这里插入图片描述

springboot方式

在这里插入图片描述

package com.itheima.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
//测试请求参数接收
@RestController
public class RequestController {
//    原始方式
//    @RequestMapping("/simpleParam")
//    public String simpleParam(HttpServletRequest request){
        获取请求参数
//        String name=request.getParameter("name");
//        String ageStr=request.getParameter("age");
//        int age=Integer.parseInt(ageStr);
//        System.out.println(name+":"+age);
//        return "OK";
//    }
//
//springboot方式
    @RequestMapping("/simpleParam")
    public String simpleParam(String name,Integer age){
//        获取请求参数

        System.out.println(name+":"+age);
        return "OK";
    }
}

在这里插入图片描述
在这里插入图片描述
当参数对应不上,返回内容,不会报错,返回为null
在这里插入图片描述
参数不一致解决方案

package com.itheima.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
//测试请求参数接收
@RestController
public class RequestController {
//    原始方式
//    @RequestMapping("/simpleParam")
//    public String simpleParam(HttpServletRequest request){
        获取请求参数
//        String name=request.getParameter("name");
//        String ageStr=request.getParameter("age");
//        int age=Integer.parseInt(ageStr);
//        System.out.println(name+":"+age);
//        return "OK";
//    }
//
//springboot方式
    @RequestMapping("/simpleParam")
    public String simpleParam(@RequestParam(name="name",required=false) String u, Integer age){
//        获取请求参数

        System.out.println(u+":"+age);
        return "OK";
    }
}

在这里插入图片描述

小结

  1. 原始方式
    Controller方法形参中声明HttpServletRequest对象
    调用对象的getParameter(参数名)
  2. SpringBoot中接收简单参数
    请求参数名与方法形参变量名相同
    会自动进行类型转换
  3. @RequestParam注解
    方法形参名称与请求参数名称不匹配,通过该注解完成映射
    该注解的required属性默认是true,代表请求参数必须传值

实体参数
简单实体对象:请求参数名与形参对象属性名相同,定义POJO接收即可
在这里插入图片描述
如下:

package com.itheima.controller;
import com.itheima.pojo.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
//测试请求参数接收
@RestController
public class RequestController {
//    原始方式
//    @RequestMapping("/simpleParam")
//    public String simpleParam(HttpServletRequest request){
        获取请求参数
//        String name=request.getParameter("name");
//        String ageStr=request.getParameter("age");
//        int age=Integer.parseInt(ageStr);
//        System.out.println(name+":"+age);
//        return "OK";
//    }
//
//springboot方式
    @RequestMapping("/simpleParam")
    public String simpleParam(@RequestParam(name="name") String u, Integer age){
//        获取请求参数

        System.out.println(u+":"+age);
        return "OK";
    }
    //实体参数
    @RequestMapping("/simplePojo")
    public String simplePojo(User user){
        System.out.println(user);
        return "OR";
    }
}
package com.itheima.pojo;

public class User {
    private String name;
    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }
    public String toString(){
        return "User{"+
                "anme='"+name+'\''+
                ",age="+age+
                ';';
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

在这里插入图片描述

在这里插入图片描述

package com.itheima.controller;
import com.itheima.pojo.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
//测试请求参数接收
@RestController
public class RequestController {
//    原始方式
//    @RequestMapping("/simpleParam")
//    public String simpleParam(HttpServletRequest request){
        获取请求参数
//        String name=request.getParameter("name");
//        String ageStr=request.getParameter("age");
//        int age=Integer.parseInt(ageStr);
//        System.out.println(name+":"+age);
//        return "OK";
//    }
//
//springboot方式
    @RequestMapping("/simpleParam")
    public String simpleParam(@RequestParam(name="name") String u, Integer age){
//        获取请求参数

        System.out.println(u+":"+age);
        return "OK";
    }
    //实体参数
    @RequestMapping("/simplePojo")
    public String simplePojo(User user){
        System.out.println(user);
        return "OR";
    }
    //实体参数
    @RequestMapping("/complexPojo")
    public String complexPojo(User user){
        System.out.println(user);
        return "OR";
    }
}
package com.itheima.pojo;

public class User {
    private String name;
    private Integer age;
    private Address address;



    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }


    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", address=" + address +
                '}';
    }
}

package com.itheima.pojo;

public class Address {
    private String province;
    private String city;

    public String getProvince() {
        return province;
    }

    public void setProvince(String province) {
        this.province = province;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    @Override
    public String toString() {
        return "Address{" +
                "province='" + province + '\'' +
                ", city='" + city + '\'' +
                '}';
    }


}

在这里插入图片描述
小结
实体参数:请求参数名与形参对象属性名相同,即可直接通过POJO接收

3数组集合参数

element官网:https://element.eleme.cn/#/zh-CN/component/installation
数组参数封装
在这里插入图片描述

package com.itheima.controller;
import com.itheima.pojo.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;

//测试请求参数接收
@RestController
public class RequestController {
//    原始方式
//    @RequestMapping("/simpleParam")
//    public String simpleParam(HttpServletRequest request){
        获取请求参数
//        String name=request.getParameter("name");
//        String ageStr=request.getParameter("age");
//        int age=Integer.parseInt(ageStr);
//        System.out.println(name+":"+age);
//        return "OK";
//    }
//
//springboot方式
    @RequestMapping("/simpleParam")
    public String simpleParam(@RequestParam(name="name") String u, Integer age){
//        获取请求参数

        System.out.println(u+":"+age);
        return "OK";
    }
    //实体参数
    @RequestMapping("/simplePojo")
    public String simplePojo(User user){
        System.out.println(user);
        return "OR";
    }
    //实体参数
    @RequestMapping("/complexPojo")
    public String complexPojo(User user){
        System.out.println(user);
        return "OR";
    }
    //数组参数
    @RequestMapping("/arrayParam")
    public String arrayParam(String[] hobby){
        System.out.println(Arrays.toString(hobby));
        return "OR";
    }
}

在这里插入图片描述
在这里插入图片描述
集合参数封装
在这里插入图片描述

package com.itheima.controller;
import com.itheima.pojo.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
import java.util.List;

//测试请求参数接收
@RestController
public class RequestController {
//    原始方式
//    @RequestMapping("/simpleParam")
//    public String simpleParam(HttpServletRequest request){
        获取请求参数
//        String name=request.getParameter("name");
//        String ageStr=request.getParameter("age");
//        int age=Integer.parseInt(ageStr);
//        System.out.println(name+":"+age);
//        return "OK";
//    }
//
//springboot方式
    @RequestMapping("/simpleParam")
    public String simpleParam(@RequestParam(name="name") String u, Integer age){
//        获取请求参数

        System.out.println(u+":"+age);
        return "OK";
    }
    //实体参数
    @RequestMapping("/simplePojo")
    public String simplePojo(User user){
        System.out.println(user);
        return "OR";
    }
    //实体参数
    @RequestMapping("/complexPojo")
    public String complexPojo(User user){
        System.out.println(user);
        return "OR";
    }
    //数组参数
    @RequestMapping("/arrayParam")
    public String arrayParam(String[] hobby){
        System.out.println(Arrays.toString(hobby));
        return "OR";
    }
    //集合参数
    @RequestMapping("/listParam")
    public String listParam(@RequestParam List<String> hobby){
        System.out.println(hobby);
        return "OR";
    }
}

在这里插入图片描述
小结
数组:请求参数名与形参中数组变量名相同,可以直接使用数组封装
集合:请求参数名与形参中集合变量名相同,可以通过@RequestParam绑定参数关系

日期参数

在这里插入图片描述

package com.itheima.controller;
import com.itheima.pojo.User;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;

//测试请求参数接收
@RestController
public class RequestController {
//    原始方式
//    @RequestMapping("/simpleParam")
//    public String simpleParam(HttpServletRequest request){
        获取请求参数
//        String name=request.getParameter("name");
//        String ageStr=request.getParameter("age");
//        int age=Integer.parseInt(ageStr);
//        System.out.println(name+":"+age);
//        return "OK";
//    }
//
//springboot方式
    @RequestMapping("/simpleParam")
    public String simpleParam(@RequestParam(name="name") String u, Integer age){
//        获取请求参数

        System.out.println(u+":"+age);
        return "OK";
    }
    //实体参数
    @RequestMapping("/simplePojo")
    public String simplePojo(User user){
        System.out.println(user);
        return "OR";
    }
    //实体参数
    @RequestMapping("/complexPojo")
    public String complexPojo(User user){
        System.out.println(user);
        return "OR";
    }
    //数组参数
    @RequestMapping("/arrayParam")
    public String arrayParam(String[] hobby){
        System.out.println(Arrays.toString(hobby));
        return "OR";
    }
    //集合参数
    @RequestMapping("/listParam")
    public String listParam(@RequestParam List<String> hobby){
        System.out.println(hobby);
        return "OR";
    }
    //时间参数
    @RequestMapping("/dateParam")
    public String dateParam(@DateTimeFormat(pattern ="yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){
        System.out.println(updateTime);
        return "Ok";
    }
}

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

Json参数

在这里插入图片描述

package com.itheima.controller;
import com.itheima.pojo.User;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;

//测试请求参数接收
@RestController
public class RequestController {
//    原始方式
//    @RequestMapping("/simpleParam")
//    public String simpleParam(HttpServletRequest request){
        获取请求参数
//        String name=request.getParameter("name");
//        String ageStr=request.getParameter("age");
//        int age=Integer.parseInt(ageStr);
//        System.out.println(name+":"+age);
//        return "OK";
//    }
//
//springboot方式
    @RequestMapping("/simpleParam")
    public String simpleParam(@RequestParam(name="name") String u, Integer age){
//        获取请求参数

        System.out.println(u+":"+age);
        return "OK";
    }
    //实体参数
    @RequestMapping("/simplePojo")
    public String simplePojo(User user){
        System.out.println(user);
        return "OR";
    }
    //实体参数
    @RequestMapping("/complexPojo")
    public String complexPojo(User user){
        System.out.println(user);
        return "OR";
    }
    //数组参数
    @RequestMapping("/arrayParam")
    public String arrayParam(String[] hobby){
        System.out.println(Arrays.toString(hobby));
        return "OR";
    }
    //集合参数
    @RequestMapping("/listParam")
    public String listParam(@RequestParam List<String> hobby){
        System.out.println(hobby);
        return "OR";
    }
    //时间参数
    @RequestMapping("/dateParam")
    public String dateParam(@DateTimeFormat(pattern ="yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){
        System.out.println(updateTime);
        return "Ok";
    }
    //json参数
    @RequestMapping("/jsonParam")
    public String jsonParam(@RequestBody User user){
        System.out.println(user);
        return "Ok";
    }


}

package com.itheima.pojo;

public class User {
    private String name;
    private Integer age;
    private Address address;



    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }


    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", address=" + address +
                '}';
    }
}

package com.itheima.pojo;

public class Address {
    private String province;
    private String city;

    public String getProvince() {
        return province;
    }

    public void setProvince(String province) {
        this.province = province;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    @Override
    public String toString() {
        return "Address{" +
                "province='" + province + '\'' +
                ", city='" + city + '\'' +
                '}';
    }


}

在这里插入图片描述

路径参数

在这里插入图片描述
单个路径参数

package com.itheima.controller;
import com.itheima.pojo.User;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;

//测试请求参数接收
@RestController
public class RequestController {
//    原始方式
//    @RequestMapping("/simpleParam")
//    public String simpleParam(HttpServletRequest request){
        获取请求参数
//        String name=request.getParameter("name");
//        String ageStr=request.getParameter("age");
//        int age=Integer.parseInt(ageStr);
//        System.out.println(name+":"+age);
//        return "OK";
//    }
//
//springboot方式
    @RequestMapping("/simpleParam")
    public String simpleParam(@RequestParam(name="name") String u, Integer age){
//        获取请求参数

        System.out.println(u+":"+age);
        return "OK";
    }
    //实体参数
    @RequestMapping("/simplePojo")
    public String simplePojo(User user){
        System.out.println(user);
        return "OR";
    }
    //实体参数
    @RequestMapping("/complexPojo")
    public String complexPojo(User user){
        System.out.println(user);
        return "OR";
    }
    //数组参数
    @RequestMapping("/arrayParam")
    public String arrayParam(String[] hobby){
        System.out.println(Arrays.toString(hobby));
        return "OR";
    }
    //集合参数
    @RequestMapping("/listParam")
    public String listParam(@RequestParam List<String> hobby){
        System.out.println(hobby);
        return "OR";
    }
    //时间参数
    @RequestMapping("/dateParam")
    public String dateParam(@DateTimeFormat(pattern ="yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){
        System.out.println(updateTime);
        return "Ok";
    }
    //json参数
    @RequestMapping("/jsonParam")
    public String jsonParam(@RequestBody User user){
        System.out.println(user);
        return "Ok";
    }
    //path参数
    @RequestMapping("/path/{id}")
    public String pathParam(@PathVariable Integer id){
        System.out.println(id);
        return "Ok";
    }


}

在这里插入图片描述
多个路径参数

package com.itheima.controller;
import com.itheima.pojo.User;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;

//测试请求参数接收
@RestController
public class RequestController {
//    原始方式
//    @RequestMapping("/simpleParam")
//    public String simpleParam(HttpServletRequest request){
        获取请求参数
//        String name=request.getParameter("name");
//        String ageStr=request.getParameter("age");
//        int age=Integer.parseInt(ageStr);
//        System.out.println(name+":"+age);
//        return "OK";
//    }
//
//springboot方式
    @RequestMapping("/simpleParam")
    public String simpleParam(@RequestParam(name="name") String u, Integer age){
//        获取请求参数

        System.out.println(u+":"+age);
        return "OK";
    }
    //实体参数
    @RequestMapping("/simplePojo")
    public String simplePojo(User user){
        System.out.println(user);
        return "OR";
    }
    //实体参数
    @RequestMapping("/complexPojo")
    public String complexPojo(User user){
        System.out.println(user);
        return "OR";
    }
    //数组参数
    @RequestMapping("/arrayParam")
    public String arrayParam(String[] hobby){
        System.out.println(Arrays.toString(hobby));
        return "OR";
    }
    //集合参数
    @RequestMapping("/listParam")
    public String listParam(@RequestParam List<String> hobby){
        System.out.println(hobby);
        return "OR";
    }
    //时间参数
    @RequestMapping("/dateParam")
    public String dateParam(@DateTimeFormat(pattern ="yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){
        System.out.println(updateTime);
        return "Ok";
    }
    //json参数
    @RequestMapping("/jsonParam")
    public String jsonParam(@RequestBody User user){
        System.out.println(user);
        return "Ok";
    }
    //path参数
    @RequestMapping("/path/{id}")
    public String pathParam(@PathVariable Integer id){
        System.out.println(id);
        return "Ok";
    }

    // more path
    @RequestMapping("/path/{id}/{name}")
    public String pathParam2(@PathVariable Integer id,@PathVariable String name){
        System.out.println(id);
        System.out.println(name);
        return "Ok";
    }

}

在这里插入图片描述
总结

  1. 简单参数
    定义方法形参 秦秋参数名与形参变量名一致
    如果不一致,通过@RequestParam手动映射
  2. 实体参数
    请求参数名,与实体对象的属性名一致,会自动接收封装
  3. 数组集合参数
    数组:请求参数名与数组名一致,直接封装
    集合:请求参数名与集合名一致,@RequestParam绑定关系
  4. 日期参数
    @DataTimeFormat
  5. JSON参数
    @RequestBody
  6. 路径参数
    @PathVariable

Response&统一响应结果

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

  1. @ResponseBody
    位置:Controller类上/方法上
    作用:将方法返回值直接响应,若返回值类型是实体对象/集合,转JSON格式响应
  2. 统一响应结果
    Result(code,msg,data)

响应案例

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

三层架构

三层架构概念

在这里插入图片描述

contorller:控制层,接受前端发送的请求,对请求进行处理,并响应数据
service:业务逻辑层,处理具体的业务逻辑
dao:数据访问层(Data Access Object)(持久层),负责数据访问操作,包括数据的增删改查
在这里插入图片描述

分层解耦

内聚:软件中各个功能模块内部的功能联系。
耦合:衡量软件中各个层/模块之间的依赖,关联的程度
软件设计原则:高内聚低耦合

在这里插入图片描述

IOC&DI入门

在这里插入图片描述

IOC详解

在这里插入图片描述

元注解:注解的注解
在这里插入图片描述
小结
声明bean的注解

  • @Component ,@Controller,@Service,@Repository
  • @SpringBootApplication具有包的扫描作用,默认扫描当前及其子包

DI详解

在这里插入图片描述

小结
依赖注入的注解

  • @Autowired:莫问按照类型自动装配
  • 如果是同类型的bean存在多个:
    1.@Primary
    2.@Autowired+@Qualifier(“bean的名称”)
    3.@Resource(name="bean的名称’’

@Resource与@Autowired的区别

  • @Autowired是spring框架提供的注解,而@Resource是JDK提供的注解
  • @Autowired默认是按照类型注入,而@Resource默认是按照名称注入

Mysql

mysql课程介绍

在这里插入图片描述
什么是数据库?
数据库:DataBase(DB),是存储和管理数据的仓库
数据库管理系统:DataBase Management System(DBMS),操纵和管理数据库的大型软件。
SQL:Structured Query Language ,操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准。
**数据库产品 **
在这里插入图片描述
课程安排
在这里插入图片描述

Mysql概述_安装

MySQL安装
在这里插入图片描述
在这里插入图片描述
其他相关信息联系:
mysql企业开发使用方式
可以用VMwere虚拟软件虚拟服务器
dos窗口:

mysql -u用户名 -p密码 [ -h数据库服务器地址 -p端口号]

例子:在这里插入图片描述

在这里插入图片描述

数据模型&SQL简介

M有SQL数据模型
关系型数据库RDMS:建立在关系模型基础上,有多张相互连接的二维表组成的数据库。

特点:

  1. 使用表存储数据,格式统一,便于维护
  2. 使用SQL语言操作,标准统一,可用于复杂查询

SQL简介
SQL:一门操作关系数据库的编程语言,定义操作所有关系型数据库的统一标准。
在这里插入图片描述
SQL分类
在这里插入图片描述

小结
在这里插入图片描述

DDL-数据库操作

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

DDL-图形化操作

MySQL客户端工具
MySQL客户端工具有:SQLyog Navicat DataGrip 等
DataGrip
介绍:DataGrip是jetBrains旗下的一款数据仓库管理工具,是管理和开发MySQL,Oracle,PostgreSQL的理想解决方案
官网:https://www.jetbrains.com/zh-cn/datagrip/
安装:参考资料中提供的《DataGrip安装手册》

tips
步骤
解压——创建项目——下载驱动——测试链接——展现所有的数据库
在这里插入图片描述

查询之前的控制台
在这里插入图片描述

DDL-表结构操作-创建

在这里插入图片描述

-- 注释
show databases ;
-- 创建数据库
create database db02;
use db02;
create table  tb_user_1(
    id int primary key comment'ID 唯一标识',
username varchar(20) not null comment '用户名',
name varchar(10) comment'姓名',
age int  comment '年龄',
gender char(1) default '男' comment '姓名'
)comment '用户表';

DDL-表结构操作-数据类型

MySQL数据类型:
主要分为三类,数据类型,字符串类型,日期时间类型。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

DDL-表结构操作-案例

在这里插入图片描述

在这里插入图片描述

DDL-表结构-查询修改删除

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
知识回顾
在这里插入图片描述

DML-添加数据insert

在这里插入图片描述
DML
DML英文全称Data Manipulation Language(数据操作语言),用来对数据仓库中的表的数据记录进行增删改操作

添加数据 INSERT
在这里插入图片描述
注意事项:

在这里插入图片描述

DML-修改数据update

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

DML-删除数据delete

在这里插入图片描述
在这里插入图片描述
知识回顾
在这里插入图片描述

DQL-基本查询

DQL

  1. DQL英文全称Data Query Language (数据查询语言),用来查询数据库表中的记录
  2. 关键字:SELECT
    在这里插入图片描述
    基本查询
    在这里插入图片描述
    在这里插入图片描述

DQL-条件查询

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

DQL-聚合函数

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

DQL-分组查询

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

DQL-排序查询

在这里插入图片描述

DQL-分页查询

在这里插入图片描述

DQL-案例

案例1
在这里插入图片描述

select *from the_emp where name  likre  '%张%' and gender=1 and entrydate between '2000-01-01' and '2015-12-31' order by update_time desc limit 0,10;

案例2
注意:导入Apache ECharts组件库显示报表多元分析统计

Apache Echarts组件库的连接:https://echarts.apache.org/zh/index.html

-- 案例1 根据需求,完成员工性别信息的统计 -count(*)
-- if(条件表达式,true取值,false取值)
select if(gender=1,'男性员工','女性员工') 性别,count(*) from tb_emp group by gender;

-- 案例2 根据需求,王超员工职位的信息统计
-- case 表达式 when 值1 then 结果1 when 值2 then 结果2... else ... end
select (case job when 1 then  '班主任' when 2 then '讲师' when 3 then '学工主管' when 4 then '校验主管' else '未分配职位' end ) 职位 job,count(*) from tb_emp group by job;

知识回顾
在这里插入图片描述
在这里插入图片描述

多表设计-一对多

在这里插入图片描述
外键约束
在这里插入图片描述
在这里插入图片描述

多表设计-一对一&多对多

一对一
在这里插入图片描述
多对多
在这里插入图片描述

多表设计-案例-关系分析

多表设计-案例-表结构

多表查询-概述

多表查询:指从多张表中查询数据
笛卡尔积:笛卡尔乘积就是指在数学中,两个集合(A集合和B集合)的所有组合情况
在这里插入图片描述
分类
连接查询
内连接:相当于查询A、B交集的部分数据
外连接:
1.左外连接:查询左表所有的数据(包括两张表的交集部分数据)
2.右外连接:查询右表所有数据(包括两张表交集部分数据)
子查询

多表查询-内连接

内连接
隐式内连接

select 字段列表 from1,2 where 条件...;

显示内连接

select 字段列表 from1 [inner] join2 on 连接条件;

在这里插入图片描述

例子
在这里插入图片描述

多表查询-外连接

外连接
左外连接

select 字段列表 from1 left  [outer] join2 on 链接条件...;

右外连接

select 字段列表 from1 right [outer] join2 on 连接条件...;

例子
在这里插入图片描述

多表查询-子查询1

概述:

  • 介绍:SQL中嵌套select语句,称为嵌套语句,又称子查询。
  • 形式:
select *from t1 where column1=select column1)from t2...)
  • 子查询外部的语句可以是insert/update/delete/select 的任何一个,最常见的是select

子查询分类
变量子查询:子查询返回的结果为单个值
列子查询:子查询返回的结果为一列
行子查询:子查询返回的结果为一行
表子查询:子查询返回结果为多行多列

标量子查询

  • 子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式
  • 常用的条件 := > >= <> <=

例子
在这里插入图片描述

列子查询

  • 子查询返回的结果是一列(可以是多行)
  • 常用的 :in 、not in等

例子
在这里插入图片描述

多表查询-子查询2

行子查询

  • 子查询返回的结果为一行(可以是多列)
  • 常用的操作符:=、<>、in、not in

例子
在这里插入图片描述
表子查询

  • 子查询返回的结果是多行多列,常作为临时表
  • 常用的操作符为in

例子
在这里插入图片描述

多表查询-案例1

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

-- 查询价格低于元的菜品名称,价格机器菜品的分类名称
-- 表:dish category
-- SQL:
select d.name ,d.price,c.name
from dish d,category c
where d.category_id=c.id and d.price <10;
--2.查询所有价格在10元到50员之间且状态为‘起售’的彩屏,展示出彩屏的名称,价格及其菜品的分类名称(及时菜品没有恩磊,也需要将菜品查询出来)
-- 表:dish category
-- SQL:
select d.name,d.price,c.name 
from dish d 
left join category c on d.category_id=c.id
where d.price between 10 and 50 and d.status =1;
--3.查询每个分类喜爱最贵的菜品,显示分类的名称,最贵的菜品的价格
-- table:dish category
-- SQL:
select c.name,max(d.price)
from dish d,category c
where d.category_id=c.id
group by c.name 
-- 4.查询个分类下菜品的状态为起售,并且该分类下菜品的总数量大于等于3分类的名称
--table:dish category
--SQL:
select c.name,count(*)
from dish d,category c
where d.category_id=c.id and d.state=1
group by c.name having count(*) >=3;
--5.查询出商务套餐A 中包含了哪些菜品(展示出套餐名称,价格,包含的菜品名称,价格,份数)
--table:setmeal setmeal dish ,dish
--SQL:
select s.name,s.price,d.name,d.price,sd.copies
from setmeal s,setmeal_dish sd,dish d 
where s.id=sd.setmeal_id 
and sd.dish_id=d.id 
and s.name='商务套餐A';
--6.查询出低于菜品平均价格的菜品信息(展示出菜品名称,菜品价格)
--table:dish
--SQL:
select *from dish where price < (select avg(price) from dish);

事务-介绍与操作

在这里插入图片描述
介绍
概念:事务是一组操作的集合,它是一个不可分割的工作单位。事务会把所有的操作作为一个整体一起向系统提交撤销操作请求,即这些操作要么同时成功,要么同时失败。
注意
默认MySQL的事务是自动提交的,也就是说,当执行一条DML语句,MySQL会立即隐式的提交事务。
事务控制

  • 开启事务:start transaction ;/begin
  • 提交事务:commit;
  • 回滚事务:rollback

例子

-- 开启事务
start transaction;
--删除部门
delete from tb_dept where id=3;
delete from tb_emp where dept_id=3;
-- 提交事务:commit;
commit;
-- 回滚事务:rollback
rollback;

事务-四大特性(ACID)

  • 原子性(Atomicity):事务是不可分割的最小单元,要么全部成功,要么全部失败
  • 一致性(Consistency):事务完成时,必须使所有数据都保持一致状态
  • 隔离性 (Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
  • 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据改变是永久的

索引-介绍

概念
索引(index)是帮助数据库高效获取数据的数据结构。
在这里插入图片描述
优缺点
优点

  • 提高数据处查询的效率,降低数据库的IO成本
  • 通过索引列对数据进行排序、降低数据排序的成本,降低CPU 的消耗

缺点:

  • 索引会占用存储空间
  • 索引会大大提高查询效率,同时却也降低了insert、update、delete等效率

索引-结构

在这里插入图片描述
MySQL数据库中默认的索引结构是B+tree
在这里插入图片描述

索引-操作语法

语法
在这里插入图片描述

例子
在这里插入图片描述

Mybatis

入门课程介绍

  • Mybatis是一款优秀的持久层框架,用于简化JDBC的开发
  • Mybatis本事Apache的一个开源的项目iBatis,2010这个项目由apache迁移到google code,改名为Mybatis,2013年11月迁移到Github
  • 官网:https://mybatis.org/mybatis-3/zh/index.html
    在这里插入图片描述

快速入门程序

步骤:使用Mybatis查询所有用户数据

步骤
在这里插入图片描述
认识数据库的一些参数

在这里插入图片描述
在这里插入图片描述
创建工程
在这里插入图片描述

在这里插入图片描述

导入依赖认识
在这里插入图片描述
生成pojo.User.java
在这里插入图片描述
在resource文件夹下的application.properties链接数据库

#配置数据库的连接信息——四要素
#驱动类名称
Spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#连接数据库的url
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
#链接数据库的用户名
spring.datasource.username=root
#链接数据库的密码
spring.datasource.password=123456

创建Mapper接口包装语句

package com.itheima.mapper;

import com.itheima.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface UserMapper {
    @Mapper //在运行时,会自动生成该接口的实现类对象(代理对象),并且将该对象交给IOC容器管理
//查询全部用户信息
        @Select("select * from user;")
        public List<User> list();

}

测试类

package com.itheima;

import com.itheima.mapper.UserMapper;
import com.itheima.pojo.User;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
//@RunWith(SpringRunner.class)
@SpringBootTest //Springboot整合单位测试的注解


public class SpringbootMybatisQuickstart02ApplicationTests {
 @Autowired(required = false)
//@Resource

 private UserMapper userMapper;
    @Test
   public  void testListUser() {
        List<User> userList=userMapper.list();
        userList.stream().forEach(user ->{
            System.out.println(user);
        });
    }

}


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

在这里插入图片描述

配置SQL提示

显示上下文——注入语言设置——mysql
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

JDBC

JDBC:(java DataBase Connectiity),就是使用Java语言操作关系型数据库的一套API。在这里插入图片描述
本质

  • sun公司官方定义的一套操作所有关系型数据库的规范,即接口
  • 各个数据库厂商去实现这套接口,提供数据库驱动jar包
  • 我们可以使用这套接口(JDBC)编程,真正执行代码是驱动jar包中的实现类

例子
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
jdbc程序
在这里插入图片描述
jdbc和mybatis
在这里插入图片描述
mybatis
在这里插入图片描述

数据库连接池

在这里插入图片描述
在这里插入图片描述
切换连接池
在这里插入图片描述
小结
数据库连接池

  • 是一个容器,负责分配、管理数据库链接(Connection)
  • 优势:资源复用,提升系统响应程度
  • 接口:DataSource
  • 产品:C3P0,DBCP,Druid、Hikari

lombok工具包介绍

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

lombok依赖

<!--            lombok-->
            <dependency>
            <groupId>org.prjectlombok</groupId>
            <artifactId>lombok</artifactId>
            </dependency>

lombok依赖后,可以用依赖注入解决get/set hashcode equal方法

//@Getter
//@Setter
//@ToString
//@EqualsAndHashCode
//可以归结为@Data
@Data //getset hashcode equals方法
@NoArgsConstructor
@AllArgsConstructor

基础操作-环境准备

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

基础操作-删除

基础操作-删除(预编译SQL)

基础操作-新增

基础操作-主键返回

基础操作-更新

基础操作-根据ID查询

基础操作-条件查询

XML映射条件

动态SQL-if

动态SQL-if案例

动态SQL-foreach

动态SQL-sql&include

案例

准备工作

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奶茶精Gaaa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值