day19
##Java内省
```
内省:用来获得JavaBean的属性及属性的get或set方法.
JavaBean:就是一个满足了特定格式的Java类:
需要提供无参数的构造方法:
属性私有
对私有的属性提供public的get/set方法.
内省的代码:
public void demo1() throws Exception{
// 获得了Bean的信息
BeanInfo beanInfo = Introspector.getBeanInfo(User.class);
// 获得Bean的属性描述了
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
for(PropertyDescriptor pd:pds){
System.out.println(pd.getName());
/*pd.getReadMethod(); // 获得get方法
pd.getWriteMethod();// 获得set方法.
*/ }
}
使用内省封装一个MyBeanUtils:
public class MyBeanUtils {
public static void populate(Object obj,Map<String,String[]> map) throws Exception{
// 获得类的所有的属性的名称:
BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
// 获得类中所有的属性:
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor pd : pds) {
if(map.containsKey(pd.getName())){
Method method = pd.getWriteMethod();
// 执行set方法:
method.invoke(obj, map.get(pd.getName())[0]);
}
}
}
}
反射
反射:(点)
获得类的字节码对象:Class对象.三种获得的方式.
类名.class;
类的实例.getClass();
Class.forName();
获得构造器:Constructor
获得属性:Field
获得方法:Method
```
##事务
```
什么是事务:
事务指的是逻辑上的一组操作,组成这组操作的各个逻辑单元要么一起成功,要么一起失败.
事务的特性:
原子性:强调事务的不可分割.
一致性:强调的是事务的执行的前后,数据的完整性要保持一致.
隔离性:一个事务的执行不应该受到其他事务的干扰.
持久性:事务一旦结束(提交/回滚)数据就持久保持到了数据库.
隔离性引发的安全问题:
1.脏读 :一个事务读到另一个事务还没有提交的数据.
2.不可重复读 :一个事务读到了另一个事务已经提交的update的数据,导致在当前的事务中多次查询结果不一致.
3.虚读/幻读 :一个事务读到另一个事务已经提交的insert的数据,导致在当前的事务中多次的查询结果不一致.
设置事务的隔离级别(解决)
设置事务的隔离级别:
* read uncommitted :未提交读.脏读,不可重复读,虚读都可能发生.
* read committed :已提交读.避免脏读.但是不可重复读和虚读有可能发生.
* repeatable read :可重复读.避免脏读,不可重复读.但是虚读有可能发生.
* serializable :串行化的.避免脏读,不可重复读,虚读的发生.
MYSQL隔离级别:repeatable read Oracle隔离级别:read committed(点)
* 解决读问题:
* 未提交读:以上情况都能发生.
* 已提交读:解决脏读,但是不可重复读和虚读有可能发生
* 重复读:解决脏读和不可重复读,但是虚读有可能发生.
* 串行化:可以解决以上的所有情况.
* JDBC进行事务的管理:
* Connection:
* setAutoCommit(boolean flag);
* commit();
* rollback();
* DBUtils进行的事务的管理:
```
|
|