黑马程序员技术交流社区

标题: 【石家庄校区】MVC&事务 [打印本页]

作者: Black_Y    时间: 2018-5-27 16:29
标题: 【石家庄校区】MVC&事务
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进行的事务的管理:


```







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2