## 介紹
Orange 連接 mysql 使用了連接池,可以配置連接池相關參數,mysql 操作通過 gorm 包實現,對 mysql 增刪改操作簡單方便。
## Mysql 配置
```
[database]
initCap = 2 #數據庫連接池 初始化連接數
maxCap = 5 #數據庫連接池 最大連接數,超過次數后連接則實時生成實時關閉,類似php短鏈接
idleTimeout = 5 # 連接空閑釋放時間
debug = true # 是否開啟debug,可顯示mysql執行的sql語句
[database.mysql]
[database.mysql.default] #mysql配置,可以配置多個,默認名稱default
addr = "192.168.137.100:3306"
username = "root"
password = "123456"
dbname = "weixin"
```
## 獲取數據庫操作對象
```
//獲取一個mysql操作對象,參數是配置中對應的名稱
db, put, err := database.GetMysql("default")
//連接使用完成后記得將連接放回連接池,否則會造成連接池耗盡大量產生短鏈接等問題
defer database.PutConn(put)
```
## 數據庫操作
- 獲取到的操作對象即是 gorm 對象,可以直接按照 gorm 包的使用方法進行操作;
- gorm 包地址 [http://gorm.book.jasperxu.com/database.html#dbc](http://gorm.book.jasperxu.com/database.html#dbc)
### 創建
```
db, put, err := database.GetMysql("default")
defer database.PutConn(put)
user := User{Name: "Jinzhu", Age: 18, Birthday: time.Now()}
db.NewRecord(user) // => 主鍵為空返回`true`
db.Create(&user)
```
### 查詢
~~~
db, put, err := database.GetMysql("default")
defer database.PutConn(put)
// 獲取第一個匹配記錄
db.Table("users").Where("name = ?", "jinzhu").First(&user)
//// SELECT * FROM users WHERE name = 'jinzhu' limit 1;
// 獲取所有匹配記錄
db.Table("users").Where("name = ?", "jinzhu").Find(&users)
//// SELECT * FROM users WHERE name = 'jinzhu';
~~~
### 更新
~~~
db, put, err := database.GetMysql("default")
defer database.PutConn(put)
// 更新單個屬性(如果更改)
db.Table("users").Update("name", "hello")
//// UPDATE users SET name='hello', updated_at='2013-11-17 21:34:10' WHERE id=111;
// 使用組合條件更新單個屬性
db.Table("users").Where("active = ?", true).Update("name", "hello")
//// UPDATE users SET name='hello', updated_at='2013-11-17 21:34:10' WHERE id=111 AND active=true;
// 使用`map`更新多個屬性,只會更新這些更改的字段
db.Table("users").Updates(map[string]interface{}{"name": "hello", "age": 18, "actived": false})
//// UPDATE users SET name='hello', age=18, actived=false, updated_at='2013-11-17 21:34:10' WHERE id=111;
// 使用`struct`更新多個屬性,只會更新這些更改的和非空白字段
db.Table("users").Updates(User{Name: "hello", Age: 18})
//// UPDATE users SET name='hello', age=18, updated_at = '2013-11-17 21:34:10' WHERE id = 111;
// 警告:當使用struct更新時,FORM將僅更新具有非空值的字段
// 對于下面的更新,什么都不會更新為"",0,false是其類型的空白值
db.Table("users").Updates(User{Name: "", Age: 0, Actived: false})
~~~
### 刪除
~~~
db, put, err := database.GetMysql("default")
defer database.PutConn(put)
db.Table("users").Where("email LIKE ?", "%jinzhu%").Delete(Email{})
//// DELETE from emails where email LIKE "%jinhu%";
db.Table("users").Delete(Email{}, "email LIKE ?", "%jinzhu%")
//// DELETE from emails where email LIKE "%jinhu%";
~~~