zoukankan      html  css  js  c++  java
  • 数据库操作类库(简化版)

    一直以来对设计模式,怎么写出高质量、高效、可移植性强的理解不深。也许经验不足是一个很大的原因吧。今天花了很久的时间整理了一个数据库操作类库(简化版),希望能得到各位前辈的指点。

    首先,我定义了一个数据库操作接口IDbOperator,该接口实现IDisposable接口,用于操作结束后释放各种资源。类图如下:

    属性:

    ConnectString用于获取数据库连接字符串

    DbConn用于获取当前数据库连接(IDbConnection接口)

    方法:

    Open():打开数据库连接

    Close():关闭数据库连接

    GetCommand():获取当前数据源,返回IDbCommand

    GetDataSet():获取数据集,返回DataSet数据集

    GetSingle<T>():泛型方法,获取单个数据信息

    Query():执行SQL语句

    QueryTran<T>():执行事务操作

    RunProcedure():执行存储过程

    由于我想有不少操作,与数据库类型无关。操作是通用的,因此我新建了一个数据库操作抽象类AbstractDbOperator,它实现了接口 IDbOperator,实现了一下方法Open()、Close()、QueryTran<T>()、Query()、 GetSingle<T>()。

    并将这些方法定义为虚方法,这样在其继承子类中可以进行重写。

    而由于GetCommand()、GetDataSet()、RunProcedure()等方法与数据库类型有关,不同的数据库实现方式不同,因此在不同的数据库操作类中实现。类图如下:

    具体的数据库操作类被定义为sealed,同时被定义为internal,因此它们都不允许在程序集以外访问。可能这时有人会问,不让在程序集以外访问,这样的类库有何意义呢?别急,下面还有一个类起决定作用。

    新建了一个DBOperator类,用于对外公布数据库操作,它只有一个方法,用于获得数据库操作接口实例。类图如下:

    方法:

    GetInstance():采用反射机制,分析当前数据库类型,并实例化相应数据库操作类,必须在config文件中appSettings节点下添加如下设置:

    1 <add key="assemblyName" value="Higame.Database"/>   <!--程序集名称-->
    2 <add key="typeName" value="Higame.Database.OledbOperator"/>  <!--数据库操作类名-->
    3 <add key="ConnectionString" value="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=G:\\CSharp\\MonsterEdit\\MonsterEdit\\bin\\Debug\\itemDB.accdb;"/>  <!--连接字符串-->

    GetInstance(DatabaseType databaseType):传递数据库类型参数,并在Config文件中appSettings节点下添加连接字符串设置:

    1 <add key="ConnectionString" value="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=G:\\CSharp\\MonsterEdit\\MonsterEdit\\bin\\Debug\\itemDB.accdb;"/>     <!--连接字符串-->

    GetInstance(DatabaseType databaseType,string connectString):传递数据库类型和连接字符串参数

    GetInstance(string connectString):传递连接字符串参数,并在Config文件中appSettings节点下添加如下设置:

    1 <add key="assemblyName" value="Higame.Database"/>  <!--程序集名称-->
    2 <add key="typeName" value="Higame.Database.OledbOperator"/>  <!--数据库操作类名-->

    调用操作如下:

    var db = DbOperator.GetInstance(DatabaseType.Access);

    感觉整个类库中还有很多地方实现的不是很好。耦合度还是很高,希望各位前辈们不吝赐教。

    另附实现源代码:数据库操作类库

  • 相关阅读:
    VMware虚拟机下Centos8 设置静态IP地址
    maven插件使用及dockerfile插件多模块下打包
    Docker开启远程访问、IDEA Docker 连接 linux 上的 Docker
    Docker打包错误:Failed to execute goal com.spotify:docker-maven-plugin:1.2.0:build (default-cli) on project security
    Idea 中 Docker 的 log 乱码
    oracle11G 已开启监听,但远程连接依旧无监听解决过程
    sql server特殊功能:临时表是否存在
    sql server object_id()的应用
    sql server系统表详细说明
    SQL行转列汇总
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/1979535.html
Copyright © 2011-2022 走看看