Java 反射机制|数据库查询的小结

/*
Java 反射机制,可以实现以下功能:
①在运行时判断任意一个对象所属的类;
②在运行时构造任意一个类的对象;
③在运行时判断任意一个类所具有的成员变量和方法;
④在运行时调用任意一个对象的方法;
⑤生成动态代理

1.在创建类型的对象的时候,获取的是类型的Class对象的一个镜像|复制体
2.在一个类加载到内存时就会存在这个类型唯一的Class对象(方法,属性,构造器...)
3.如果能够拿到一个类型的Class对象,就可以操作这个类

获取一个类型的Class对象的方式:
	1.类名.class
	2.对象.getClass()
	3.Class.forName(报名+类名|权限定名)

*/
public class ReflectDemo02{
public static void main(String[] args) throws ClassNotFoundException {
//1.类名.class
Class cls1=String.class;
System.out.println(cls1);

	//2.对象.getClass()
	Class cls2="你好".getClass();
	System.out.println(cls1==cls2);  //true
	
	//3.Class.forName(报名+类名|权限定名)
	Class cls3=Class.forName("java.lang.String");
	System.out.println(cls1==cls3);  //true
	
	//4.通过子类的Class对象获取父类的Class对象
	Class cls4=cls1.getSuperclass();
	System.out.println(cls4);
	
	//基本数据类型的Class对象
	Class clsInt=int.class;
	System.out.println(clsInt); //int
	
	Class clsInteger=Integer.class;
	System.out.println(clsInteger); //class java.lang.Integer
	System.out.println(clsInt==clsInteger);//false
	
	//Integer.TYPE-->int的Class类型的对象
	System.out.println(int.class==Integer.TYPE);
	
	//常用方法
	//Class<?>[] getInterfaces()  当前Class对象所表示的类|接口所实现的接口的Class对象数组
	Class<?>[] arr=cls1.getInterfaces();
	System.out.println(Arrays.toString(arr));
	//int getModifiers() 返回此类或接口以整数编码的 Java 语言修饰符。 
	System.out.println("类的修饰符的和"+Modifier.toString(cls1.getModifiers()));
	
	// String getName() 报名+类名
	System.out.println(cls1.getName());
	
	//String getSimpleName() 类名
	System.out.println(cls1.getSimpleName());
	
	//boolean isPrimitive()    判定指定的 Class 对象是否表示一个基本类型。
	System.out.println(Integer.TYPE.isPrimitive());
}

}

/*

  • 反射是发生在程序运行期的行为
    */
    public class ReflectDemo01 {
    public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException, IOException {
    Properties pro=new Properties();
    pro.load(Thread.currentThread().getContextClassLoader().getResourceAsStream(“db.properties”));
    //通过反射方式创建对象
    Person p=(Person) Class.forName(pro.getProperty(“name”)).newInstance();
    p.test();

    }
    }

class Person{
public void test(){
System.out.println(“我是person”);
}
}

class Student extends Person{
public void test(){
System.out.println(“我是student”);
}
}
class Teacher extends Person{
public void test(){
System.out.println(“我是Teacher”);
}
}

查询:

–注释
–查询公式: select *|字段名字1 别名,字段名字2 (as) 别名… from 表名;
–执行顺序:–from–select确定结果集
–查询dept表中的所有信息
SELECT * FROM DEPT;
select * from dept;

–查询雇员表中所有员工的员工编号,员工姓名,上级编号
–要查询的数据: empno,ename,mgr
–数据的来源:emp
–条件:
select empno,ename,mgr from emp;

–所有员工的部门标号
select deptno from dept;
select deptno from emp;

–去重 distinct
select distinct deptno from emp;
–完全相同的数据才能去重
select distinct deptno,ename from emp;

–表达式
select distinct 1+1 from dept;
–计算器
select empno,ename,123*456 from emp;

–别名 字段 (as) 别名 表名 别名
select empno as 员工编号,ename “员工 姓名”,1+1 “getSum” from emp e;
–原样输出 “” 小写别名,中文中带有空格…非标准写法

–’'字符串
select ‘haha’ “haha” from emp;
–字符串拼接 ||
select ‘SXT’||ename from emp;

–伪列:表中不存在的列 :字符串,表达式…
–虚表:没有任何数据 dual
select distinct 456*789,sysdate from emp;
select sysdate from dual;

–null 空值
–查询员工姓名,员工的薪资,员工的奖金
select ename ,sal , comm from emp;
–null和数字运算,结果还是null
–null和字符串运算,结果是原串,null相当于空串
–给公司的每个员工+100鼓励金
select ename ,sal , comm “原奖金”,comm||‘100’ “新奖金” from emp;
–处理null值 nvl(参数1,参数2) 如果参数1为null,函数的返回值结果为参数2,如果参数1不为null,函数的返回值结果为参数1
select ename ,sal , comm “原奖金”,nvl(comm,0)+100 “新奖金” from emp;

–练习
–查询所有员工的名字, 工种, 年薪(不带奖金)
–查询所有员工的名字,工种,年薪(带12月奖金的)
–查询所有员工的名字, 工种, 年薪(带一次奖金的)

条件查询:
–条件查询: select *|字段名字… from 表名 where 行过滤条件;
–执行顺序: from–where–select
–查询30部门的员工
select * from emp where deptno=30;

– 查询员工名字为’SMITH’的员工信息
select * from emp where ename=‘SMITH’;

–比较条件 = 、>、 <、 >=、 <=、 !=、 <>
–除了’SMITH’的所有员工的员工姓名和员工编号
select empno,ename from emp where ename!=‘SMITH’;
select empno,ename from emp where ename<>‘SMITH’;
select empno,ename from emp where not ename=‘SMITH’;

–查询呢薪资大于800的员工信息
select * from emp where sal>800;

–and且、 or或、 not非
–查询工种为CLERK的,并且是30部门的员工信息
select * from emp where job=‘CLERK’ and deptno=30;
–查询工种为CLERK的,或者是30部门的员工信息
select * from emp where job=‘CLERK’ or deptno=30;
–查询不是工种为CLERK的,也不是30部门的员工信息
select * from emp where job!=‘CLERK’ and deptno!=30;
select * from emp where not job=‘CLERK’ and not deptno=30;
–select * from emp where not (job=‘CLERK’ and deptno=30);
select * from emp where not (job=‘CLERK’ or deptno=30);

–查询有奖金的人
select * from emp where comm is null;
–查询没有奖金的人
select * from emp where not comm is null;
select * from emp where comm is not null;
–select * from emp where comm not is null;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值