Java Mybatis数据源之工厂模式

目录
  • 工厂模式的工厂
  • 工厂模式的产品
  • 总结

工厂模式的工厂

DataSourceFactory是工厂角色的接口层

public interface DataSourceFactory {
  void setProperties(Properties props);
  DataSource getDataSource();
}

这个两个方法一个是设置DataSource的相关属性,一个是获取当前的dataSource

UnpooledDataSourceFactory实现了这个接口,它的构造方法中指定dataSource是UnpooledDataSource对象

public UnpooledDataSourceFactory() {
        this.dataSource = new UnpooledDataSource();
}

PooledDataSourceFactory继承了UnpooledDataSourceFactory,构造方法中返回了PooledDataSource对象,其他都是使用UnpooledDataSourceFactory的方法

public class PooledDataSourceFactory extends UnpooledDataSourceFactory {

    public PooledDataSourceFactory() {
        this.dataSource = new PooledDataSource();
    }

}

工厂模式的产品

DataSource的工厂模式的产品的接口,UnpooledDataSource和PooledDataSource都实现了这个方法,UnpooledDataSource是不使用数据库连接池,而PooledDataSource是使用数据库连接池

UnpooledDataSource的doGetConnection()方法:

    private Connection doGetConnection(String username, String password) throws SQLException {
        Properties props = new Properties();
        if (driverProperties != null) {
            props.putAll(driverProperties);
        }
        if (username != null) {
            props.setProperty("user", username);
        }
        if (password != null) {
            props.setProperty("password", password);
        }
        return doGetConnection(props);
    }
    private Connection doGetConnection(Properties properties) throws SQLException {
        initializeDriver();
        Connection connection = DriverManager.getConnection(url, properties);
        configureConnection(connection);
        return connection;
    }

这个方法就是典型的连接数据库的操作了:

  • 调用initializeDriver()方法初始化数据库驱动,这个方法中进行jdbc驱动的初始化,注册到DriverManager中,同时保存到registeredDrivers中,registeredDrivers是UnpooledDataSource是成员变量,使用ConcurrentHashMap来进行存储,保证线程的安全性
  • Connection connection = DriverManager.getConnection(url, properties);
  • 创建数据库连接
  • 调用configureConnection()方法配置数据库的连接

PooledDataSource是使用数据库连接池来进行缓存数据库连接,但我们要设置合适的数据库连接池的最大连接数和最大空闲连接数

有了数据库连接池,在初始化的时候初始化数据库连接信息,缓存到连接池中,当需要连接数据库的时候从数据库连接池中获取,使用完后不需要关闭连接而是返还给连接池,方便下次使用。

总结

本文主要介绍了Mybatis的数据源模块,从工厂模式的角度分析了担任工厂模式的工厂角色的接口DataSourceFactory和它对应的实现类UnpooledDataSourceFactory、PooledDataSourceFactory,同时介绍了工厂模式的产品角色的DataSource接口和它对应的实现类UnpooledDataSource、PooledDataSource,UnpooledDataSource不使用数据库连接池,PooledDataSource使用了数据库连接池。

到此这篇关于Java Mybatis数据源之工厂模式的文章就介绍到这了,更多相关Mybatis工厂模式内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • mybatis中mapper-locations的作用

    目录 mapper-locations的作用说明 1.mapper-locations 2.使用场景 3.补充 mybatis.mapper-locations作用和Invalid bound statement (not found)错误 对应错误:mapper.xml没被加载到 mybatis.mapper-locations mapper-locations的作用说明 1.mapper-locations mapper-locations是一个定义mapper接口位置的属性,在xxx.ym

  • 详解Mybatis中的PooledDataSource

    目录 前言 PooledConnection PooledDataSource的pushConnection()方法 总结 前言 上篇Java Mybatis数据源之工厂模式文章中我们介绍了Mybatis的数据源模块的DataSource接口和它对应的实现类UnpooledDataSource.PooledDataSource,这篇文章详细介绍一下PooledDataSourcePooledDataSource使用了数据库连接池可以实现数据库连接池的重复利用,还能控制连接数据库的连接上限,实现数

  • springboot实现指定mybatis中mapper文件扫描路径

    目录 指定mybatis中mapper文件扫描路径 mybatis配置多个扫描路径写法 指定mybatis中mapper文件扫描路径 所有的mapper映射文件 mybatis.mapper-locations=classpath*:com/springboot/mapper/*.xml 或者resource下的mapper映射文件 mybatis.mapper-locations=classpath*:mapper/**/*.xml mybatis配置多个扫描路径写法 百度得到,但是很乱,稍微

  • mybatis配置mapper-locations的坑及解决

    目录 mybatis配置mapper-locations的坑 mapperLocations配置失效 问题根源 解决 mybatis配置mapper-locations的坑 很多时候想把xml文件与mapper类放在一起. mapper-locations: com.demo.dao.*.xml 这么配置之后 发现报错找不到xml中id pom.xml配置这句话就可以了!! <build>     <resources>         <resource>      

  • Mybatis返回Map数据方式示例

    目录 一. 方式1 接口 调用 二. 方式2 接口 调用 三. 方式3 接口 调用 一. 方式1 接口 public interface UserMapper { List<Map<String, String>> selectTestData1(); } <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//

  • Mybatis的mapper.xml中if标签test判断的用法说明

    目录 mapper.xml中if标签test判断的用法 1. 字符串等于条件的两种写法 2. 非空条件的判断 3. 判断数组是否包含某个元素 mapper.xml <if test>书写时候的一些坑 1. 分页 2. 字符串形式的数据比较 mapper.xml中if标签test判断的用法 1. 字符串等于条件的两种写法 ① 将双引号和单引号的位置互换 <if test=' testString != null and testString == "A" '>  

  • Mybatis条件if test如何使用枚举值

    目录 Mybatis条件if test使用枚举值 1.正确 2.错误 Mybatis里使用枚举Enum判断 TestTypeEnum定义如下 Mybatis条件if test使用枚举值 1.正确 package com.weather.weatherexpert.common.utils; /** * <p>Title: </p> * <p>Description: </p> * * @Author * @CreateTime */ public enum

  • Java Mybatis数据源之工厂模式

    目录 工厂模式的工厂 工厂模式的产品 总结 工厂模式的工厂 DataSourceFactory是工厂角色的接口层 public interface DataSourceFactory { void setProperties(Properties props); DataSource getDataSource(); } 这个两个方法一个是设置DataSource的相关属性,一个是获取当前的dataSource UnpooledDataSourceFactory实现了这个接口,它的构造方法中指定

  • Java设计模式之抽象工厂模式实例详解

    本文实例讲述了Java设计模式之抽象工厂模式.分享给大家供大家参考,具体如下: 具体工厂类:生产创建某一类具体产品对象. 抽象产品类可以使用接口或者父类来描述产品对象的行为特征. 具体产品类就是某一具体的对象. 那么抽象工厂模式和工厂模式的不同之处呢? 其实最大的不同就在于,在产品类的结构更加复杂时,抽象工厂模式针对不同的产品族(就是一类产品对象)定义了不同的行为,也就是在父类或接口中,定义了不同的产生方法.不同的产品族调用各自的创建方法.同时不同的产品族横向比较,也有可归类的相同特征,这些特征

  • Java设计模式之静态工厂模式详解

    本文实例讲述了Java设计模式之静态工厂模式.分享给大家供大家参考,具体如下: 静态工厂模式(static factory)也叫简单工厂模式. 涉及到3个角色:工厂类角色,抽象产品类角色和具体产品类角色. 抽象产品类可以使用接口或者父类来描述产品对象的行为特征. 具体产品类就是某一具体的对象. 静态工厂类有一个静态的方法,含有判断逻辑,决定要创建哪一种具体的产品对象. 其设计模式如下: 抽象产品类  IProduct package org.test.design.sf; public inte

  • Java设计模式之抽象工厂模式

    一.场景描述 接<Java设计模式(一)工厂模式> 工厂模式有一缺点,就是破坏了类的封闭性原则.例如,如果需要增加Word文件的数据采集,此时按以下步骤操作: 创建Word文件数据采集类,实现仪器数据采集接口: 修改仪器数据采集工厂类,增加Word文件数据采集类的工厂方法: 调用工厂类的word文件方法: 步骤2修改了工厂类,如果每增加一实现类都需要修改工厂类,那么这样就不合理了. 解决办法是使用抽象工厂类,为每一个实现类都创建其工厂类,并增加工厂接口,使各工厂类实现该接口. 使用抽象工厂后,

  • Java面向接口编程之简单工厂模式示例

    本文实例讲述了Java面向接口编程之简单工厂模式.分享给大家供大家参考,具体如下: 一 代码 interface Output { // 接口里定义的成员变量只能是常量 int MAX_CACHE_LINE = 50; // 接口里定义的普通方法只能是public的抽象方法 void out(); void getData( String msg ); } class Printer implements Output { private String[] printData = new Str

  • Java设计模式之抽象工厂模式详解

    一.什么是抽象工厂模式 为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类,这称之为抽象工厂模式(Abstract Factory).我们并不关心零件的具体实现,而是只关心接口(API).我们仅使用该接口(API)将零件组装称为产品. 二.示例程序   1.抽象的零件:Item类 package com.as.module.abstractfactory; /** * 抽象的零件 * @author Andy * @date 2021/4/29 23:16 */ public

  • 详解Java实践之抽象工厂模式

    目录 一.前言 二.开发环境 三.抽象工厂模式介绍 四.案例场景模拟 4.1.场景模拟工程 4.2.场景简述 4.2.1.模拟单机服务 RedisUtils 4.2.2.模拟集群 EGM 4.2.3.模拟集群 IIR 4.3.单集群代码使用 4.3.1.定义使用接口 4.3.2.实现调用代码 五.代码实现 5.1.工程结构 5.2.ifelse实现需求 5.3.测试验证 六.抽象工厂模式重构代码 6.1.工程结构 6.2.代码实现 6.2.1.定义适配接口 6.2.2.实现集群使用服务 6.2.

  • Java设计模式之抽象工厂模式浅析讲解

    1.介绍 当系统准备为用户提供一系列相关对象,又不想让用户代码和这些对象形成耦合时,就可以使用抽象工厂模式. 2.如何实现 1)抽象产品--Car 2)具体产品--BYDCar.TSLCar 3)抽象工厂Factory 4)具体工厂--BYDFactory.TSLFactory 3.代码实现 /** * 抽象产品 */ public abstract class Car { public abstract String getName(); } /** * 具体产品 */ public clas

  • java设计模式之简单工厂模式简述

    简单工厂模式的概念 就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建.简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例. 简单工厂模式的UML图 简单工厂模式代码 学习简单工厂模式的时候我用的是一个与人类有相关的例子.人类在世界分为男人和女人,首先定义一个Human产品的抽象接口 /** * This is factory patter package */ package com.roc.factory; /** *

  • java设计模式之简单工厂模式详解

    简单工厂模式:由一个工厂对象决定创建出哪一种类的实例. 1.抽象类 public abstract class People { public abstract void doSth(); } 2.具体类 public class Man extends People{ @Override public void doSth() { System.out.println("I'm a man,I'm coding."); } } 3.具体类 public class Girl exte

随机推荐