30

数据工具与查询

介绍

本文档旨在详细介绍数据查询工具及其在业务开发中的应用。通过分析代码库中的核心文件,我们将展示数据查询、批量操作和事务管理的高级用法,并结合实际代码示例进行说明。

项目结构

项目主要分为以下几个模块:

  1. Shared/Data:包含数据库操作的核心功能,如查询、批量操作和事务管理。
  2. Known:提供业务逻辑和服务的实现。
  3. Plugins:扩展功能模块,如Excel导出等。

核心组件

1. Database.Query.cs

  • 功能:提供异步数据查询的核心方法,支持单条查询、批量查询和事务管理。
  • 关键方法
    1. QueryAsync<T>:异步查询单条数据。
    2. QueryListAsync<T>:异步查询多条数据。
    3. QueryActionAsync:支持多个查询操作的事务管理。

2. DBUtils.cs

  • 功能:数据库操作工具类,提供数据转换、连接字符串管理和导出功能。
  • 关键方法
    1. ConvertTo<T>:将DataReaderDataRow转换为泛型对象。
    2. GetConnectionString:根据数据库类型获取连接字符串。
    3. GetExportData:将查询结果导出为Excel文件。

架构概述

classDiagram
  class Database {
    +QueryAsync<T>(sql, param): Task<T>
    +QueryListAsync<T>(sql, param): Task<List<T>>
    +QueryActionAsync(action): Task
  }
  class DBUtils {
    +ConvertTo<T>(reader): object
    +GetConnectionString(type): string
    +GetExportData<T>(criteria, pageData, onExport): byte[]
  }
  Database --> DBUtils: 使用

详细组件分析

Database.Query.cs

关键方法

  1. QueryAsync<T>

    • 功能:异步查询单条数据。
    • 示例
      public virtual Task<T> QueryAsync<T>(string sql, object param = null)
      {
          var info = new CommandInfo(Provider, typeof(T), sql, param);
          return QueryAsync<T>(info);
      }
      
    • 说明:通过SQL语句和参数查询单条数据,返回泛型对象。
  2. QueryListByIdAsync<T, TKey>

    • 功能:根据ID集合批量查询数据。
    • 示例
      public virtual Task<List<T>> QueryListByIdAsync<T, TKey>(TKey[] ids)
      {
          if (ids == null || ids.Length == 0)
              return Task.FromResult<List<T>>(null);
          // 构造查询条件
          var where = string.Join(" or ", idTexts);
          var sb = Provider?.Sql.SelectAll().From<T>().WhereSql(where);
          return QueryListAsync<T>(info);
      }
      
    • 说明:通过ID集合查询多条数据,适用于批量操作场景。

DBUtils.cs

关键方法

  1. ConvertTo<T>

    • 功能:将DataReader转换为泛型对象。
    • 示例
      public static object ConvertTo<T>(IDataReader reader)
      {
          var dic = GetDictionary(reader);
          return ConvertTo<T>(dic);
      }
      
    • 说明:支持动态映射数据库字段到对象属性。
  2. GetExportData

    • 功能:导出查询结果为Excel文件。
    • 示例
      public static byte[] GetExportData<T>(PagingCriteria criteria, List<T> pageData, Func<T, ExportColumnInfo, object> onExport = null)
      {
          var excel = ExcelFactory.Create();
          var sheet = excel.CreateSheet("Sheet1");
          // 填充数据
          return stream.ToArray();
      }
      
    • 说明:支持自定义导出列和数据格式化。

依赖分析

  • Database 依赖于 DBUtils 进行数据转换和导出功能。
  • DBUtils 依赖于外部库(如Excel处理库)实现导出功能。

性能考虑

  1. 批量查询优化:通过QueryListByIdAsync减少数据库连接次数。
  2. 异步操作:所有查询方法均为异步,提高并发性能。

故障排除指南

  1. 查询返回空数据:检查SQL语句和参数是否正确。
  2. 导出失败:确保导出列和数据格式匹配。

结论

本文档详细介绍了数据查询工具的核心功能和使用方法,帮助开发者高效实现数据操作和导出功能。通过代码示例和架构图,读者可以快速理解并应用这些功能。