## 用法示例
### 簡單配置
```go
// DB Config.(Recommend to use configuration file to import)
var DbConfig = &gorose.DbConfigSingle {
Driver: "mysql", // 驅動: mysql/sqlite/oracle/mssql/postgres
EnableQueryLog: false, // 是否開啟sql日志
SetMaxOpenConns: 0, // (連接池)最大打開的連接數,默認值為0表示不限制
SetMaxIdleConns: 0, // (連接池)閑置的連接數
Prefix: "", // 表前綴
Dsn: "root:root@tcp(localhost:3306)/test?charset=utf8", // 數據庫鏈接
}
```
### 導入對應的驅動, 如 MySQL驅動:
```go
_ "github.com/gohouse/gorose/driver/mysql"
// or
import _ "github.com/go-sql-driver/mysql"
```
### 鏈接數據庫
```go
connection, err := gorose.Open(DbConfig)
```
這里使用golang原生配置作為示例, 同時支持配置文件, 示例:
```go
// fileOrDriverType 文件類型/驅動類型,如: json/mysql
// filePathOrDsn 文件路徑,如: (/path/to/fileName.json)/(dsn...)
connection, err := gorose.Open(fileOrDriverType, filePathOrDsn string)
```
我們看下 Open() 的 api:
```
func Open(args ...interface{}) (*Connection, error)
```
可以接收可變參數, 一個或者兩個參數.
一個時只能是原生golang的類型 `type DbConfigSingle`(單一配置) 或 `type DbConfigCluster`(讀寫分離配置)
```go
gorose.Open(gorose.DbConfigSingle{...})
gorose.Open(gorose.DbConfigCluster{...})
```
兩個參數時: 則是文件解析器, 或者直接傳入dsn,如:
```go
gorose.Open("mysql", "root:root@tcp(localhost:3306)/test?charset=utf8")
gorose.Open("json", "/path/to/fileName.json")
```
-----
具體json文件示例, 請參考第2節 - 配置
理論上可以接收任何文件類型的配置, 只需要添加對應文件類型的解析器即可.
幸運的是, 我們可以輕松擴展文件解析器, 具體擴展方法, 我們可以查看第9節, 擴展開發.
### 使用鏈接對象做查詢操作示例
1. 鏈接數據庫
```
conn,err := gorose.Open("mysql", "root:root@tcp(localhost:3306)/test?charset=utf8")
if err!=nil {
log.Fatal(err)
return
}
```
2. 直接查詢
```
res,err := conn.Query("select * from user")
```
或者 使用會話內查詢
```
res,err := conn.NewSession().Query("select * from user")
```
3. 會話內, 復用條件查詢
```
var session *gorose.Session
session = gorose.NewSession()
session.table("user")
session.Where("id",">",1)
session.Where("age","<", 20)
res,err := session.Order("age asc, id desc").Limit(10).Get()
```
4. 特別提示
注意上述的會話操作 `NewSession()`, 這里的 `NewSession()`是新建一個隔離的會話, 會話內的參數和上下文數據共享, 方便在不同地方來構建一個完整的orm操作
gorose的隔離原理是, 新建連接池, 保持連接池持久化, 每一次操作, 都是從連接池申請一個鏈接.
所以, 我們能夠全局復用的是 `gorose.Connection` 連接池; 一個會話周期內能夠復用的是 `gorose.Session`
我們使用的時候要注意這里的差別, 避免上下文和參數感染