ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 用法示例 ### 简单配置 ```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` 我们使用的时候要注意这里的差别, 避免上下文和参数感染