JavaEE
2019-08-21 19:55:51 62 举报
AI智能生成
JavaEE
作者其他创作
大纲/内容
反射
反射的概念和作用
反射是在运行中获取一个类和对象的信息
在不知道类的任何信息的情况下可以使用这个类的任何东西
获取一个类的Class模板(对象)的方式
类名.class
对象名.getClass()
Class.forName(全限定名)
Class类
获取一个类的Class模板返回的是Class对象,该对象包含这个对象或类的所有属性和方法
API
获得属性
getDeclaredField(String name)
获得一个属性
传属性名
返回Field类型
getDeclaredFields()
获得所有属性
无参
返回Field类型数组
获得方法
getDeclaredMethod(Sreing name,Class<?>...type)
获得一个方法
传方法名和参数的类型(按类型顺序写)
这里的可变参数是用来区分重载方法
返回Method类型
getDeclaredMethods()
获得所有方法
无参
返回一个Method类型的数组
构造方法
getDeclaredConstructors()
获得所有构造方法
无参
返回Constructor类型的数组
getDeclaredConstructor(Class<?>... types)
获得一个构造方法
通过可变参数区分构造方法重载
返回Constructor类型的对象
获取名
getName()
获取全限定名
无参
返回值String类型
getSimpleName()
获取类名
无参
返回值String
创建对象
newInstance()
java.lang.reflect
Field
Class中getDeclaredFields()方法返回的对象的所属类
属性类
方法
getName()
获取属性名
返回String
getType()
获取属性数据类型
返回class java.lang.类名
set(Object,object)
设置值
前传对象,后传值
ConStructor
Class中的getDeclaredConstructor()方法以Constructor类型返回类的构造方法
newInstance(Object... args)
调用该方法创建对象
可变参数
传要初始化的属性的值,参数个数由调用该方法的构造函数决定
getName()
获得构造方法名
返回String类型
Method
Class中的getDeclaredMethods()方法以Method类型返回类中的所有方法
invoke(Object,Object...args)
方法的调用
第一个参数为对象,后边可变参数的类型和个数由调用的方法的参数列表决定
返回值类型为Object
getName()
获得方法名
返回String类型
代理模式
静态代理
动态代理
Proxy
newProxyInstance(加载器,接口系列,InvocationHandler对象)
getProxyClass(加载器,接口系列)
InvocationHandler
invoke(代理对象,Method,参数数组)
类加载机制
jvm和类
JVM和类的关系
JVM终止的情况
1.程序运行到最后正常结束
2.遇到结束程序的语句
3.遇到未捕获异常或错误
4.程序所在平台强制结束JVM
类的初始化
类的加载
是将类的class文件读入内存并为之创建一个java.lang.Class对象
程序中所有的类实际上也是实例,是java.lang.Class的实例
类的连接
负责把类的二进制数据合并到jre中
三阶段
验证
准备
解析
类的初始化
对类初始化,主要就是对变量进行初始化
声明类变量时指定初值
使用静态初始化块对类变量初始化
初始化类的步骤
1.先加载并连接该类
2.如果父类没被初始化,先初始化父类
3.如果类中有初始化语句,则按准许进行初始化
类初始化的时机
1.创建该类的实例
2.调用该类的类方法
3.访问类或接口的类变量,或为该变量赋值
当该类变量由final修饰并且在编译时就确定下来成为宏变量时,该变量会成为直接量,在编译该类时,会把使用到该变量的地方换成相应的值,而不会初始化该类
当使用ClassLoader类的loadClass()方法来加载类时,该类只是被加载而不会初始化,使用Class类的静态方法forName()会强制初始化该类
4.利用反射强制创建类或接口对应的Class对象
5.初始化该类的子类
6.运行某个主类
注解
注解的概念和作用
基本注解
JDBC
步骤
1.建立连接
加载驱动
Class.forName(com.jdbc.mysql.Driver)
调用Class类的方法反射到jar包中的Driver并加载该类且初始化,初始化会创建一个Driver对象并注册到DriverManager类中
获取连接
url
username
password
DriverManager.getConnection(url,user,psw)
2.获取sql执行者
3.定义sql语句
4.执行sql
5.处理结果
6.释放资源
DirverManager
用于管理JDBC驱动服务的类
该类主要作用是获取Connection对象
主要方法
getConnection(url,user,psw)
Connection
数据库连接对象
常用方法
createStatement()
返回Statement对象
prepareStatement()
返回PreparedStatement对象
prepareStatement(String sql)
返回PreparedStatement对象
传sql语句,在执行前将sql送入数据库预编译
prepareCall(String sql)
sql执行者
Statement
子类
PreparedStatement
sql语句不再用字符串拼接的方式写,而是用?作为占位符
方法
setXXX(int index, Xxx value)
int executeUpdate()
ResultSet excuteQuery()
CallableStatement
缺点
会发生sql注入
方法
executeUpdate(String sql)
传sql语句
返回int(影响数据条数)
excuteQuery(String sql)
传sql语句
返回ResultSet结果集
ResultSet
用来接收查询结果的结果集
方法
next()
getXxx(String columnLable)或getXxx(int columnIndex)
close()
数据库连接池
c3p0
druid
作用
初始化程序时启动线程创建多个连接,减少在访问过程中频繁创建链接花费的时间
资源受控
步骤
初始化时创建多个连接
1.加载驱动
setDriverClassName()
2.设置url
setUrl()
3.设置用户名
setUsername
4.设置密码
setPassword()
5.获取连接
getConnection()
运行机制
1.程序初始化时创建连接池
2.使用时向连接池申请可用连接
3.使用完毕,将连接返还给连接池
4.程序退出时,断开所有连接,并释放资源
MyBatis
介绍
Mybatis是一块优秀的持久层框架,用来对数据库进行连接和增删改查
环境搭建
1.mybatis-3.4.1.jar
2.mysql-connector-java-5.1.24.jar
3.druid-1.1.5.jar
xml配置
总xml文件
1.配置mybatis执行日志
2.配置JavaBean类的别名
typeAliases表签
typeAlias子标签
type属性
alias属性
package子标签
name属性
3.配置连接数据库所必要的参数
driver
url
username
password
4.配置SQL语句映射文件
mappers标签
mapper标签
resource属性
SQL语句映射文件
mapper根标签
namespace属性
1.该配置文件的命名空间,做唯一标志,用来调用
2.填写对应接口的全路径
resultMap标签
只用于对结果集的处理
主要处理的问题
1.JavaBean属性名与数据库字段名不一致导致的无法封装问题
2.多表连接查询问题
一对一
一对多
多对一
多对多
属性
id
type
子标签
id
column属性
property属性
result
column属性
property属性
collection
property属性
ofType属性
操作数据库的标签
select
resultMap属性
resultType属性
delete
update
insert
共有属性
id
有关sql语句传参问题
1.传单个参数
2.传多个参数
mybatis会将多个参数作为集合处理
取参方式
arg0,arg1,....
param1,param2,.....
3.传对象
#{对象属性名}
4.使用注解给形参强制命名
5.传集合
6.传对象并用注解给对象强制命名
动态SQL
可以解决传不同个数的参数的问题,通过mybatis的一些标签可以组合成非常灵活的标签
常用标签
if
用于判断参数是否要写到SQL语句中
test属性
where
该标签会在合适的时机自动添加where关键字,并会删去多余的and,但不会自动添加and
一般与if标签搭配使用
trim
prefix属性
prefixOverrides
suffixOverrides
set
作为set关键字,会在合适的时机生成set关键字
foreach
当参数为一个集合的时候可以用此标签遍历集合参数,并搭配SQL关键字in使用
collection属性
item属性
open
close
separator
choose, when, otherwise
当传多个参数,你只想按条件取一个作为sql语句的参数时可以选择使用
其实动态 sql 语句的编写往往就是一个拼接的问题,为了保证拼接准确,我们最好首先要写原生的 sql 语句出来,
然后在通过 mybatis 动态sql 对照着改,防止出错。
然后在通过 mybatis 动态sql 对照着改,防止出错。
0 条评论
下一页