<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] > [github.com](https://github.com/tietang/dbx) ## 概述 **dbx = DB + Cache** 它是一個支持對 MySQL/SQLite/Cassandra/ScyllaDB 全表數據進行透明緩存的 Golang DB 庫,在內存足夠大的情況下,不再需要 Memcached, Redis 等緩存服務 它的實現原理為自動掃描表結構,確定主鍵和自增列,并且通過主鍵按照行來緩存數據,按照行透明管理 cache ## 安裝 `go get -u github.com/xiuno/dbx` ## 實例 ``` package main import ( "github.com/xiuno/dbx" "fmt" "os" "time" ) type User struct { Uid int64 `db:"uid"` Gid int64 `db:"gid"` Name string `db:"name"` CreateDate time.Time `db:"createDate"` } func main() { var err error var db *dbx.DB // db, err = dbx.Open("sqlite3", "./db1.db?cache=shared&mode=rwc&parseTime=true&charset=utf8") // sqlite3 db, err = dbx.Open("mysql", "root@tcp(localhost)/test?parseTime=true&charset=utf8") // mysql dbx.Check(err) defer db.Close() // db 輸出信息設置 db.Stdout = os.Stdout // 將 db 產生的信息(大部分為 sql 語句)輸出到標準輸出 db.Stderr = dbx.OpenFile("./db_error.log") // 將 db 產生的錯誤信息輸出到指定的文件 // db.Stdout = ioutil.Discard // 默認:將 db 的輸出信息重定向到"黑洞"(不輸出執行的 SQL 語句等信息) // 參數設置 db.SetMaxIdleConns(10) db.SetMaxOpenConns(10) // db.SetConnMaxLifetime(time.Second * 5) // 創建表 _, err = db.Exec(`DROP TABLE IF EXISTS user;`) _, err = db.Exec(`CREATE TABLE user( uid INT(11) PRIMARY KEY AUTO_INCREMENT, gid INT(11) NOT NULL DEFAULT '0', name TEXT DEFAULT '', createDate DATETIME DEFAULT CURRENT_TIMESTAMP ); `) dbx.Check(err) // 開啟緩存,可選項,一般只針對小表開啟緩存,超過 10w 行,不建議開啟! db.Bind("user2", &User{}, true) db.EnableCache(true) // 插入一條 u1 := &User{1, 1, "jack", time.Now()} _, err = db.Table("user").Insert(u1) dbx.Check(err) // 讀取一條 u2 := &User{} err = db.Table("user").WherePK(1).One(u2) dbx.Check(err) fmt.Printf("%+v\n", u2) // 讀取一條,判斷是否存在 err = db.Table("user").WherePK(1).One(u2) dbx.Check(err) if dbx.NoRows(err) { panic("not found.") } fmt.Printf("%+v\n", u2) // 更新一條 u2.Name = "jack.ma" _, err = db.Table("user").Update(u2) dbx.Check(err) // 刪除一條 _, err = db.Table("user").WherePK(1).Delete() dbx.Check(err) // Where 條件 + 更新 _, err = db.Table("user").WhereM(dbx.M{{"uid", 1}, {"gid", 1}}).UpdateM(dbx.M{{"Name", "jet.li"}}) dbx.Check(err) // 插入多條 for i := int64(0); i < 5; i++ { u := &User{ Uid: i, Gid: i, Name: fmt.Sprintf("name-%v", i), CreateDate: time.Now(), } _, err := db.Table("user").Insert(u) if err != nil { panic(err) } } // 獲取多條 userList := []*User{} err = db.Table("user").Where("uid>?", 1).All(&userList) dbx.Check(err) for _, u := range userList { fmt.Printf("%+v\n", u) } // 批量更新 _, err = db.Table("user").Where("uid>?", 3).UpdateM(dbx.M{{"gid", 10}}) dbx.Check(err) // 批量刪除 _, err = db.Table("user").Where("uid>?", 3).Delete() if err != nil { panic(err) } // 總數 n, err := db.Table("user").Where("uid>?", -1).Count() dbx.Check(err) fmt.Printf("count: %v\n", n) // 求和 n, err = db.Table("user").Where("uid>?", -1).Sum("uid") dbx.Check(err) fmt.Printf("sum(uid): %v\n", n) // 求最大值 n, err = db.Table("user").Where("uid>?", -1).Max("uid") dbx.Check(err) fmt.Printf("max(uid): %v\n", n) // 求最小值 n, err = db.Table("user").Where("uid>?", -1).Min("uid") dbx.Check(err) fmt.Printf("min(uid): %v\n", n) // 自定義復雜 SQL 獲取單條結果(原生) var uid int64 err = db.QueryRow("SELECT uid FROM user WHERE uid=?", 2).Scan(&uid) dbx.Check(err) fmt.Printf("uid: %v\n", uid) db.Table("user").LoadCache() // 自定義需要手動刷新緩存 // 自定義復雜 SQL 獲取多條(原生) var name string rows, err := db.Query("SELECT `uid`, `name` FROM `user` WHERE 1 ORDER BY uid DESC") dbx.Check(err) rows.Close() for rows.Next() { rows.Scan(&uid, &name) fmt.Printf("uid: %v, name: %v\n", uid, name) } db.Table("user").LoadCache() // 自定義需要手動刷新緩存 return } ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看