zoukankan      html  css  js  c++  java
  • jdbc_dbcp连接池和装饰者模式概述

    package cn.code.demo;
    
    import java.sql.Connection;
    import java.sql.SQLException;
    
    import org.apache.commons.dbcp2.BasicDataSource;
    import org.junit.Test;
    
    /*
     * 数据库连接池
     * 池参数:
     * 初始化大小:10个
     * 最小空闲连接数:3个
     * 增量:一次创建的最小单位  5个
     * 最大空闲连接数 12个
     * 最大连接数 20个
     * 最大等待时间:1000毫秒
     * 连接池也是用四大连接参数
     * 实现的接口
     * javax.sql.DataSource接口!
     * */
    public class DBCPDemo1 {
        @Test
        public void fun1(){
            /*
             * 1.创建连接池对象
             * 2.配置四大参数
             * 3.配置池参数
             * 4.得到连接对象
             * */
            BasicDataSource dataSource = new BasicDataSource();
            dataSource.setDriverClassName("com.mysql.jdbc.Driver");
            dataSource.setUrl("jdbc:mysql://localhost:3306/mydb1");
            dataSource.setUsername("root");
            dataSource.setPassword("123");
            
            dataSource.setMaxTotal(20);
            dataSource.setMaxWaitMillis(1000);
            dataSource.setMaxIdle(3);
            
            Connection con =null;
            try {
                con = dataSource.getConnection();
                System.out.println(con.getClass().getName());
                /*
                 * 连接池内部使用四大参数创建了链接对象,即mysql驱动提供的Connection
                 * 连接池使用mysql的链接对象进行了装饰,只对close()方法进行了增强
                 * 装饰之后的Connection close()方法,用来把当前链接归还给池(装饰者设计模式)
                 * */
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }finally{
                try {
                    con.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
    装饰者模式:
    对象增强的手段
    *继承
    *装饰者模式
    *动态代理
    被增强的对象可以切换
    增强内容可以切换
    ---------------------
    继承:
    缺点:
    1、增强的内容是死的,不能动
    2、被增强的对象也是死的
    使用继承回事类增多;
    class 咖啡类{}
    class 有糖咖啡 extends 咖啡{}
    class 加奶咖啡 extends 咖啡{}
    class 加盐咖啡 extends 咖啡{}
    class 加糖加奶 extends 加奶{}
    -------------------------------
    装饰者模式:
    1、增强的内容是死的
    2、被增强的对象时任意的
    class 咖啡类{}
    class 有糖咖啡 extends 咖啡{}
    class 加奶咖啡 extends 咖啡{}
    class 加盐咖啡 extends 咖啡{}
    咖啡a = new 加糖();
    咖啡 b = new 加盐(a);//对a进行装饰,就是给a加盐
    咖啡 c = new 加奶(b);
    java io流中大量应用!、
    四大家族:
    1、字节:inputStream outputStream
    2、字符:reader、writer
    InputStream 
    FileInputStream:他是一个节点流,就是和一个资源绑定在一起的!文件
    BufferedInputStream : 他是装饰流,创建时必须给一个底层对象,然后我不管你给我的是什么流,我都会给你它添加缓冲区!
    new BuferedInputStream(new FileInputStream("c:/xxx.txt"));
    ObjectInputStream(new BuferedInputStream(new FileInputStream("c:/xxx.txt")););
    ByteArrayInputStream(byte[] buf);
    GZIPIputStream();
    --------------------
    装饰用途:不知道被增强对象的具体类型时,可以使用!
    1、是你还有你,一切拜托你!
    class MyConnection implements Connection{
        private Connection con;
        public MyConnection(Connection con ){//通过构造器传递底层对象
            this.con=con;
        }
        //一切拜托你
        public Statement createStatement(){
            return con.createStatement();
        }
        //增强方法
        public void close(){
            把当前链接归还给池!
        }
    }
    Connection con = 通过四大参数创建链接对象由mysql提供
    Connection con1 = new MyConnection(con);
    con1.close();
  • 相关阅读:
    软件过程管理读书笔记02
    交叉验证
    oracle两张表数据匹配,Oracle-left join两表关联只取B表匹配到的第一条记录
    oracle批量新增
    oracle聚合函数XMLAGG用法简介
    form表单导致url连接重定向问题处理
    请求200,返回没内容,360可以看到response内容(待看),nginx返回内容被截取
    jsonp请求返回前面带有个null
    oracle日期转换的一些坑
    Java中将List<String>转化为以,分割的字符串或相反(转载)
  • 原文地址:https://www.cnblogs.com/wangyinxu/p/7428213.html
Copyright © 2011-2022 走看看