gorm构建在标准库database/sql上,所以需要先对database/sql有所了解。
以下内容大部分取自go语言标准库https://studygolang.com/pkgdoc
DB
标准库文档的解释如下:
DB是一个数据库(操作)句柄,代表一个具有零到多个底层连接的连接池。它可以安全的被多个go程同时使用。
sql包会自动创建和释放连接;它也会维护一个闲置连接的连接池。如果数据库具有单连接状态的概念,该状态只有在事务中被观察时才可信。一旦调用了BD.Begin,返回的Tx会绑定到单个连接。当调用事务Tx的Commit或Rollback后,该事务使用的连接会归还到DB的闲置连接池中。连接池的大小可以用SetMaxIdleConns方法控制。
简单来说,标准库的DB是一个协程安全的连接池,调用BD.Begin会返回一个开启了事务的链接,事务结束后归还,连接池空闲大小和最大链接数可配置。
gorm的DB不负责维护连接池,直接用标准库的DB作为连接池
下面是DB的几个重要的方法。
Open
Open打开一个dirverName指定的数据库,dataSourceName指定数据源,一般包至少括数据库文件名和(可能的)连接信息。
Close
Close关闭数据库,释放任何打开的资源。一般不会关闭DB,因为DB句柄通常被多个go程共享,并长期活跃。
SetMaxOpenConns
设置与数据库建立连接的最大数目。
SetMaxIdleConns
设置连接池中的最大闲置连接数。
Exec
执行一次命令(包括查询、删除、更新、插入等),不返回任何执行结果。参数args表示query中的占位参数。
Query
执行一次查询,返回多行结果(即Rows),一般用于执行select命令。参数args表示query中的占位参数。
QueryRow
执行一次查询,并期望返回最多一行结果(即Row)。QueryRow总是返回非nil的值,直到返回值的Scan方法被调用时,才会返回被延迟的错误。(如:未找到结果)
Prepare
创建一个准备好的状态用于之后的查询和命令。返回值可以同时执行多个查询和命令。
Begin
开始一个事务。隔离水平由数据库驱动决定。