【SpringMVC】提问问题汇总

news2024/12/29 16:33:22

【SpringMVC】提问问题汇总

    • (1)什么是Spring MVC ?对springMVC的理解?
    • (2)SpringMVC的流程?
    • (3)Springmvc的重要组件
    • (3)Springmvc的优点(设计模式)
    • (4)SpringMVC怎么样设定重定向和转发的?
    • (5)SpringMVC常用的注解有哪些?
    • (6)@PathVariable和@RequestParam的区别?
    • (6)SpingMvc中的控制器的注解一般用哪个?有没有别的注解可以替代?
    • (7)如何解决POST请求中文乱码问题,GET的又如何处理呢?
    • (8)SpringMvc里面拦截器是怎么写的
    • (9)SpringMvc中函数的返回值是什么?
    • (10)SpringMvc用什么对象从后台向前台传递数据的?
    • (11)SpringMvc注解原理

(1)什么是Spring MVC ?对springMVC的理解?

Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。

(2)SpringMVC的流程?

(1)用户发送请求至前端控制器DispatcherServlet;
(2)DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handler;
(3)处理器映射器根据请求url找到具体的处理器Handler,生成处理器对象及处理器拦截器(如果有则生成),一并返回给DispatcherServlet;
(4)DispatcherServlet 调用 HandlerAdapter处理器适配器,请求执行Handler;
(5)HandlerAdapter 经过适配调用 具体处理器进行处理业务逻辑;
(6)Handler执行完成返回ModelAndView;
(7)HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;
(8)DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析;
(9)ViewResolver解析后返回具体View;
(10)DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
(11)DispatcherServlet响应用户。

在这里插入图片描述

(3)Springmvc的重要组件

(1)前端控制器 DispatcherServlet:接收请求、响应结果,相当于转发器,有了DispatcherServlet 就减少了其它组件之间的耦合度。其作用是接收用户请求,然后给用户反馈结果。它的作用相当于一个转发器或中央处理器,控制整个流程的执行,对各个组件进行统一调度,以降低组件之间的耦合性,有利于组件之间的拓展。
(2)处理器映射器 HandlerMapping:根据请求的URL来查找Handler。其作用是根据请求的URL路径,通过注解或者XML配置,寻找匹配的处理器信息。
(3)处理器适配器 HandlerAdapter:负责执行Handler。其作用是根据映射器处理器找到的处理器信息,按照特定规则执行相关的处理器(Handler)。
(4)处理器 Handler:处理器,需要程序员开发。其作用是执行相关的请求处理逻辑,并返回相应的数据和视图信息,将其封装至ModelAndView对象中。
(5)视图解析器 ViewResolver:进行视图的解析,根据视图逻辑名将ModelAndView解析成真正的视图(view)。其作用是进行解析操作,通过ModelAndView对象中的View信息将逻辑视图名解析成真正的视图View(如通过一个JSP路径返回一个真正的JSP页面)。
(6)视图View:View是一个接口, 它的实现类支持不同的视图类型,如jsp,freemarker,pdf等等

(3)Springmvc的优点(设计模式)

(1)可以支持各种视图技术,而不仅仅局限于JSP;
(2)与Spring框架集成(如IoC容器、AOP等);
(3)清晰的角色分配:前端控制器(dispatcherServlet) ,请求到处理器映射(handlerMapping),处理器适配器(HandlerAdapter),视图解析器(ViewResolver)。
(4) 支持各种请求资源的映射策略。

(4)SpringMVC怎么样设定重定向和转发的?

(1)转发:在返回值前面加"forward:“,譬如"forward:user.do?name=method4”

@RequestParam("/login")
public String redirect(User user){
    if{
        //登录成功...
    }else{
        //登录失败,转发到登录页面
        return "forward:tologin";
    }
}

(2)重定向:在返回值前面加"redirect:“,譬如"redirect:http://www.baidu.com”
例如我们在登录的时候,登录失败会重定向到登录页面。

@RequestParam("/login")
public String redirect(User user){
    if{
        //登录成功...
    }else{
        //登录失败,重定向到登录页面
        return "redirect:tologin";
    }
}

(5)SpringMVC常用的注解有哪些?

(1)@RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。
返回值会通过视图解析器解析为实际的物理视图,对于 InternalResourceViewResolver 视图解析器,通过 prefix + returnValue + suffix 这样的方式得到实际的物理视图,然后做转发操作。

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/>
</bean>

RequestMapping注解有六个属性

value:
指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);
method:
指定请求的method类型, GET、POST、PUT、DELETE等;
consumes:
指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
produces:
指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
params:
指定request中必须包含某些参数值是,才让该方法处理。
headers:
指定request中必须包含某些指定的header值,才能让该方法处理请求。

(2)@RequestBody:注解实现接收http请求的json数据,将json转换为java对象。

(3)@ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。
作用:该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;

(6)@PathVariable和@RequestParam的区别?

(1)@PathVariable:
1-@PathVariable用于接收uri地址传过来的参数,Url中可以通过一个或多个{Xxx}占位符映射,通过@PathVariable可以绑定占位符参数到方法参数中,在RestFul接口风格中经常使用。
2-例如:请求URL:http://localhost/user/21/张三/query
(Long类型可以根据需求改变为String或int,SpringMVC会自动做转换)

@RequestMapping("/user/{userId}/{userName}/query")
public User query(@PathVariable("userId") Long userId, @PathVariable("userName") String userName){

}

(2)@RequestParam
@RequestParam用于将请求参数映射到控制器方法的形参上,有如下三个属性
1-value:参数名。
2-required:是否必需,默认为true,表示请求参数中必须包含该参数,如果不包含抛出异常。
3-defaultValue:默认参数值,如果设置了该值自动将required设置为false,如果参数中没有包含该参数则使用默认值。
示例:@RequestParam(value = “pageNum”, required = false, defaultValue = “1”)

(6)SpingMvc中的控制器的注解一般用哪个?有没有别的注解可以替代?

答:一般用@Controller注解,也可以使用@RestController,@RestController注解相当于@ResponseBody + @Controller,表示是表现层,除此之外,一般不用别的注解代替。

在Spring MVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。在Spring MVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller ,然后使用@RequestMapping 和@RequestParam 等一些注解用以定义URL 请求和Controller 方法之间的映射,这样的Controller 就能被外界访问到。此外Controller 不会直接依赖于HttpServletRequest 和HttpServletResponse 等HttpServlet 对象,它们可以通过Controller 的方法参数灵活的获取到。

@Controller 用于标记在一个类上,使用它标记的类就是一个Spring MVC Controller 对象。分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping 注解。@Controller 只是定义了一个控制器类,而使用@RequestMapping 注解的方法才是真正处理请求的处理器。单单使用@Controller 标记在一个类上还不能真正意义上的说它就是Spring MVC 的一个控制器类,因为这个时候Spring 还不认识它。那么要如何做Spring 才能认识它呢?这个时候就需要我们把这个控制器类交给Spring 来管理。有两种方式:

在Spring MVC 的配置文件中定义MyController 的bean 对象。
在Spring MVC 的配置文件中告诉Spring 该到哪里去找标记为@Controller 的Controller 控制器。

(7)如何解决POST请求中文乱码问题,GET的又如何处理呢?

(1)解决post请求乱码问题:在web.xml中配置一个CharacterEncodingFilter过滤器,设置成utf-8;

<filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>utf-8</param-value>
    </init-param>
</filter>
 
<filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

(2)get请求中文参数出现乱码解决方法有两个:
①修改tomcat配置文件添加编码与工程编码一致,如下:

<ConnectorURIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

②另外一种方法对参数进行重新编码:

String userName = new String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8")

ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码。

(8)SpringMvc里面拦截器是怎么写的

有两种写法,一种是实现HandlerInterceptor接口,另外一种是继承适配器HandlerInterceptor接口的类,接着在接口方法当中,实现处理逻辑;然后在SpringMvc的配置文件中配置拦截器即可:

<!-- 配置SpringMvc的拦截器 -->
<mvc:interceptors>
    <!-- 配置一个拦截器的Bean就可以了 默认是对所有请求都拦截 -->
    <bean id="myInterceptor" class="com.zwp.action.MyHandlerInterceptor"></bean>
 
    <!-- 只针对部分请求拦截 -->
    <mvc:interceptor>
       <mvc:mapping path="/modelMap.do" />
       <bean class="com.zwp.action.MyHandlerInterceptorAdapter" />
    </mvc:interceptor>
</mvc:interceptors>

自定义拦截器

public class LoginInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {}

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {}
}

HandlerInterceptor接口中定义了三个方法,我们就是通过这三个方法来对用户的请求进行拦截处理的。
(1)preHandle(): 这个方法在Controller处理请求之前被调用,SpringMVC中的Interceptor是链式的调用的,在一个应用中或者说是在一个请求中可以同时存在多个Interceptor 。每个Interceptor的调用会依据它的声明顺序依次执行,而且最先执行的都是Interceptor 中的preHandle方法,所以可以在这个方法中进行一些前置初始化操作或者是对当前请求的一个预处理,也可以在这个方法中进行一些判断来决定请求是否要继续进行下去。该方法的返回值是布尔值Boolean 类型的,当它返回为false 时,表示请求结束,后续的Interceptor和Controller都不会再执行;当返回值为true时就会继续调用下一个Interceptor的preHandle 方法,如果已经是最后一个Interceptor的时候就会是调用当前请求的Controller方法。
(2)postHandle():这个方法在Controller方法处理当前请求之后执行,但是它会在DispatcherServlet进行视图返回渲染之前被调用,所以我们可以在这个方法中对Controller处理之后的ModelAndView对象进行操作。postHandle方法被调用的方向跟preHandle 是相反的,也就是说先声明的Interceptor的postHandle方法反而会后执行。
(3)afterCompletion():这个方法也是需要当前对应的Interceptor的preHandle方法的返回值为true时才会执行。顾名思义,该方法将在整个请求结束之后,也就是在DispatcherServlet渲染了对应的视图之后执行。这个方法的主要作用是用于进行资源清理工作的。

单个拦截器执行流程图
在这里插入图片描述多个拦截器执行流程图
在这里插入图片描述

(9)SpringMvc中函数的返回值是什么?

返回值可以有很多类型,有String,ModelAndView。ModelAndView类把视图和数据都合并的一起的,但一般用String比较好。

(1)ModelAndView
我们在使用SpringMVC的时候,经常返回ModelAndView类型,现在前后端分离后,后端都是返回JSON格式数据为主。
返回 ModelAndView类型,我们可以在ModelAndView对象中指定视图名称,然后也可以绑定数据,如下面代码:

@RequestMapping("/userList")
public ModelAndView getAllUser(ModelAndView mv) {
    List<User> users= userService.getAllUser();
    //添加数据模型到request域中
    mv.addObject("users", users);
    mv.setViewName("userList");//指定视图名
    return mv;
}

(2)void
如果返回值为void的话,并不是真正没有返回值,而是会出现以下几种情况:
1-如果方法内真的没有返回值,那么SpringMVC默认把deleteUser(映射的URL)当成视图名称来解析,如果存在该视图,就返回给客户端;如果不存在该视图,就会报视图找不到异常。

@RequestMapping("/deleteUser")
public void deleteUser() {
	//删除操作
}

通过加@ResponseBody来修改默认行为,加上该注解表示返回JSON数据,这里返回空JSON数据,而不是把URL当成视图名称来解析

@RequestMapping("/deleteUser")
@ResponseBody
public void deleteUser() {
	//删除操作
}

(3)String
当方法的返回值为String的时候,也会出现下面几种情况:
1-逻辑视图名:返回String最常见的是逻辑视图名,这种时候一般利用默认的参数Model来传递数据

@RequestMapping("/deleteUser")
//方法返回JSON数据
@ResponseBody	
public String deleteUser(Model model) {
	model.addAttribute("msg","删除成功");
	return "userList";
} 

2-重定向:登录失败的时候重定向到登录页面。

@RequestParam("/login")
public String redirect(User user){
    if{
        //登录成功...
    }else{
        //登录失败,重定向到登录页面
        return "redirect:tologin";
    }
}

3-请求转发:登录失败的时候请求转发到登录页面。

@RequestParam("/login")
public String redirect(User user){
    if{
        //登录成功...
    }else{
        //登录失败,转发到登录页面
        return "forward:tologin";
    }
}

4-真的返回String,相当于JSON格式的数据

@RequestMapping("/deleteUser")
@ResponseBody
public String deleteUser() {
	try{
		//删除成功
		return "删除成功";
	}catch(Exception e){
		return "删除失败";
	}
}

(4)JSON
现在前后端分离的情况下,大部分后端只需要返回JSON数据即可,List 集合、Map集合,实体类等都可以返回,这些数据由 HttpMessageConverter自动转为JSON ,如果使用了Jackson或者Gson,不需要额外配置就可以自动返回JSON了,因为框架帮我们提供了对应的HttpMessageConverter ,如果使用了Alibaba的Fastjson的话,则需要自己手动提供一个相应的 HttpMessageConverter的实例,方法的返回值如下面代码:

@GetMapping("/getUser")
@ResponseBody
public User getUser() {
    User user = userService.getUser();
    return user;
}
@RequestMapping("/userList")
@ResponseBody
public List<User> getAllUser() {
    List<User> users = userService.getAllUser();
    return users;
}

(10)SpringMvc用什么对象从后台向前台传递数据的?

(1)使用Map、Model和ModelMap的方式,这种方式存储的数据是在request域中

@RequestMapping("/getUser")
public String getUser(Map<String,Object> map,Model model,ModelMap modelMap){
    //1.放在map里  
    map.put("name", "xq");
    //2.放在model里,一般是使用这个
    model.addAttribute("habbit", "Play");
    //3.放在modelMap中 
    modelMap.addAttribute("city", "gd");
    modelMap.put("gender", "male");
    return "userDetail";
}

(2)使用request的方式

@RequestMapping("/getUser")
public String getUser(Map<String,Object> map,Model model,ModelMap modelMap,HttpServletRequest request){
    //放在request里  
    request.setAttribute("user", userService.getUser());
    return "userDetail";
}

(3)使用ModelAndView

@RequestMapping("/getUser")  
public ModelAndView getUser(ModelAndView modelAndView) {
    mav.addObject("user", userService.getUser());  
    mav.setViewName("userDetail");  
    return modelAndView;  
}

(11)SpringMvc注解原理

注解本质是一个继承了Annotation的特殊接口,其具体实现类是Java运行时生成的动态代理类。我们通过反射获取注解时,返回的是Java运行时生成的动态代理对象。通过代理对象调用自定义注解的方法,会最终调用AnnotationInvocationHandler的invoke方法。该方法会从memberValues这个Map中索引出对应的值。而memberValues的来源是Java常量池。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/25531.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工程机械流通行业BI经营分析框架(一)四大关注方向

工程机械流通行业的商业智能BI经营分析框架大体可以从四大方向出发来进行整体规划&#xff0c;厂商目标、业务经营目标、战略目标和行业数据这四部分内容。核心还是企业的业务经营目标&#xff0c;但是和其它三类也有很大的关系&#xff0c;所以这四部分需要放在一起去看、去规…

Java多线程(二)

目录 一、线程的使用 Thread类的有关方法 线程的调度 调度策略&#xff1a; java的调度方法 线程的优先级 线程的优先等级 如何获取优先级 线程有关方法及线程优先级练习 线程的分类 二、线程的生命周期 三、线程的同步&#xff08;一&#xff09;&#xff08;线程安…

【Linux】基本指令(二)

文章目录rmdir&&rm 指令nano 指令whoami 指令man 指令cp 指令mv 指令echo 指令cat 指令wc 指令more 指令less 指令head 指令tail 指令date 指令cal 指令rmdir&&rm 指令 &#x1f495; rmdir是一个与mkdir相对应的命令。 mkdir是建立目录&#xff0c;而rmdir是…

UML之类图

概要 类图以反映类的结构(属性、操作)以及类之间的关系为主要目的&#xff0c;描述了软件系统的结构&#xff0c;是一种静态建模方法。类图中的“类”与面向对象语言中的“类”的概念是对应的&#xff0c;是对现实世界中的事物的抽象。元素解析 类 从上到下分为三部分&#…

Jetson Nx 串口接收数据丢失首字节问题

1 问题描述 I write a uart program using c on Jetson Nx(Jetpack 4.6.1,Ubuntu version 18.04 LTS) to communicate with a PC. On PC there’s a uart simulator( as below figure 1) sending data at a period of one second, 30 bytes data are : EB90021112131415161718…

VUE综合数据库编程

VUE综合数据库编程 案例要求 基于node expressvue clielementUImysql&#xff0c;在如图8.14所示的功能的基础上增加一个输入框用于输入商品的id&#xff0c;增加一个“删除”按钮&#xff0c;完成根据id删除商品的功能&#xff08;删除后的结果通过查看数据表goods的最新数据…

LinkedIn领英怎么避免封号?封号怎么解决?(建议收藏)

使用领英的朋友都知道&#xff0c;领英是很容易封号的。辛辛苦苦经营到上千好友的账号&#xff0c;第二天登录&#xff0c;提示“您的账号受到限制&#xff0c;暂时无法使用”。 例如1&#xff1a; 例如2&#xff1a; Linkedin如何避免封号&#xff1f; 大家肯定不愿看到这…

【JavaSE】Comparable接口和Comparator接口

文章目录一、Comparable接口二、Comparator接口一、Comparable接口 当我们要比较两个类的大小时&#xff0c;我们该如何比较呢&#xff0c;是这样吗&#xff1f; 这样写是错误的&#xff0c;所以我们需要用到接口Comparable的CompareTo方法。 而ComparaTo是抽象方法&#x…

74cms骑士人才招聘系统源码SE版 v3.16.0

介绍&#xff1a; 74cms骑士人才招聘系统是一项基于PHPMYSQL为核心开发的一套专业人才招聘系统。骑士人才系统拥有十多年的人才招聘系统运营解决方案&#xff0c;同时我们提供智能化招聘系统、招考系统等全方位系统化解决方案。 74cms骑士人才招聘系统SE版&#xff1a; 更懂运…

Redhat(9)-磁盘分区-parted-swap-lvm-stratis-vdo-tuned

1.parted 2.swap 3.lvm 4.stratis 5.vdo 6.tuned 1.MBR: MASTER BOOT LOADER 逻辑分区&#xff1a;可以直接格式化使用 扩展分区&#xff1a;不可以直接格式化使用 2.GPT分区 1.parted 2.swap 虚拟内存 linux vmmemoryswap Hibernate :内存 3.lvm 3.1实现的功能和优点&…

前三强重磅揭晓!华秋第八届硬创大赛-全国总决赛路演活动成功举办!

11月19日&#xff0c;华秋第八届硬创大赛-全国总决赛路演活动在深圳高交会成功举办。此次项目路演活动是在深圳市福田区科技创新局指导下&#xff0c;由深圳华秋电子有限公司主办&#xff0c;深圳高交会联合主办的硬件创新领域专业赛事。共13个硬科技领域的优秀项目从众多报名项…

零基础入门JavaWeb——Web基本概念

一、服务器和客户端的概念 1.1 客户端的作用 与用户进行交互&#xff0c;用于接收用户的输入、展示服务器端的数据以及向服务器端传递数据。 1.2 服务器的作用 与客户端进行交互&#xff0c;接收客户端的数据、处理具体的业务逻辑、传递给客户端需要的数据。 1.3 什么是服务…

王道考研——操作系统(第二章 进程管理)

一、进程的概念、组成、特征 进程的概念 进程的组成——PCB 进程的组成——程序段、数据段 知识滚雪球&#xff1a;程序是如何运行的&#xff1f; 进程的组成 进程的特征 知识回顾与重要考点 二、进程的状态与转换 进程的状态——创建态、就绪态 进程的状态——运行态 进程的…

5G+北斗:人员定位系统为化工厂定位赋能

人员定位系统是集计算机软硬件、信息采集处理、无线数据传输、网络数据通讯、自动控制等技术多学科综合应用为一体的自动识别信息技术产品&#xff0c;可以实现对不同人、物在不同状态下的智能识别。 物联网时代&#xff0c;人们以感知为目的实现人与人、人与物、物与物全面互联…

【栈和队列的相互转换】

目录&#xff1a;前言一、 用队列实现栈&#xff08;一&#xff09; 题目分析1.队列基本操作2.画图分析3.翻译图解&#xff08;二&#xff09;整体代码二、用栈实现队列&#xff08;一&#xff09; 题目分析1.栈基本操作2.画图分析3.翻译图解&#xff08;二&#xff09;整体代码…

wy的leetcode刷题记录_Day47

wy的leetcode刷题记录_Day47 声明 本文章的所有题目信息都来源于leetcode 如有侵权请联系我删掉! 时间&#xff1a;2022-11-20 前言 补 目录wy的leetcode刷题记录_Day47声明前言799. 香槟塔题目介绍思路代码收获105. 从前序与中序遍历序列构造二叉树题目介绍思路代码收获79…

优思学院|精益六西格玛的成本效益怎么样?

所有精益六西格玛的实施都以项目工作为中心&#xff0c;因此可以用投资回报率&#xff08;ROI&#xff09;确定成本效益。项目可以集中在通过改善营收或降低成本&#xff08;或两者&#xff09;来提高净利润。 它们也可以侧重于通过减少资产&#xff08;通常是库存或应收账款&…

迅为IMX8M开发板2gst-inspect-1.0测试

gstreamer 开发中&#xff0c;一般开发思路为&#xff1a;寻找命令行实现--命令行验证--将命令行集成到代码中---代码工程 化。当然如果你要代码更优雅一点&#xff0c;可以用命令行用对应的 API 来实现。本节来总结一下 gstreamer 的常用 使用过程。 gst-inspect 可以查看插件…

新鲜出炉,Linux眼花缭乱的小寄巧

14天学习训练营导师课程&#xff1a; 互联网老辛《 符合学习规律的超详细linux实战快速入门》 努力是为了不平庸~ 学习有些时候是枯燥的&#xff0c;但收获的快乐是加倍的&#xff0c;欢迎记录下你的那些努力时刻&#xff08;学习知识点/题解/项目实操/遇到的bug/等等&#xf…

MySQL_数据库的约束

文章目录 1. NULL约束 2. UNIQUE(唯一约束) 3. DEFAULT(默认值约束) 4. PRIMARY KEY(主键约束) 5. FOREIGN KEY(外键约束) 数据库的约束就是关系型数据库给我们提供的一种"校验数据"合法性的机制 1. NULL约束 创建表时,可以指定某列不为空 create table stud…