publicclassPerson{privateString name ;privateString gender;privateint age ;publicPerson(){}privatePerson(String name,String gender,int age){this.name = name;this.gender = gender;this.age = age;}@OverridepublicStringtoString(){return"Person{"+"name='"+ name +'\''+", gender='"+ gender +'\''+", age="+ age +'}';}}publicclassReflectDemo{publicstaticvoidmain(String[] args)throwsClassNotFoundException,NoSuchMethodException,IllegalAccessException,InvocationTargetException,InstantiationException{//获取person类字节码文件Class<?> person =Class.forName("com.classword.Person");//创建构造construord对象,公共//public Constructor<T>getConstructor(Class<>..// parameterTypes)throws NoSuchMethodException,SecurityExceptionConstructor<?> cons = person.getDeclaredConstructor(String.class,String.class,int.class);//加载器对象创建p构造方法实例///public T newInstance(Object... initargs)://取消语言访问检查,参数是true
cons.setAccessible(true);Object o = cons.newInstance("高圆圆","女",42);//输出构造方法对象,System.out.println(o);}}
6.4 如何通过类的字节码文件获取成员变量所在的Filed类对象,并且给成员变量赋值
(1)获取实例类的无参构造方法的对象(步骤如上)
(2)通过字节码文件获取当前字段(成员变量)的类对象Filed
public Field[] getDeclaredField(String filed) throws SecurityException:获取当前类的指定的字段类对象(包括公共的,私有的,受保护的,默认修饰符的)
(3)Field:有一个方法:给成员变量赋值,作用在指定的实例上,
public void set(Object obj,Object value)throws IllegalArgumentException,IllegalAccessException
//参数1:当前指定的实例(无参构造的对象),参数2:给成员变量实际参数
(4)输出成员变量
public Field[] getFields()throws SecurityException:获取所有公共的成员变量
public Field[] getDeclaredFields()throws SecurityException:获取所有的成员变量
6.5 如何通过反射方式获取一个类中的成员方法的类对象Method,并去调用这个方法
(1)获取构造方法的对象
/public T newInstance()throws InstantiationException,IllegalAccessException:先获取实例类的字节码文件对象,再直接newInstance,获得无参构造方法对象
(2)获取指定的单个的成员方法类对象
//public Method getDeclaredMethod(String name,Class<?>... parameterTypes):参数一:方法名,参数二:参数2:可变参数, 如果无参,就不需要参数,如果带参,需要写上的参数类型的Class
(3)调用方法(是否有返回值,有返回值需要返回再输出)
public Object invoke(Object obj,Object... args)参数1:当前类的实例,参数2:给方法的形式参数赋值的实际参数
publicclassReflectDemo2{publicstaticvoidmain(String[] args)throwsClassNotFoundException,NoSuchMethodException,IllegalAccessException,InstantiationException,NoSuchFieldException,InvocationTargetException{Class<?> c =Class.forName("com.classword.Person");/* Constructor<?> cons = c.getDeclaredConstructor();
Object o = c.newInstance();*/Object o = c.newInstance();//通过字节码文件获取当前字段(成员变量)的类对象FiledField namefiled = c.getDeclaredField("name");//取消语言访问检查
namefiled.setAccessible(true);//给成员变量赋值,作用在指定的实例上,参数1:无参构造对象 参数2:赋值
namefiled.set(o,"高圆圆");System.out.println(o);System.out.println("-------------------------------");Method show = c.getDeclaredMethod("show",String.class);
show.setAccessible(true);
show.invoke(o,"付新刚");}}
7.什么是数据库?–>能够存储数据的仓库,简称DB
7.1 mysqlde DDL基本命令(数据库的定义语句)
show databases; --查看当前所有的数据库
use 数据库名; --打开指定的数据库
create database 数据库名; --创建一个数据库
show tables; --查看所有的表
describe/desc 表名; --显示表的信息
exit --退出连接
7.2 操作数据库
CREATE DATABASE [IF NOT EXISTS] 数据库名; //创建数据库
DROP DATABASE [if EXISTS] 数据库名;//删除数据库
select DATABASE():查询当前数据库
use 数据库名;//使用数据库
SHOW DATABASES;//查看所有数据库
show create database 库名:查看新建的数据库的字符集
show variables like '%character%';查询当前整体musql中的所有的带字符集的相关编码格式
alter table 表明 add 字段名 类型(长度) [comment注释][约束];----添加字段
alter table 表名 modify 字段名 类型(长度) [comment注释][约束];----修改数据类型
alter table 表名 change 旧字段名 新字段名 类型(长度) [comment注释];-----修改指定表中的指定字段名和字段类型
alter table 表名 drop 字段名----;删除指定表中的制定字段;
alter table 表名 rename to 新表名;-----修改表名
create table 新表名 like 旧表名;---赋值一张新的表
drop table 表名;----删除一张表
8. DML语句–增删改
8.1 DML数据库操作语句-操作表的记录
insert into 表名 values(值1,值2..);----插入全表数据
insert into 表名(字段名称1,字段名称2,...) values(值1,值2...) ;-----插入部分字段
select 字段名称(平时可以用*代表全部字段) from 表名;查询全表数据
8.2 DQL基本查询功能
8.2.1 带条件where关键字的条件查询
update 表名 set 指定某个字段名称 = 值 where 条件; --------带条件进行修改
update如果不带where 条件,就是批量修改 (不建议);
update 表名 set 字段名称1 = 值1,字段名称2= 2,..where 条件; ----同时修改多个字段
delete from 表名 where 条件;带条件删除,如果有多个条件 where 条件1 and 条件2;---全表删除满足条件的字段(同时满足所有条件)
truncate from 表名 where 条件;带条件删除,如果有多个条件 where 条件1 and 条件2;---全表删除满足条件的字段
//全表删除---区别
delete from 表名;
truncate from 表名:
delete from 表名:只是删除了当前表中的所有记录数据,但是表的结构还存在,不影响数据库数据约束"自增长约束"的id值
TRUNCATE TABLE 表名;不仅将全表数据了,表也删了(直接影响自增长约束的值了),重新创建一张摸一样的空表;
基本运算符(>,>=,<,<=)
赋值运算符(=,!=)
并列关系 and
或 or
不等于 <>
多个或者的关系 in集合语句:in(值1,值2,值3..) 字段名称 in(值1,值2,值3..)
判断某个值为null is null is not null
sql的非null判断ifnull(指定字段数据,预期值):当指定字段的数据为null时,默认该值为预期值
在两个值的范围内,包括两端 between 值1 and 值2
8.2.2 模糊查询-like
like
elect 指定的字段列表 from 表名 where 字段名称 like '%xx%':模糊检索指定字段有XX的信息
where语句必须置于分组查询之前,后面不能跟聚合函数;
SELECT
*
FROM student
GROUP BY math,IFNULL(english,0) DESC;-----group by后面没有跟排序时,默认升序排序
group by 的后面可以跟的分组字段,
----- select 分组字段 ,聚合函数 from 表名 group by 分组字段;
SELECT
sex '性别', -- 查询的分组字段
AVG(math) '数学平均分'
FROM student3 GROUP BY sex -- 分组查询;
注意事项:group by 后面不能跟聚合函数
8.2.6 筛选查询-having
筛选查询必须置于分组查询之后
SELECT
sex '性别',
AVG(math) '数学平均分',
COUNT(id) 人数
FROM student
WHERE
math>80
GROUP BY sex
HAVING 人数>2;
8.2.7 分页查询-limit
分页查询 关键字 limit
-- select 字段列表 from 表名 limit 起始行数,每页显示的条数
-- 起始行数从0开始 ---计算=(当前页码-1)*每页显示的条数
---查询第二页数据
select
*
from
student
limit
2,2;