1.factory 和 配置文件 将Dao和web解耦
UserDao dao = new UserDaoImpl();
你看UserDaoImpl web依赖了dao的实现类,没有确定UserDao的实现类的名字 我就得不到dao
我们用工厂设计模式 那个工厂会给我们UserDao的实现类
为了让实现类更换时不用改程序 我们通过配置文件+反射 得到具体的实现类
让工厂只有一个 单台设计模式
Properties prop = new Properties();
InputStream in = DaoFactory.class.getClassLoader.getResourceAsStream("...")
prop.load(in);
String classname = prop.getProperties("..");
Class clazz = Class.forName(classname);
UserDao dao = (UserDao)clazz.newInstance();
类路径: 要是有多层,文件夹下
2.加载配置文件,一次就可以了,不用每次new一个工厂的时候都要加载
---->static静态代码块 或 单态设计模式
3.Utils 得到数据库连接
将url 数据库名 用户名 密码 ----> 配置文件
以后更改数据库 只用更改配置文件,应用程序和数据库解耦
4.连接池
怎么感觉像妓女 千人踩,万人压
java.sql.DataSource
将Collection加入到LinkedList 用的多的是增加和删除 底层是链表
Collection的close 应该返回到LinkedList中
批量的创建很多连接,放到LinkedList中
.close 还回到池中
5.pool获取连接 而不是utils了
6.LinkedList pop()弹出, push(...)加到
动态代理 返回一个假的Connection 当假的.close时,将Collection返回连接池
7.DBCP
8.Tomcat数据源
JDBC DataSource
JNDI Resources
mysql.jar 放到 Tomcat下的lib <context>
9.JNDI
Java命名和目录接口
javax.naming
Context
初始化JNDI
得到JNDI容器
从容器检索...名称对应的对象
10.事物
是逻辑上的一组操作,要么都成功,要么都不成功
start transaction 开启事务
commit; 提交事务
Rollback 回滚
事务的特性(ACID):
原子性:(XXX,YYY)被包在一起,像原子一样,不能分割,
要么都成功,要么都失败,他们是一个逻辑单元
一致性:两个人转账,两个人的总钱要和转账前一致
隔离性:多个用户并发访问数据库
持久性:事务一旦提交,对数据库的改变的永久的
10.使用JDBC管理事务
默认:JDBC是自动提交事务,不能回滚
Connection.setAutoCommit(false);
Connection.rollback();
Connection.commit();
11.
Connection conn = null;
try{
...update.1...
...update.2...
conn.commit();
} catch(Exception e){
conn.rollback();
}
12.设置事务回滚点
SavePonit sp = conn.setSavePoint();
conn.rollback(sp);
conn.commit();
可以设置多个回滚点
13.事务的隔离级别
ACID 的 I:
脏读:一个事务读取了另一个事务未提交的数据
不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同
一行 update
虚读:一个事务内读取到了别的事务插入的数据,导致前后读取不一致
多行 insert
不可重复读用在做统计
select @@tx_isolation; 当前数据库的隔离级别
set transaction isolation level ... 只对窗口生效
第二十天:听课笔记
最新推荐文章于 2009-10-25 23:07:00 发布