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