事物



1. 反射:Class.forName("全类名");  constructor c -----c.newInstance(参数);
        getDeclaredFields()获得全部属性,返回值Field; field.setAccessible(ture), 
         field.get(类的实例)   getDeclaredMethod("方法名",参数); method.invoke(对象,参数)






2. 内省:基于反射 ,用来获得javaBean的属性和属性的get和set方法. 来模仿Beanutils.populate() 


1. 满足了一个需要提供+法格式的java类


        2. 获得Bean信息,BeanInfo b = introspector.getBeaninfo()


3.获得Bean的属性描述了 b.getpropertydescriptor(). 看的是类的get方法


4.遍历3.获得get和set方法 getWriteMethod();就是set方法, .invoke();




3.事物管理:   事物的概述:逻辑上的一组操作,组成这组操作的各个逻辑单元需要同步;


1.MySQL的事物管理:(事物默认自动提交,Oracle数据库默认不自动提交) 两种方式:


                1.手动开启事物 : start transaction,  commit/rollback;


2.设置一个自动提交参数为false; 
show variables like '%commit%' 查看与commit的相关参数;
                        set autocommit = 0;


2.JDBC的事物管理的API: connection.setautocommit(false); commit, rollback;





4.转账操作;
   1.在servlet中,接受参数,给业务层,传入参数,在service,调用一个DAO中的两个方法转入和转出 


      第一种方式:
   2.在业务层加事物层,获得连接,然后调用setautocommit,把连接通过参数传递到DAO层.然后在业务层
        处理异常,关闭连接.


      第二种方式:
   3.在JDBCutils工具类中,把连接绑定当前线程,ThreadLocal<connection>,  直接调用get()方法,获得          线程,判断没有线程,从连接池里面获得,然后调用set(conn)方法, 然后写三个方法,就是三个
          开启事物的步骤




      第三种方式: 
   4.DBUtils实现事务管理  Dbutils工具类
      1.queryrunner() ,在业务层,获得连接,把连接通过参数传递到DAO层,进行事物管理
           在dao层,new .queryrunner(),把连接传到query(conn)




5.事物特性: 原子性:事物的不可分割;  一致性:强调的事物执行的前后,数据的完整性保证一致
            隔离性:一个事物的执行不应该收到其他事物的干扰, 
            持久性:事物一旦结束,(提交/回滚),数据就持久保持到了数据库;


1.事物隔离的性,安全问题:
            一类读问题:
脏读:      一个事物读到另一个事物还没有提交的数据


不可重复读; 一个事物读到了另一个事物已经提交的update数据,多次查询不一致


虚读/幻读: 一个事物读到了另一个事物已经提交的insert数据,多次查询不一致


    一类写问题:
引入两类丢失更行:




2.设置事物隔离级别:
read uncommited: 未提交读,三种安全问题都会发生
read commited   :  避免脏读;
repeatable read :  避免脏读,不可重复读
serializable:      全部避免




6.EE开发的三层机构:   WEB层: servlet+jsp 业务层: javaBean   持久层: JDBC

















你可能感兴趣的:(事物)