- 定义一个测试类 建议:测试类名:被测试类名加Test 包名:xxx.xxx.xx.test
- 定义测试方法:可以独立运行 建议:方法名,testXxx 返回值:void 参数列表:空参
- 给方法加@Test注解
- 导入Junit依赖 判定结果:红色失败,绿色成功,一般使用断言操作处理结果 @Before注解用于资源申请 @After注解用于资源释放
- 框架:半成品软件,可以在框架的基础上进行软件开发,简化编码。
- 反射:将类的各个组成部分封装成其他对象,这就是反射机制。 好处:
- 可以在程序运行过程中,操作这些对象。
- 可以解耦,提高程序的可扩展性。
- 获取Class对象的方式:
- Class.forName("全类名"):将字节码文件加载进内存,返回Class对象
- 类名.Class:通过类名的属性class获取
- 对象getClass():getClass()方法在Object类中定义着。 结论:同一个字节码(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的Class对象都是同一个。
- Class对象功能:
- 获取功能:
- 获取成员变量们
- Field[]getFields();获取所有public修饰的成员变量
- Field getField(String name);获取指定名称的public修饰的成员变量
- Filed getDeclaredFields();获取所有的成员变量不考虑修饰符
- Field getDeclaredField(String name);
- 获取构造方法们
- Constructor<?>[] getConstructors()
- Constructor getConstructor(类<?>...parameterTypes)
- Constructor getDeclaredConstructor(类<?>... parameterTypes)
- Constructor<?>[] getDeclaredConstructors()
- 获取成员方法们
- Method[] getMethods();
- Method getMethod(String name,类<?>... parameterTypes)
- Method[] getDeclaredMethods();
- Method getDeclaredMethod(String name,类<?>... parameterTypes);
- 获取类名
- String getName();
- Field:成员变量
- 操作:
- 设置值
- void set(Object obj,Object value)
- 获取值
- get(Object obj)
- 忽略访问权限修饰符的安全检查
- setAccessible(true); //暴力反射
- Constructor:构造方法
- 创建对象:T newInstance(Object... initrans);
- 如果使用空参数构造函数,操作可以简化,Class对象的newInstance方法
- Method:方法对象
- 执行方法:
- Object invoke(Object obj,Object... args)
- 执行方法:
- 案例
- 需求:写一个框架,不能改变该类的任何代码的前提下,可以帮助我们创建任意类的对象,并且执行其中任意的方法
- 实现:
- 配置文件;
- 反射;
- 步骤:
- 将需要创建的对象的全类名和需要执行的方法定义在配置文件中;
- 在程序中加载读取配置文件;
- 使用反射技术来加载文件进内存;
- 创建对象;
- 执行方法;
- 实现:
- 需求:写一个框架,不能改变该类的任何代码的前提下,可以帮助我们创建任意类的对象,并且执行其中任意的方法
- JDK1.5之后的新特性;
- 说明程序的;
- 作用分类:
- 编写文档;
- 代码分析;
- 编译检查;
- JDK中预定义的一些注解:
- @Override:检测被该注解标注的方式是否是继承自父类(接口)的;
- @Deprecated:该注解给标注的内容,表示已过时
- @SuppressWarnings:压制警告
- 一般传递参all:@SuppressWarnings("all")
- 自定义注解:
- 格式:
- 元注解
- public @interface 注解名称{}
- 本质:注解本质就是一个接口,该接口默认继承Annotation类
public interface com.javawebstudy.Anno.MyAnno extends java.lang.annotation.Annotation{}
- 属性:接口中的抽象方法
- 要求:
- 属性的返回值类型:
- 基本数据类型
- String
- 枚举
- 注解
- 以上类型的数组
- 属性的返回值类型:
- 定义了属性,在使用时需要给属性赋值
- 如果定义属性时,使用default关键字给属性默认初始化值,则使用注解时,可以不进行属性的赋值;
- 如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义值即可
- 要求:
- 元注解:用于描述注解的注解
- @Target:描述注解能够作用的位置;
- ElementType取值:
- TYPE:可以作用与类上;
- METHOD:可以作用于方法上;
- FIELD:可以作用于成员变量上;
- ElementType取值:
- @Retention:描述注解能被保存的阶段;
- @Retention(RetentionPolicy.RUNTIME):当前被描述的注解,会保留到class字节码文件中,并被jvm读取到
- @Documented:描述注解是否被抽取到api文档中
- @Inherited:描述注解是否被子类继承
- @Target:描述注解能够作用的位置;
- 格式:
- 在程序使用(解析)注解:获取注解中定义的属性值
- 获取注解定义的位置的对象(Class、Method、Field)
- 获取指定的注解:
- getAnnotation(Class)
- 调用注解中的抽象方法获取配置的属性值
- 小结:
- 以后大多数时候,我们会使用注解,而不是自定义注解;
- 注解给谁用?
- 编辑器
- 给解析程序用
- 注解不是程序的一部分,算是一个标签
- 什么事JavaWeb?
- 使用Java语言开发互联网项目。
- 课程介绍:
- 数据库
- 网页前端
- web核心技术
- 旅游管理系统
- 数据库的基本概念
- Mysql数据库软件
- Sql
- 数据库的英文单词:DataBase 简称 DB
- 什么是数据库?
- 用于存储和管理数据的仓库。
- 数据库的特点
- 持久化存储数据的,其实数据库就是一个文件系统;
- 方便存储和管理数据
- 使用统一的方式操作数据库-SQL
- 常见的数据库软件
- Mysql服务启动
- 手动
- cmd->services.msc打开服务的窗口
- 使用管理员打开cmd
- net start mysql: 启动mysql的服务
- net stop mysql:关闭mysql服务
- Mysql登录
- mysql -uroot -p密码
- mysql -hip -uroot -p连接目标的密码
- mysql --host=ip --user=root --password=连接目标的密码
- Mysql退出
- exit
- quit
- Mysql目录结构
- mysql的安装目录
- 配置文件:my.ini
- mysql的数据目录
- 数据库:文件夹
- 表:文件
- 数据:数据
- mysql的安装目录
- 什么是SQL? Structured Query Language:结构化查询语言 其实就是定义了操作所有关系型数据库的规则,每一种数据库操作的方式存在不一样的地方
- SQL通用写法
- SQL分类
- DDL(Data Definition Language)数据定义语言;
- DML(Data Manipulation Language)数据操作语言,用来对数据库中表的数据进行增删改。关键字:insert,delete,update等;
- DQL(Data Query Language)数据查询语言,用来查询数据库中表的记录(数据)。关键字:select,where等;
- DCL(Data Control Language)数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT,REVOKE等;
- 操作数据库:CRUD
- C(Create):创建
- 创建数据库:
- create database 数据库名称;
- 创建数据库,判断不存在,再创建:
- create database if not exists 数据库名称;
- 创建数据库,并指定字符集
- create database 数据库名称 character set 字符集名;
- 练习:创建db4数据库,判断是否存在,并且指定字符集为gbk
- create database if not exists db4 character set gbk;
- 创建数据库:
- R(Retrieve):查询
- 查询所有数据库的名称:
- show databases;
- 查询某个数据库的字符集:查询某个数据库的创建语句
- show create database 数据库名称;
- 查询所有数据库的名称:
- U(Update):修改
- 修改数据库的字符集
- alter database 数据库名称 character set 字符集名称;
- 修改数据库的字符集
- D(Delete):删除
- 删除数据库: drop database 数据库名称;
- 判断数据库是否存在,存在再删除:drop database if exists 数据库名称;
- 使用数据库
- 查询当前正在使用的数据库名称
- select database();
- 使用数据库
- use 数据库名称;
- 查询当前正在使用的数据库名称
- C(Create):创建
- 操作表
- C(Create):创建
- 语法: create table 表名(列名1 数据类型1,列名2 数据类型2);
- 数据库类型:
- int :整数类型;
- double: 小数类型;score double(5,2)
- date:日期,只包含年月日,yyyy-MM-dd
- datetime:日期,包含年月日时分秒 yyyy-MM-dd HH:mm:ss
- timestamp:时间戳类型 包含年月日时分秒 yyyy-MM-dd HH:mm:ss
- varchar: 字符串 name varchar(20);需要指定字符的最大长度、
- 复制表: create table 表名2 like 表名1;
- R(Retrieve):查询
- 查询某个数据库中所有的表名称
- show tables;
- 查询表结构 desc 表名;
- 查询某个数据库中所有的表名称
- U(Update):修改
- 修改表名:alter table 表名 rename to 新名称;
- 修改表的字符集:alter table 表名 character set 字符集名称;
- 添加列:alter table 表名 add 列名 数据类型;
- 修改列名称 类型:alter table 表名 change 列名 新列别 新数据类型; alter table 表名 modify 列名 新数据类型;
- 删除列:alter table stu drop 列名;
- D(Delete):删除
- drop table 表名;
- drop table if exists 表名;
- C(Create):创建
- 添加数据:insert into 表名(字段1,字段2) values (值1,值2); insert into 表名 values(值1,值2);
- 删除数据:delete from 表名 where 字段 = "";
- 如果要删除所有记录:
- delete from 表名;效率比较低
- truncate table 表名;先删除表,在创建一张一样的表;效率更高
- 如果要删除所有记录:
- 修改数据:update 表名 set 字段 = "" where 字段1 = "";
- select * from 表名;
- select 字段名称 from 表名称 where 查询条件 group by 分组字段 having 分组之后的条件 order by 排序 limit 分页限定;
- 计算值相加:如果有null则计算结果全是null可以使用IFNULL(字段,0);
- 条件查询 WHERE 子句查询;
- 排序查询:ORDER BY,ASC DESC
- 聚合函数:count(),sum(),max(),min(),avg()平均值等
- 分组查询:GROUP BY;having为分组之后的条件使用语句;where在分组之前限定;where后不可使用聚合函数,having后可用聚合函数;
- 分页查询:LIMIT
- 约束:主键primary key,非空not null,唯一unique,外键foreign key
- 非空约束:
- 添加约束:create table 表名(id int ,name varchar(20) not null);
- 存在之后添加非空约束:alter table 表名 modify 字段名 数据类型 not null;
- 删除非空约束: alter table 表名 modify 字段名 数据类型;
- 唯一约束:
- 添加唯一约束:create table 表名 (id int ,phone_number varchar(20) unique);
- 创建表之后添加唯一约束:alter table 表名 modify 字段名 数据属性 unique;
- 删除唯一约束:alter table 表名 drop index 字段名;
- 主键约束:
- 创建表时添加主键:CREATE TABLE 表名 (id int primary key,name varchar(20));
- 创建表之后添加主键约束:ALTER TABLE 表名 modify id int primary key;
- 删除主键:ALTER TABLE 表名 DROP PRIMARY KEY;
- 自动增长:
- CREATE TABLE 表名(id int primary key auto_increment,name varchar(20));
- alter table 表名 modify id int auto_increment;
- alter table 表名 modify id int;
- 外键约束:foreign key;
- 创建:create table 表名(id int primary key auto_increment, dep_id int constraint 名称 foreign key (本表字段) references 表(外键表字段));
- 删除:alter table 表名 drop foreign key 外键名称;
- 添加外键:alter table 表名 add constraint 外键名称 foreign key (本表字段名) references 表(外键表主键字段名);
- 级联操作:
- 添加级联的操作:alter table 表名 add constraint 外键名称 foreign key (外键字段名称) references 主表名称(主表列名称) on update cascade on delete cascade;
- 分类:
- 级联更新:ON UPDATE CASCADE
- 级联删除:ON DELETE CASCADE
- 多表之间的关系
- 分类:
- 一对一:人与身份证
- 一对多:部门与员工
- 多对多:学生与课程
- 实现关系:
- 一对多:在多的一方建立外键,指向一的一方的主键;
- 多对多:借助第三张表作为中间表,存放两张表之间的关联关系;至少包含两个字段,作为第三张表的外键,指向两张表的主键;
- 一对一:可以在任意一方添加唯一外键指向另一方的主键;
- 分类:
- 数据库设计的范式(共有六个范式1-5 范式,以及巴斯-科德范式)
- 第一范式(1NF):每一列都是不可分割的原子数据项;
- 第二范式(2NF):在第一范式的基础上,非码属性必须完全依赖于候选码;在第一范式基础上消除非主属性对主码的部分函数依赖;
- 函数依赖:通过A的属性的值可以确定唯一B属性的值,则称B依赖A;如学号依赖姓名;
- 完全函数依赖:A依赖B,如果A是一个属性组,则B属性值的确定需要依赖A属性组中所有的属性值;
- 部分函数依赖:A依赖B,如果A是一个属性组,则B属性值的确定只需要依赖于A属性组中某一些值即可;
- 传递函数依赖:A依赖B,B依赖C,如果通过A属性的值,可以确定唯一B属性的值,在通过B属性的值可以确定唯一C属性值,则称C属性传递依赖A;
- 码:如果在一张表中,一个属性或者属性组,被其他所有属性所完全依赖,则称这个属性或属性组为该表的码;
- 主属性:码属性组中的所有属性;
- 非主属性:除过码属性组的属性;
- 第三范式(3NF):在第二范式的基础上,任何非主属性不依赖于其他非主属性;在第二范式的基础上消除传递依赖;
- 命令行:
- mysqldump -u用户名 -p密码 数据库名 > 保存的路径
- 还原:
- 登录数据库
- 创建数据库
- 使用数据库
- 执行文件 -> source 文件路径
- 图形化工具: