黑马程序员技术交流社区

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

作者: 学习让我快乐啊    时间: 2018-5-27 17:06
标题: 【石家庄校区】MVC&事务
本帖最后由 学习让我快乐啊 于 2018-5-27 17:07 编辑

反射

获得类的字节码对象:Class对象.三种获得的方式.
​            *类名.class; )
​            *类的实例.getClass();
​            *Class.forName(“类全名”);
​        Class对象的newlnstance()方法可以创建对象
成员方法
Method
getDeclaredMethod(String name, params.class...);
setAccessible(true);
method.invoke(Object object, params...);
MVC:

Jsp+Servlet+JavaBean称为MVC的设计模式
M:Model:模型层
V:View:视图层
C:Controller:控制层
Java中的内省技术
内省:用来获得JAVABean的属性及属性的get或se方法
JavaBean:就是一个满足了特定格式的Java类:
*需要提供无参数的构造方法
*属性私有
*对私有的属性提供oublic的get/set方法
MVC和EE开发三层结构的关系:
内省的代码:
​    publicvoid 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 {
​    publicstatic void populate(Object obj,Map<String,String[]> map) throwsException{
​        // 获得类的所有的属性的名称:
​        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]);
​            }
​        }
​    }
}
事务的概述

什么是事务:
*事务指的是逻辑上的一组操作,组成者祖操作的各个逻辑单元要么一起成功,要么一起失败
事务特性:
原子性:强调事务的不可分割
一致性:强调的是事务的执行的前后,数据的完整性要保持一致
隔离性:一个事务的执行不应该收到其他事务的干扰
持久性:事务一旦结束(提交/回滚)数据就持久保持到了数据库
设置事务的隔离级别:
*read uncommitted :未提交读,以上情况都能发生
*read committed :已提交读.解决脏读,但是不可重复读和虚读有可能发生
*repeatable read :可重复读.避免脏读,不可重复读,但是虚读有可能发生
*serializable  :串行化的.可以解决以上的所有情况
读问题:
​        *脏读:一个事务读到另一个事务还没有提交的数据
​        *不可重复读:一个事物都到了另一个事务已经提交的update的数据,导致在当前的事务中多次查询结果不一致
         *虚读/幻读:一个事务读到另一个事务已经提交的insert的数据,导致在当前的事务中多次查询结果不一致
JDBC中的事务管理
JDBC的事务的管理的API:
​        void  setAutoCommit(boolean autoCmmit)
​        将此连接的自动提交模式设置为给定状态
​        vod   commit()
使所有上一次提交/回滚后进行的更改称为持久更改,并释放此Connection对象当前持有的所有数据库锁
​        void rollback()
​        取消在当前事务中进行的所有更改,并释放Connection对象当前持有的所有数据库锁
DBUtils实现事务管理:
没有事务管理:
QueryRuuer(DataSource ds)
query(String sql, ResultSetHandler<T> rsh, Object...params)
int update(String sql, Object... params)
有事务管理:
QueryRunner()
query(connection conn, String sql, ResultSetHandler<T> rsh,object...params)
int update(Connection conn, String sql,Object param)





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