zoukankan      html  css  js  c++  java
  • JDBC中的那些设计模式

    一、单例模式获取数据库连接

    1、关于单例模式的定义

    保证一个类仅有一个实例,并提供访问它的全局访问点。Java里面实现的单例是一个虚拟机的范围。因为装载类的功能时虚拟机,所以一个虚拟机在听过自己的Classload装载饿汉式实现单例类的时候就会创建一个类的实例。单例的实质是:控制实例的数目 。负责创建Singleton类自己唯一实例,并提供一个getInstance的方法,让外部来访问这个类的唯一实例。

    2、单例模式的分类

    懒汉式会一直等到马上要使用实例的时候才创建,是典型的时间换空间。饿汉式在装载类的时候就创建对象实例,典型的空间换时间。

    3、单例模式实现的步骤

    1. 私有化构造方法
      private Singleton(){}
    2. 定义存储实例的属性
      //static 懒汉式为了在静态方法中使用
      //static 饿汉式 在类装载的时候进行初始化,多个实例的static变量会共享同一块内存区域
      private static Singleton singleton=null;
    3. 提供获取实例的静态方法
      public static Singleton getInstance(){
          return singleton;
      } 

     4、模板实现

    懒汉式的实现:

    package SingletonPattern;
    
    public class LazySingleton {
        //1、定义一个变量来存储类实例
        private static LazySingleton uniqueInstance=null;
        //2、私有化构造方法,可以在内部类控制创建实例的项目
        private LazySingleton(){}
        //3、定义一个方法为客户端提供类实例
        public static synchronized LazySingleton getInstance(){
            //判断存储实例的变量是否有值
            //延迟加载:一开始不要加载资源和数据,一直等到马上用这个资源或者数据了,才加载
            //缓存的思想:一种典型的空间换时间的方案。
            if(uniqueInstance==null){
                //如果没有,就创建一个实例,并把值赋值给存储类实例的变量
                uniqueInstance=new LazySingleton();
            }
            //如果有值,那就直接使用
            return uniqueInstance;
        }
    }

    饿汉式实现

    package SingletonPattern;
    
    public class HungarySingleton {
            //1、定义一个变量来存储创建好的类实例,直接在这里创建实例,只能创建一次
            private static HungarySingleton uniqueInstance=new HungarySingleton();
            //2、私有化构造方法,可以在内部类控制创建实例的项目
            private HungarySingleton(){}
            //3、定义一个方法为客户端提供类实例
            public static HungarySingleton getInstance(){
                //直接使用创建好的实例
                return uniqueInstance;
            }
    }

     5、JDBC连接实例挑战

    package com.lyjs.jdbcTools;
    
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Properties;
    import javax.sql.DataSource;
    
    import org.apache.commons.dbcp.BasicDataSourceFactory;
    
    public final class JdbcUtils {
        //单列模式
        private JdbcUtils(){}
        private static DataSource myDataSource=null;
        //声明实例
        private JdbcUtils jdbcUtils =new JdbcUtils();
        public JdbcUtils getJdbcUtils(){
            return jdbcUtils;
        }
        static{
            try {
                Class.forName("com.mysql.jdbc.Driver");
                //加载dbcp配置文件
                Properties prop=new Properties();
                InputStream is=JdbcUtils.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");
                prop.load(is);
                //创建连接池
                myDataSource=BasicDataSourceFactory.createDataSource(prop);
            } catch (Exception e) {
                e.printStackTrace();
                throw new ExceptionInInitializerError();
            }
        }
        
        //获取数据源
        public  DataSource getDataSource(){
            return myDataSource;
        }
        //获取链接
        public  Connection getConnection(){
            try {
                return myDataSource.getConnection();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
        //关闭连接
        public  void free(ResultSet rs, Statement st, Connection conn) {
            try {
                if (rs != null) {
                    rs.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (st != null) {
                        st.close();
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                } finally {
                    try {
                        if (conn != null)
                            conn.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
  • 相关阅读:
    转:高并发场景下强一致预算/库存扣减方案
    转:Dubbo性能调优参数及原理
    转:java线程状态说明,Jstack线程状态BLOCKED/TIMED_WAITING/WAITING解释
    使用增强学习法之SQ3R主动阅读
    建立实用投资计划
    使用smarty方法实现目标
    主动学习
    小知识
    大脑的处理模式
    真正的随笔
  • 原文地址:https://www.cnblogs.com/lyajs/p/6097431.html
Copyright © 2011-2022 走看看