Skip to content

核心接口 ​

SmartSql 的公共 API 建立在一小部分核心接口之上,这些接口处理数据访问、会话管理和事务控制。本页文档记录了这些接口上的每个公共方法。

一览 ​

接口用途生命周期
ISqlMapper高级数据访问(同步 + 异步)每个 SmartSql 实例单例
IDbSession底层数据库会话,包含连接和事务每个请求或由会话存储管理
IDbSessionFactory创建 IDbSession 实例每个 SmartSql 实例单例
IDbSessionStore线程本地会话存储每个 SmartSql 实例单例
ITransaction事务管理契约混合在 ISqlMapper 和 IDbSession 中

接口层次结构 ​

mermaid
classDiagram
    class ITransaction {
        <<interface>>
        +BeginTransaction() DbTransaction
        +BeginTransaction(IsolationLevel) DbTransaction
        +CommitTransaction() void
        +RollbackTransaction() void
    }
    class IDisposable {
        <<interface>>
        +Dispose() void
    }
    class ISqlMapper {
        <<interface>>
        +SmartSqlConfig SmartSqlConfig
        +SessionStore IDbSessionStore
        +Execute(RequestContext) int
        +ExecuteScalar~T~(RequestContext) T
        +Query~T~(RequestContext) IList~T~
        +QuerySingle~T~(RequestContext) T
        +GetDataSet(RequestContext) DataSet
        +GetDataTable(RequestContext) DataTable
        +ExecuteAsync(RequestContext) Task~int~
        +ExecuteScalarAsync~T~(RequestContext) Task~T~
        +QueryAsync~T~(RequestContext) Task~IList~T~~
        +QuerySingleAsync~T~(RequestContext) Task~T~
        +GetDataSetAsync(RequestContext) Task~DataSet~
        +GetDataTableAsync(RequestContext) Task~DataTable~
    }
    class IDbSession {
        <<interface>>
        +Id Guid
        +Transaction DbTransaction
        +Connection DbConnection
        +DataSource AbstractDataSource
        +SmartSqlConfig SmartSqlConfig
        +Opened event
        +TransactionBegan event
        +Committed event
        +Rollbacked event
        +Disposed event
        +Invoked event
        +SetDataSource(AbstractDataSource) void
        +Open() void
        +OpenAsync() Task
        +OpenAsync(CancellationToken) Task
        +Invoke~TResult~(RequestContext) ExecutionContext
        +Execute(RequestContext) int
        +ExecuteScalar~TResult~(RequestContext) TResult
        +Query~TResult~(RequestContext) IList~TResult~
        +QuerySingle~TResult~(RequestContext) TResult
        +GetDataSet(RequestContext) DataSet
        +GetDataTable(RequestContext) DataTable
    }
    class IDbSessionFactory {
        <<interface>>
        +Opened event
        +SmartSqlConfig SmartSqlConfig
        +Open() IDbSession
        +Open(String) IDbSession
        +Open(AbstractDataSource) IDbSession
    }
    class IDbSessionStore {
        <<interface>>
        +LocalSession IDbSession
        +Open() IDbSession
    }

    ISqlMapper --|> ITransaction
    ISqlMapper --|> IDisposable
    IDbSession --|> ITransaction
    IDbSession --|> IDisposable
    IDbSessionStore --|> IDisposable

ISqlMapper ​

数据访问的主要入口点。ISqlMapper 自动管理会话生命周期:在执行前打开会话,如果不存在外部会话则在执行后关闭。

同步方法 ​

方法返回类型描述
Execute(requestContext)int执行非查询命令(INSERT、UPDATE、DELETE)。返回受影响的行数。
ExecuteScalar<T>(requestContext)T执行命令并返回第一行第一列,转换为 T。
Query<T>(requestContext)IList<T>执行查询并返回类型 T 的实体列表。
QuerySingle<T>(requestContext)T执行查询并返回单个实体,未找到时返回默认值。
GetDataSet(requestContext)DataSet从查询结果返回非类型化的 DataSet。
GetDataTable(requestContext)DataTable从查询结果返回非类型化的 DataTable。

异步方法 ​

方法返回类型描述
ExecuteAsync(requestContext)Task<int>Execute 的异步版本。
ExecuteScalarAsync<TResult>(requestContext)Task<TResult>ExecuteScalar 的异步版本。
QueryAsync<TResult>(requestContext)Task<IList<TResult>>Query 的异步版本。
QuerySingleAsync<TResult>(requestContext)Task<TResult>QuerySingle 的异步版本。
GetDataSetAsync(requestContext)Task<DataSet>GetDataSet 的异步版本。
GetDataTableAsync(requestContext)Task<DataTable>GetDataTable 的异步版本。

事务方法(来自 ITransaction) ​

方法描述
BeginTransaction()打开会话并以默认隔离级别开始事务。如果本地会话已存在则抛出异常。
BeginTransaction(IsolationLevel)同上,但使用显式隔离级别。
CommitTransaction()提交当前事务并释放本地会话。
RollbackTransaction()回滚当前事务并释放本地会话。如果没有活跃的事务则记录警告。

属性 ​

属性类型描述
SmartSqlConfigSmartSqlConfig运行时配置实例。
SessionStoreIDbSessionStore管理线程本地会话的会话存储。

会话所有权模式 ​

mermaid
sequenceDiagram
autonumber
    participant App as Application
    participant Mapper as SqlMapper
    participant Store as SessionStore
    participant Session as DbSession

    App->>Mapper: Execute(requestContext)
    Mapper->>Store: LocalSession?
    Store-->>Mapper: null (no existing session)
    Mapper->>Store: Open()
    Store->>Session: Create & Open
    Session-->>Mapper: session
    Mapper->>Session: Execute(requestContext)
    Session-->>Mapper: result
    Mapper->>Store: Dispose() [close session]
    Mapper-->>App: result

当本地会话已存在时(例如在事务中),SqlMapper 会复用它而不是创建新的。原则是:谁打开会话谁负责释放(会话所有权)。

IDbSession ​

表示一个具有打开连接的单个数据库会话。提供对连接和事务的直接访问,以及所有数据访问方法。

事件 ​

事件委托类型触发时机
OpenedDbSessionEventHandler会话连接被打开时
TransactionBeganDbSessionEventHandler事务开始时
CommittedDbSessionEventHandler事务提交时
RollbackedDbSessionEventHandler事务回滚时
DisposedDbSessionEventHandler会话被释放时
InvokedDbSessionInvokedEventHandler任何命令完成时(携带 ExecutionContext)

属性 ​

属性类型描述
IdGuid唯一会话标识符
TransactionDbTransaction当前事务,或 null
ConnectionDbConnection底层数据库连接
DataSourceAbstractDataSource该会话连接的数据源
SmartSqlConfigSmartSqlConfig运行时配置

方法 ​

方法描述
SetDataSource(dataSource)覆盖此会话的数据源
Open() / OpenAsync()打开连接
Invoke<TResult>(requestContext)完整的中间件管道调用,返回 ExecutionContext

数据访问方法(Execute、ExecuteScalar、Query、QuerySingle、GetDataSet、GetDataTable)及其异步对应方法与 ISqlMapper 上的相同,但直接在会话上操作而不打开/关闭会话。

IDbSessionFactory ​

创建 IDbSession 实例。工厂在 Build() 期间由 SmartSqlConfig 内部构造。

方法描述
Open()使用默认连接字符串创建会话
Open(connectionString)使用显式连接字符串创建会话
Open(dataSource)使用特定的 AbstractDataSource 创建会话

事件 ​

事件描述
Opened当任何会话被打开时触发(用于绑定 InvokeSucceedListener)

IDbSessionStore ​

管理线程本地会话。当你调用 Open() 时,它会为当前线程创建或获取一个会话。

成员描述
LocalSession当前线程的会话,如果没有打开的会话则为 null
Open()为当前线程打开新会话
Dispose()释放并清除当前线程的会话

执行流程 ​

当 ISqlMapper 接收到调用时,它委托给 IDbSession,后者将请求通过中间件管道传递:

mermaid
flowchart LR
    subgraph flow["Execution Flow"]
        style flow fill:#161b22,stroke:#30363d,color:#e6edf3
        A["ISqlMapper.Query&lt;T&gt;()"] --> B["SessionStore.Open()"]
        B --> C["IDbSession.Invoke&lt;T&gt;()"]
        C --> D["Middleware Pipeline"]
        D --> E["Result returned"]
        E --> F["SessionStore.Dispose()"]
    end

ExecutionContext ​

管道中的每个中间件都接收一个 ExecutionContext,它在执行链中携带所有状态:

属性类型描述
TypeExecutionType操作类型(Execute、ExecuteScalar、Query、QuerySingle、GetDataTable、GetDataSet)
SmartSqlConfigSmartSqlConfig运行时配置
DbSessionIDbSession活跃的数据库会话
RequestAbstractRequestContext携带 SQL ID、参数和语句信息的请求
DataReaderWrapperDataReaderWrapper包装的 DataReader(由 CommandExecuterMiddleware 设置)
ResultResultContext接收数据的结果容器

交叉引用 ​

参考资料 ​

来源描述
src/SmartSql/ISqlMapper.csISqlMapper 接口定义
src/SmartSql/SqlMapper.csSqlMapper 实现
src/SmartSql/DbSession/IDbSession.csIDbSession 接口
src/SmartSql/DbSession/IDbSessionFactory.csIDbSessionFactory 接口
src/SmartSql/DbSession/IDbSessionStore.csIDbSessionStore 接口
src/SmartSql/DbSession/ITransaction.csITransaction 接口
src/SmartSql/ExecutionContext.csExecutionContext 类

基于 MIT 许可证发布。