编辑时间:2023/10/27
来源:黑马程序员
前端:HTML 、CSS 、JavaScript、 Vue 、Element 、Nginx
后端:Maven SpringBoot 、MySql 、SpringBoot Mybatis、 SpringBoot Web
Asynchronous JavaScript And XML ,异步的JavaScript和XML
作用:
数据交换:通过ajax可以给ie服务器发生请求,并且过去服务器响应的数据
异步交互:可以给不加载的整个页面的情况下,与服务器交换数据并且更新部分网页的技术,如:搜索联想,用户名是否可以校验等。
模块化(js css)
组件化(UI结构 样式 行为)
规范化(目录结构 编码 接口)
自动化(构建 部署 测试)
环境准备
vue-cil
终端:npm run server
或者在package json文件里运行
打开任务管理器(快捷键ctrl+shift+esc)
cmd命令查看占用端口的资源
netstat -ano | findStr 80
maven是apache旗下的一个开源的项目,是管理构建Java的工具。
apache软件基金会是目前世界上最大最受欢迎的开源软件基金会,也是一个专门为支持开源软件而生的非营利性组织,访问apache网址:
https://www.apache.org/index.html#projects-list
作用一:依赖管理:方便快捷的管理项目依赖的资源(jar包)避免冲突问题。
依赖设置
在建立好maven模块的pom.xml文件建立依赖
<dependencies>
<dependency>
<groupId>ch.qos.logbackgroupId>
<artifactId>logback-classicartifactId>
<version>1.2.4version>
dependency>
dependencies>
项目构建:标准化平台的自动化项目的构建方式。
编译:运行maven面板的compile生成target文件
打包:运行maven面板的package生成target文件
中央仓库地址:https://repo1.maven.org/maven2/
pom.xml里的maven坐标
<groupId>org.examplegroupId>
<artifactId>untitledartifactId>
<version>1.0-SNAPSHOTversion>
地址:https://maven.apache.org/download.cgi
<mirror>
<id>alimavenid>
<name>aliyun mavenname>
<url>http://maven.aliyun.com/nexus/content/groups/public/url>
<mirrorOf>certralmirrorOf>
mirror>
mirrors>
<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-assembly-pluginartifactId>
<version>2.4.1version>
<configuration>
<descriptorRefs><descriptorRef>jar-with-dependenciesdescriptorRef>descriptorRefs>
configuration>
<executions>
<execution>
<id>make-assemblyid><phase>packagephase>
<goals><goal>singlegoal>goals>
execution>
executions>
plugin>
plugins>
build>
<dependencies>
<dependency>
<groupId>ch.qos.logbackgroupId>
<artifactId>logback-classicartifactId>
<version>1.2.10version>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
<scope>testscope>
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命令
官网:spring.io
Spring发展到现在已经形成了一种开发生态圈,Spring提供了若干子项目,每个项目用于完成特定的功能。
Spring Boot:帮助我们快速的构建开发框架,简化开发,提高效率。
需求:使用SpringBoot开发一个web应用,浏览器发起请求之后/hrllo后,给浏览器返回“HelloWord”
如果找不到插件,加入版本号这一行如:
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
<version>2.7.4version>
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~";
}
}
HTTP
概念:Hyper Test Transfer Protocol ,超文本概述规定了浏览器和服务器之间数据传输的规则。
Tomcat简介
安装-卸载-启动(bin/startup.bat)-终止(bin/shutdown.bat)-部署(应用复制到webapps目录)
下载:https://tomcat.apache.org/download-90.cgi
可以知道我们多使用的是内勤啊的tomcat,外部tomcat一般很少使用
https://start.spring.io/
前后端分离开发
Postman
postman是一款跟强大的我也测试与发送网页HTTP请求的Chrome插件
作用:常用于接口测试
简单参数
原始方式:在原始的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";
}
}
小结
实体参数
简单实体对象:请求参数名与形参对象属性名相同,定义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接收
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";
}
}
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";
}
}
contorller:控制层,接受前端发送的请求,对请求进行处理,并响应数据
service:业务逻辑层,处理具体的业务逻辑
dao:数据访问层(Data Access Object)(持久层),负责数据访问操作,包括数据的增删改查
内聚:软件中各个功能模块内部的功能联系。
耦合:衡量软件中各个层/模块之间的依赖,关联的程度
软件设计原则:高内聚低耦合
小结
依赖注入的注解
@Resource与@Autowired的区别
什么是数据库?
数据库:DataBase(DB),是存储和管理数据的仓库
数据库管理系统:DataBase Management System(DBMS),操纵和管理数据库的大型软件。
SQL:Structured Query Language ,操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准。
**数据库产品 **
课程安排
MySQL安装
其他相关信息联系:
mysql企业开发使用方式
可以用VMwere虚拟软件虚拟服务器
dos窗口:
mysql -u用户名 -p密码 [ -h数据库服务器地址 -p端口号]
例子:
M有SQL数据模型
关系型数据库RDMS:建立在关系模型基础上,有多张相互连接的二维表组成的数据库。
特点:
SQL简介
SQL:一门操作关系数据库的编程语言,定义操作所有关系型数据库的统一标准。
SQL分类
MySQL客户端工具
MySQL客户端工具有:SQLyog Navicat DataGrip 等
DataGrip
介绍:DataGrip是jetBrains旗下的一款数据仓库管理工具,是管理和开发MySQL,Oracle,PostgreSQL的理想解决方案
官网:https://www.jetbrains.com/zh-cn/datagrip/
安装:参考资料中提供的《DataGrip安装手册》
tips
步骤
解压——创建项目——下载驱动——测试链接——展现所有的数据库
-- 注释
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 '用户表';
MySQL数据类型:
主要分为三类,数据类型,字符串类型,日期时间类型。
DML
DML英文全称Data Manipulation Language(数据操作语言),用来对数据仓库中的表的数据记录进行增删改操作
DQL
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 字段列表 from 表1,表2 where 条件...;
显示内连接
select 字段列表 from 表1 [inner] join 表2 on 连接条件;
外连接
左外连接
select 字段列表 from 表1 left [outer] join 表2 on 链接条件...;
右外连接
select 字段列表 from 表1 right [outer] join 表2 on 连接条件...;
概述:
select *from t1 where column1=(select column1)from t2...)
子查询分类
变量子查询:子查询返回的结果为单个值
列子查询:子查询返回的结果为一列
行子查询:子查询返回的结果为一行
表子查询:子查询返回结果为多行多列
标量子查询
列子查询
行子查询
-- 查询价格低于元的菜品名称,价格机器菜品的分类名称
-- 表: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;
--删除部门
delete from tb_dept where id=3;
delete from tb_emp where dept_id=3;
-- 提交事务:commit;
commit;
-- 回滚事务:rollback
rollback;
概念
索引(index)是帮助数据库高效获取数据的数据结构。
优缺点
优点:
缺点:
步骤:使用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);
});
}
}
JDBC:(java DataBase Connectiity),就是使用Java语言操作关系型数据库的一套API。
本质
例子
jdbc程序
jdbc和mybatis
mybatis
lombok依赖
<dependency>
<groupId>org.prjectlombokgroupId>
<artifactId>lombokartifactId>
dependency>
lombok依赖后,可以用依赖注入解决get/set hashcode equal方法
//@Getter
//@Setter
//@ToString
//@EqualsAndHashCode
//可以归结为@Data
@Data //getset hashcode equals方法
@NoArgsConstructor
@AllArgsConstructor