## 用法示例
### 简单配置
```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`
我们使用的时候要注意这里的差别, 避免上下文和参数感染