这篇文章主要围绕mysql添加外键的4种方式和mysql添加外键的语句展开,旨在为您提供一份详细的参考资料。我们将全面介绍mysql添加外键的4种方式的优缺点,解答mysql添加外键的语句的相关问题,
这篇文章主要围绕mysql 添加外键的 4 种方式和mysql添加外键的语句展开,旨在为您提供一份详细的参考资料。我们将全面介绍mysql 添加外键的 4 种方式的优缺点,解答mysql添加外键的语句的相关问题,同时也会为您带来 Spring MVC 处理异常有 3 种方式、Docker 容器进入的 4 种方式、eclipse 安装 activiti 插件的 2 种方式、Java 中初始化 List 集合的 6 种方式!的实用方法。
本文目录一览:- mysql 添加外键的 4 种方式(mysql添加外键的语句)
- Spring MVC 处理异常有 3 种方式
- Docker 容器进入的 4 种方式
- eclipse 安装 activiti 插件的 2 种方式
- Java 中初始化 List 集合的 6 种方式!
mysql 添加外键的 4 种方式(mysql添加外键的语句)
今天开始复习,在过后的几天里开始在博客上记录一下平时疏忽的知识点,温故而知新 屁话不多 -- 直接上货
创建主表: 班级
CREATE TABLE class(cid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(15) NOT NULL)
INSERT INTO class VALUES (NULL,'' 六年级一班 '')
INSERT INTO class VALUES (NULL,'' 六年级二班 '')
第一种://1. 在属性值后面直接添加(有点小问题)
CREATE TABLE student(sid INT AUTO_INCREMENT,
sname VARCHAR(10) NOT NULL,
s_cid INT REFERENCES class(cid),
PRIMARY KEY(sid)
);
// 添加数据进行测试
INSERT INTO student VALUES (NULL,'' 王大锤 '',2)
INSERT INTO student VALUES (NULL,'' 胡汉三 '',3) // 约束不生效,原因待查
INSERT INTO student VALUES (NULL,'' 卧槽 '',4) // 不敢相信,在测试一次
这种方式,测试不知道为什么,居然添加进去了 WTF? 在网上百度无果,自学群无回复 暂时先搁置在这儿
第二种://2. 在 sql 语句末端添加
CREATE TABLE student(
sid INT AUTO_INCREMENT,
sname VARCHAR(10),
s_cid INT,
PRIMARY KEY(sid),
FOREIGN KEY (s_cid) REFERENCES class(cid)
);
// 插入数据测试一下
INSERT INTO student VALUES (NULL,'' 王大锤 '',2)
INSERT INTO student VALUES (NULL,'' 胡汉三 '',3) // 约束生效 插入失败
外键约束生效
第三种://3.fk 的使用
这种是值下课自己手动收集总结的,理解还不是很到位,一番测试还是弄懂了一点,表中的 fk_子表_父表
CREATE TABLE student(sid INT AUTO_INCREMENT,
sname VARCHAR(10) NOT NULL,
s_cid INT ,
PRIMARY KEY(sid),
CONSTRAINT fk_student_class FOREIGN KEY(s_cid) REFERENCES class(cid)
);
// 测试一波 OK
INSERT INTO student VALUES (NULL,'' 王大锤 '',2)
INSERT INTO student VALUES (NULL,'' 胡汉三 '',3) // 约束生效 插入失败
第四种://4. 在建表后添加外键 (教学类容)
CREATE TABLE student(sid INT AUTO_INCREMENT,
sname VARCHAR(10) NOT NULL,
s_cid INT ,
PRIMARY KEY(sid)
);
// 添加外键约束: ALTER TABLE student ADD FOREIGN KEY (s_cid) REFERENCES class (cid);
// 测试
INSERT INTO student VALUES (NULL,'' 王大锤 '',2)
INSERT INTO student VALUES (NULL,'' 胡汉三 '',3) // 约束生效 插入失败
总结到此结束,有疏忽之处,望大家指出修正
Spring MVC 处理异常有 3 种方式
Spring MVC 处理异常有 3 种方式
(1)实现 Spring 的异常处理接口 HandlerExceptionResolver 自定义自己的异常处理器
1. 创建自己的异常处理
public class MyExceptionHandler implements HandlerExceptionResolver {
if(ex instanceof BusinessException) {
return new ModelAndView("error-business", model);
}else if(ex instanceof ParameterException) {
return new ModelAndView("error-parameter", model);
} else {
return new ModelAndView("error", model);
}
}
2. 添加到容器中,servletDespatcher
<bean id="exceptionHandler"/>
(2)使用 @ExceptionHandler 注解实现异常处理
1.1
public class BaseController {
/** 基于 @ExceptionHandler 异常处理 */
@ExceptionHandler
public String exp(HttpServletRequest request, Exception ex) {
request.setAttribute("ex", ex);
// 根据不同错误转向不同页面
if(ex instanceof BusinessException) {
return "error-business";
}else if(ex instanceof ParameterException) {
return "error-parameter";
} else {
return "error";
}
}
}
1.2
@ExceptionHandler({MyException.class})
public String exception(MyException e) {
System.out.println(e.getMessage());
e.printStackTrace();
return "exception";
}
2.
public class TestController extends BaseController
(3)使用 Spring MVC 提供的简单异常处理器 SimpleMappingExceptionResolve
1.
<bean>
<!-- 定义默认的异常处理页面,当该异常类型的注册时使用 -->
<property name="defaultErrorView" value="error"></property>
<!-- 定义异常处理页面用来获取异常信息的变量名,默认名为 exception -->
<property name="exceptionAttribute" value="ex"></property>
<!-- 定义需要特殊处理的异常,用类名或完全路径名作为 key,异常也页名作为值 -->
<property name="exceptionMappings">
<props>
<prop key="cn.basttg.core.exception.BusinessException">error-business</prop>
<prop key="cn.basttg.core.exception.ParameterException">error-parameter</prop>
<!-- 这里还可以继续扩展对不同异常类型的处理 -->
</props>
</property>
</bean>
2.
<bean id="exceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="java.lang.Exception">errors/error</prop>
<prop key="java.lang.Throwable">errors/err</prop>
</props>
</property>
<property name="statusCodes">
<props>
<prop key="errors/error">500</prop>
<prop key="errors/404">404</prop>
</props>
</property>
<!-- 设置日志输出级别,不定义则默认不输出警告等错误日志信息 -->
<property name="warnLogCategory" value="WARN"></property>
<!-- 默认错误页面,当找不到上面 mappings 中指定的异常对应视图时,使用本默认配置 -->
<property name="defaultErrorView" value="errors/error"></property>
<!-- 默认 HTTP 状态码 -->
<property name="defaultStatusCode" value="500"></property>
</bean>
最后在 web.xml 中定义
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/500.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/500.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
Docker 容器进入的 4 种方式
在使用 Docker 创建了容器之后,大家比较关心的就是如何进入该容器了,其实进入 Docker 容器有好几多种方式,这里我们就讲一下常用的几种进入 Docker 容器的方法。
进入 Docker 容器比较常见的几种做法如下:
-
使用 docker attach
-
使用 SSH
-
使用 nsenter
-
使用 exec
一、使用 docker attach 进入 Docker 容器
Docker 提供了 attach 命令来进入 Docker 容器。
接下来我们创建一个守护态的 Docker 容器,然后使用 docker attach 命令进入该容器。
-
$ sudo docker run -itd ubuntu:14.04 /bin/bash
然后我们使用 docker ps 查看到该容器信息,接下来就使用 docker attach 进入该容器
-
$ sudo docker attach 44fc0f0582d9
可以看到我们已经进入到该容器中了。
但在,使用该命令有一个问题。当多个窗口同时使用该命令进入该容器时,所有的窗口都会同步显示。如果有一个窗口阻塞了,那么其他窗口也无法再进行操作。
因为这个原因,所以 docker attach 命令不太适合于生产环境,平时自己开发应用时可以使用该命令。
eclipse 安装 activiti 插件的 2 种方式
1.eclipse 在线安装,help -> install -> new software 》add 输入
Name: Activiti BPMN 2.0 designer
Location: http://activiti.org/designer/update/
PS: 经过测试,发现已经无法使用。
2. 使用离线方式下载
下载地址:https://www.activiti.org/designer/archived/activiti-designer-5.18.0.zip;下载到本地后使用 eclipse 安装,help -> install -> new software》add
Name: Activiti BPMN 2.0 designer
Location: jar:file:/D:/bingoWork/activiti-designer-5.18.0.zip!/
PS: 推荐可用,其他版本的同理。如果下载 jar 包如果浏览器的下载速度不较慢,或者不行,建议使用迅雷试下。我也是浏览器下载不行,用迅雷飞快,秒速。迅雷还是比较给力的哈。
Java 中初始化 List 集合的 6 种方式!
List 是 Java 开发中经常会使用的集合,你们知道有哪些方式可以初始化一个 List 吗?这其中不缺乏一些坑,今天栈长我给大家一一普及一下。
如果想学习 Java 工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty 源码分析的朋友可以加我的 Java 高级交流:854630135,里面有阿里大牛直播讲解技术,以及 Java 大型互联网技术的视频免费分享给大家。
1、常规方式
List<String> languages = new ArrayList<>(); languages.add("Java"); languages.add("PHP"); languages.add("Python"); System.out.println(languages);
这种就是我们平常用的最多最平常的方式了,没什么好说的,后面缺失的泛型类型在 JDK 7 之后就可以不用写具体的类型了,改进后会自动推断类型。
2、Arrays 工具类
List<String> jdks = asList("JDK6", "JDK8", "JDK10"); System.out.println(jdks);
注意,上面的 asList 是 Arrays 的静态方法,这里使用了静态导入。这种方式添加的是不可变的 List, 即不能添加、删除等操作,需要警惕。。
import static java.util.Arrays.asList;
如果要可变,那就使用 ArrayList 再包装一下,如下面所示。
List<String> numbers = new ArrayList<>(Arrays.asList("1", "2", "3")); numbers.add("4"); System.out.println(numbers);
包装一下,这就是可变的 ArrayList 了。
3、Collections 工具类
List<String> apples = Collections.nCopies(3, "apple"); System.out.println(apples);
这种方式添加的是不可变的、复制某个元素 N 遍的工具类,以上程序输出:
[apple, apple, apple]
老规则,如果要可变,使用 ArrayList 包装一遍。
List<String> dogs = new ArrayList<>(Collections.nCopies(3, "dog")); dogs.add("dog"); System.out.println(dogs);
还有初始化单个对象的 List 工具类,这种方式也是不可变的,集合内只能有一个元素,这种也用得很少啊。
List<String> cat = Collections.singletonList("cat"); System.out.println(cat);
还有一个创建空 List 的工具类,没有默认容量,节省空间,但不知道实际工作中有什么鸟用。
List<String> cat = Collections.emptyList("cat");
4、匿名内部类
List<String> names = new ArrayList<>() {{ add("Tom"); add("Sally"); add("John"); }}; System.out.println(names);
这种使用了匿名内部类的方式,一气喝成,是不是很高大上?栈长我曾经也使用过这种方式,不过我觉得这种看似高级,实现也没什么卵用。
5、JDK8 Stream
List<String> colors = Stream.of("blue", "red", "yellow").collect(toList()); System.out.println(colors);
Stream 是 JDK 8 推出来的新概念,比集合还要更强大,还可以和集合互相转换。
上面同样使用了静态导入:
import static java.util.stream.Collectors.toList;
6、JDK 9 List.of
List<String> cups = List.of("A", "B", "C"); System.out.println(cups);
这是 JDK 9 里面新增的 List 接口里面的静态方法,同样也是不可变的。
在接口中实现静态方法和默认方法是 JDK 8 中添加的新特性,
好了,今天就给大家介绍到这里了,这 6 种,你知道几种?另外,Map, Set 也有类似的初始化的方法,大家有兴趣的可以试一下。
你还知道哪些绝招呢?欢迎留言分享一下。。。
今天关于mysql 添加外键的 4 种方式和mysql添加外键的语句的介绍到此结束,谢谢您的阅读,有关 Spring MVC 处理异常有 3 种方式、Docker 容器进入的 4 种方式、eclipse 安装 activiti 插件的 2 种方式、Java 中初始化 List 集合的 6 种方式!等更多相关知识的信息可以在本站进行查询。
本文标签: