05.Java数组详解
春色三分,二分尘土,一分流水。
——苏轼《水龙吟》
[TOC]
Java数组
数组是多个相同类型数据的组合,实现对这些数据的统一管理。
数组中的元素可以是任何数据类型,包括基本类型和引用类型。
数组属引用类型,数组型数据是对象(object),数组中的每个元素相当于该对象的成员变量。
1. 一维数组123456789101112131415//一维数组的声明//数组有定长特性,长度一旦指定,不可更改。int arr[] = new int[3];//动态初始化:数组声明且为数组元素分配空间与赋值的操作分开进行arr[0] = 1;arr[1] = 2;arr[2] = 3;//静态初始化:在定义数组的同时就为数组元素分配空间并赋值。int[] arr = new int[3]{1,2,3};//静态初始化:简化(类型推断)int[] arr = {1,2,3};
1.1 一维数组的默认值
数组是引用类型,它的元素相当于类的成员变量,因此数组一经分配空间,其中的每个元素也被按照成员变量同样的方式被隐式初始化
对于基本数据类型而言 ...
05.MyBatisPlus的自动填充
[toc]
MyBatisPlus的自动填充
项目中经常会遇到一些数据,每次都使用相同的方式填充,例如记录的创建时间,更新时间等。我们可以使用MyBatisPlus的自动填充功能,完成这些字段的赋值工作,当然也可以使用手动设置的方式,根据自己的习惯自行选择。
数据库表中添加自动填充字段
在User表中添加datetime类型的新的字段 create_time、update_time
实体上添加注解1234567891011@Datapublic class User { ...... @TableField(fill = FieldFill.INSERT) private Date createTime; // @TableField(fill = FieldFill.UPDATE) @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateTime;}
实现元对象处理器接口
注意:不要忘记添加 @Component 注解 ...
05.MySQL数据库-表的约束和表之间的关系
往事悠悠君莫问,回头。槛外长江空自流。
——王安石《南乡子》
数据库表的约束和表之间的关系1. 数据库表的约束
约束的作用:
对表中的数据进行限制,保证数据的正确性、有效性和完整性。
一个表如果添加了约束,不正确的数据将无法插入到表中。
约束在创建表的时候添加比较合适。
约束的种类
约束名
约束关键字
主键
primary key
唯一
unique
非空
not null
外键
foreign key
检查约束
check 注:mysql 不支持
1.1 主键约束
用来唯一标识数据库中的每一条记录
哪个字段应该作为表的主键?
通常不用业务字段作为主键,单独给每张表设计一个 id 的字段,把 id 作为主键。主键是给数据库和程序使用的,不是给最终的客户使用的。所以主键有没有含义没有关系,只要不重复,非空就行。 如:身份证,学号不建议做成主键
1.1.1 创建主键
创建主键关键字: primary key主键的特点:
非空 not null
唯一 unique
123456-- 创建主键的两种方式-- 1.在创建表 ...
05.jsp,EL表达式,jstl和mvc开发模式
[TOC]
1. JSP
即,java server page,java服务器端页面。
一个特殊的html页面,里面既可以包含html代码,也可以写java代码。
简化书写:
jsp本质是一个servlet.
1.1 jsp注解123451.html注释: <!-- --> 只能注释jsp页面中的html代码 2.jsp注释: <%-- --%> 可以注释所有的jsp页面内的代码
1.2 jsp脚本语法123456789java代码直接放到service方法中的<% 代码 %> 代码会放到类的成员位置上。<%! 代码 %> java代码,会输出到页面上,输出语句中能怎么写代码,这个地方就可以怎么写。<%= 代码 %>
1.3 jsp九大内置对象
jsp页面中的不需要创建,就可以直接使用的对象。
一共有九个!
变量名
类型名
作用
pageContext
PageContext
==当前页面内部共享数据==,通过当前对象可以获取其他的8个内置对象。
request
HttpServletReques ...
06.Docker常用命令
[toc]
Docker常用命令1. 镜像image相关命令查看镜像
这些镜像都是存储在Docker宿主机的/var/lib/docker目录下
123docker images#REPOSITORY TAG IMAGE ID CREATED SIZE#镜像名称 镜像标签 镜像ID 镜像的创建日期 镜像大小
搜索镜像
如果你需要从网络中查找需要的镜像,可以通过以下命令搜索
NAME:仓库名称
DESCRIPTION:镜像描述
STARS:用户评价,反应一个镜像的受欢迎程度
OFFICIAL:是否官方
AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的
12docker search 镜像名称#NAME DESCRIPTION STARS OFFICIAL AUTOMATED
拉取镜像
拉取镜像就是从中央仓库中下载镜像到本地
123docker pull 镜像名称#例如:我要下载centos7镜像docker pull centos:7
删除镜像
按镜像ID删除镜像
123docker rmi 镜像ID ...
06.MyBatisPlus实现乐观锁
[toc]
[toc]
MyBatisPlus实现乐观锁
主要适用场景:当要更新一条记录的时候,希望这条记录没有被别人更新,也就是说实现线程安全的数据更新
乐观锁实现方式:
取出记录时,获取当前version
更新时,带上这个version
执行更新时, set version = newVersion where version = oldVersion
如果version不对,就更新失败
![9 乐观锁](/medias/mybatisplus/9 乐观锁.png)
1. 数据库中添加version字段1ALTER TABLE `user` ADD COLUMN `version` INT
2. 实体类添加version字段1234// 并添加 @Version 注解@Version@TableField(fill = FieldFill.INSERT)private Integer version;
3. 元对象处理器接口添加version的insert默认值
12345@Overridepublic void insertFill(MetaObject metaOb ...
06.MySQL数据库-多表查询和子查询
渐写到别来,此情深处,红笺为无色。
——晏几道《思远人》
MySQL数据库-多表查询和子查询1. 多表查询
数据库在单个表里操作其实很简单,但是涉及在多张表里寻找数据的时候,难度会大大增加,这里解释一些多表联合查询常用的操作。
1234567891011121314151617181920212223242526-- 创建部门表create table dept( id int primary key auto_increment, name varchar(20))-- 插入部门表信息insert into dept (name) values ('开发部'),('市场部'),('财务部');-- 创建员工表create table emp ( id int primary key auto_increment, name varchar(10), gender char(1), -- 性别 salary double, -- 工资 join_date date, -- 入职 ...
06.排序算法基础
1. 排序算法的介绍
排序也称排序算法(SortAlgorithm),排序是将 一组数据,依 指定的顺序进行 排列的过程。
1.2 排序的分类
内部排序:指将需要处理的所有数据都加载到 内部存储器( 内存) 中进行排序。
外部排序法:数据量过大,无法全部加载到内存中,需要借助 外部存储(文件等)进行排序。
1.2.1 常见的排序算法分类
1.3 算法的时间复杂度1.3.1 度量一个程序(算法)执行时间的两种方法
事后统计的方法这种方法可行, 但是有两个问题:
一是要想对设计的算法的运行性能进行评测,需要实际运行该程序;
二是所得时间的统计量依赖于计算机的硬件、软件等环境因素, 这种方式,要在同一台计算机的相同状态下运行,才能比较那个算法速度更快。
事前估算的方法通过分析某个算法的 时间复杂度来判断哪个算法更优.
1.3.2 时间频度基本介绍
时间频度:一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。 一个算法中的语句执行次数称为语句频度或时间频度。记为 T(n)。
比如计算 1-100 所有数字之和, 我们设 ...
06.流程控制语句
衣带渐宽终不悔。为伊消得人憔悴。
——柳永《蝶恋花》
[TOC]
流程控制语句1. 顺序结构
顺序结构(Sequence structure)的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。
2. 分支(选择)结构2.1 If12345678910111213boolean miao=true;if(miao){ System.out.println("哎呦~喵喵喵..");}else{ System.out.println("我们一起学猫叫");}//采用取反的方式if(!miao){ System.out.println("我们一起学猫叫");}else{ System.out.println("哎呦~喵喵喵..");}
2.2 If…Else
if和else条件是互斥的,意思是:两者的条件只能有一个成立(不能同时成立);
123456789101112131415 ...