之前咱們學習過原生的Go連接MYSQL的方法,使用Go自帶的"database/sql"
數據庫連接api,"github.com/go-sql-driver/mysql"
MYSQL驅動,通過比較原生的寫法去寫sql和處理事務。目前開源界也有很多封裝好的orm操作框架,幫我們簡省一些重復的操作,提高代碼可讀性。gorm
就是這樣的一款作品,我們來學習一下gorm的操作流程。
安裝#
go get -u github.com/jinzhu/gorm
數據庫連接#
要連接到數據庫首先要導入驅動程序。例如
import _ "github.com/go-sql-driver/mysql"
為了方便記住導入路徑,GORM包裝了一些驅動。
import _ "github.com/jinzhu/gorm/dialects/mysql" // import _ "github.com/jinzhu/gorm/dialects/postgres" // import _ "github.com/jinzhu/gorm/dialects/sqlite" // import _ "github.com/jinzhu/gorm/dialects/mssql"
所以包名可以改為如上:
import ( "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/mysql" ) func main() { db, err := gorm.Open("mysql", "user:password@tcp(IP:port)/dbname?charset=utf8&parseTime=True&loc=Local") db.DB().SetMaxIdleConns(10) db.DB().SetMaxOpenConns(100) defer db.Close() }
注:為了處理time.Time
,你需要包括parseTime
作為參數。
數據模型定義#
表名,列名如何對應結構體
在Gorm中,表名是結構體名的復數形式,列名是字段名的蛇形小寫。
即,如果有一個user表,那么如果你定義的結構體名為:User,gorm會默認表名為users而不是user。
例如有如下表結構定義:
CREATE TABLE `areas` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵id', `area_id` int(11) NOT NULL COMMENT '區縣id', `area_name` varchar(45) NOT NULL COMMENT '區縣名', `city_id` int(11) NOT NULL COMMENT '城市id', `city_name` varchar(45) NOT NULL COMMENT '城市名稱', `province_id` int(11) NOT NULL COMMENT '省份id', `province_name` varchar(45) NOT NULL COMMENT '省份名稱', `area_status` tinyint(3) NOT NULL DEFAULT '1' COMMENT '該條區域信息是否可用 : 1:可用 2:不可用', `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間', `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT