Skip to content

Commit 3912cb0

Browse files
committed
fix README
1 parent 1bcc336 commit 3912cb0

6 files changed

Lines changed: 232 additions & 183 deletions

File tree

README.md

Lines changed: 85 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ https://github.com/jmoiron/sqlx
99
# Example:
1010
More example see the [example](./example) directory.
1111

12-
## Using a manual cache
12+
## Directing use
1313
``` text
14-
package db
14+
package main
1515
1616
import (
1717
"github.com/gwaylib/conf"
@@ -20,18 +20,20 @@ import (
2020
_ "github.com/go-sql-driver/mysql"
2121
)
2222
23-
func init() {
24-
db, err := qsql.Open(qsql.DRV_NAME_MYSQL, dsn)
23+
func main() {
24+
mdb, err := qsql.Open(qsql.DRV_NAME_MYSQL, dsn)
2525
if err != nil{
2626
panic(err)
2727
}
28-
qsql.RegCache("main", db)
28+
arr := make([]string, 3)
29+
if err := mdb.QueryElems(&arr, "SELECT id, created_at, updated_at WHERE id=?", 1); err != nil{
30+
panic(err)
31+
}
2932
}
3033
```
3134

32-
33-
## Using etc cache
34-
Assume that the configuration file path is: './etc/db.cfg'
35+
## Using ini cache
36+
the configuration file path like : './etc/db.cfg'
3537

3638
The etc file content
3739
```
@@ -49,7 +51,7 @@ dsn: username:passwd@tcp(127.0.0.1:3306)/log?timeout=30s&strict=true&loc=Local&p
4951
max_life_time:7200
5052
```
5153

52-
Make a package for connection cache with ini
54+
Make a package for cache.go with ini
5355
``` text
5456
package db
5557
@@ -61,6 +63,13 @@ import (
6163
6264
func init() {
6365
qsql.RegCacheWithIni(conf.RootDir() + "/etc/db.cfg")
66+
67+
// Register cache without ini
68+
// db, err := qsql.Open(qsql.DRV_NAME_MYSQL, dsn)
69+
// if err != nil{
70+
// panic(err)
71+
// }
72+
// qsql.RegCache("main", db)
6473
}
6574
6675
func GetCache(section string) *qsql.DB {
@@ -76,16 +85,33 @@ func CloseCache() {
7685
}
7786
```
7887

79-
Call a cache
88+
Using the cache package
8089
``` text
81-
mdb := qsql.GetCache("main")
90+
package main
91+
92+
import (
93+
"github.com/gwaylib/conf"
94+
"github.com/gwaylib/errors"
95+
_ "github.com/go-sql-driver/mysql"
96+
97+
"model/db"
98+
)
99+
100+
func main() {
101+
mdb := db.GetCache("main")
102+
arr := make([]string, 3)
103+
if err := mdb.QueryElems(&arr, "SELECT id, created_at, updated_at WHERE id=?", 1); err != nil{
104+
panic(err)
105+
}
106+
}
82107
```
83108

84-
## Call standard sql
109+
## Standard sql
110+
*qsql.DB has implements *sql.DB, so you can call qsql.DB like *sql.DB
85111
``` text
86-
mdb := qsql.GetCache("main")
112+
mdb := db.GetCache("main")
87113
88-
row := mdb.QueryRow("SELECT * ...")
114+
row := mdb.QueryRow("SELECT * ...") //
89115
// ...
90116
91117
rows, err := mdb.Query("SELECT * ...")
@@ -95,7 +121,8 @@ result, err := mdb.Exec("UPDATE ...")
95121
// ...
96122
```
97123

98-
## Insert a struct to db(using reflect)
124+
## Insert struct(s) into table
125+
the struct tag format like `db:"field"`, reference to: http://github.com/jmoiron/sqlx
99126
``` text
100127
type User struct{
101128
Id int64 `db:"id,auto_increment"` // flag "autoincrement", "auto_increment" are supported .
@@ -104,7 +131,7 @@ type User struct{
104131
}
105132
106133
func main() {
107-
mdb := qsql.GetCache("main")
134+
mdb := db.GetCache("main")
108135
109136
var u = &User{
110137
Name:"testing",
@@ -119,8 +146,13 @@ func main() {
119146
120147
```
121148

122-
## Quick query way
149+
## Quick sql way
123150
``` text
151+
package main
152+
153+
import (
154+
gErrors "github.com/gwaylib/errors"
155+
)
124156
125157
// Way 1: query result to a struct.
126158
type User struct{
@@ -129,66 +161,17 @@ type User struct{
129161
}
130162
131163
func main() {
132-
mdb := qsql.GetCache("main")
164+
mdb := db.GetCache("main")
133165
var u = *User{}
134-
if err := mdb.QueryStruct(u, "SELECT id, name FROM a WHERE id = ?", id)
135-
if err != nil{
136-
// sql.ErrNoRows has been replace by errors.ErrNoData
137-
if errors.ErrNoData.Equal(err) {
166+
if err := mdb.QueryStruct(u, "SELECT id, name FROM a WHERE id = ?", id); err != nil {
167+
// sql.ErrNoRows has been replace by gErrors.ErrNoData
168+
if gErrors.ErrNoData.Equal(err) {
138169
// no data
139170
}
140171
// ...
141172
}
142173
// ..
143-
144-
// Way 2: query row to struct
145-
mdb := qsql.GetCache("main")
146-
var u = *User{}
147-
if err := mdb.ScanStruct(mdb.QueryRow("SELECT id, name FROM a WHERE id = ?", id), u); err != nil {
148-
// sql.ErrNoRows has been replace by errors.ErrNoData
149-
if errors.ErrNoData.Equal(err) {
150-
// no data
151-
}
152-
// ...
153-
}
154-
155-
// Way 3: query result to structs
156-
mdb := qsql.GetCache("main")
157-
var u = []*User{}
158-
if err := mdb.QueryStructs(&u, "SELECT id, name FROM a WHERE id = ?", id); err != nil {
159-
// ...
160-
}
161-
if len(u) == 0{
162-
// data not found
163-
// ...
164-
}
165-
// ..
166-
167-
// Way 4: query rows to structs
168-
mdb := qsql.GetCache("main")
169-
rows, err := mdb.Query("SELECT id, name FROM a WHERE id = ?", id)
170-
if err != nil {
171-
// ...
172-
}
173-
defer qsql.Close(rows)
174-
var u = []*User{}
175-
if err := mdb.ScanStructs(rows, &u); err != nil{
176-
// ...
177-
}
178-
if len(u) == 0{
179-
// data not found
180-
// ...
181-
}
182174
183-
}
184-
185-
```
186-
187-
## Query an element which is implemented sql.Scanner
188-
189-
```text
190-
func main() {
191-
mdb := qsql.GetCache("main")
192175
count := 0
193176
if err := mdb.QueryElem(&count, "SELECT count(*) FROM a WHERE id = ?", id); err != nil{
194177
// sql.ErrNoRows has been replace by errors.ErrNoData
@@ -199,39 +182,6 @@ func main() {
199182
}
200183
}
201184
```
202-
## Extend the where in stmt
203-
```text
204-
// Example for the first input:
205-
func main() {
206-
mdb := qsql.GetCache("main")
207-
args:=[]int{1,2,3}
208-
mdb.Query(fmt.Sprintf("select * from table_name where in (%s)", mdb.StmtWhereIn(0, len(args))), qsql.StmtSliceArgs(args)...)
209-
// Or
210-
mdb.Query(fmt.Sprintf("select * from table_name where in (%s)", mdb.StmtWhereIn(0, len(args), qsql.DRV_NAME_MYSQL), qsql.StmtSliceArgs(args)...)
211-
212-
// Example for the second input:
213-
mdb.Query(fmt.Sprintf("select * from table_name where id=? in (%s)", qsql.StmtWhereIn(1,len(args)), qsql.StmtSliceArgs(id, args)...)
214-
}
215-
```
216-
217-
## Mass query.
218-
```text
219-
func main() {
220-
mdb := qsql.GetCache("main")
221-
qSql = &qsql.Page{
222-
CountSql:`SELECT count(1) FROM user_info WHERE create_time >= ? AND create_time <= ?`,
223-
DataSql:`SELECT mobile, balance FROM user_info WHERE create_time >= ? AND create_time <= ?`
224-
}
225-
count, titles, result, err := qSql.QueryPageArray(db, true, condition, 0, 10)
226-
// ...
227-
// Or
228-
count, titles, result, err := qSql.QueryPageMap(db, true, condtion, 0, 10)
229-
// ...
230-
if err != nil {
231-
// ...
232-
}
233-
}
234-
```
235185

236186
## Make a lazy tx commit
237187
``` text
@@ -248,8 +198,39 @@ func main() {
248198
}
249199
return nil
250200
}
251-
if err := qsql.Commit(tx, fn); err != nil {
201+
if err := mdb.Commit(tx, fn); err != nil {
252202
// ...
253203
}
254204
}
255205
```
206+
207+
## SqlBuilder
208+
```text
209+
func main() {
210+
mdb := qsql.GetCache("main")
211+
212+
id := 0
213+
inIds := []interface{}{1,2}
214+
215+
bd := qsql.NewSqlBuilder(mdb.DriverName())
216+
bd.Select("id", "created_at")
217+
bd.Add("FROM")
218+
bd.AddTab("tmp")
219+
bd.Add("WHERE")
220+
bd.AddTab("created_at BETWEEN ? AND ?", time.Now().AddDate(-1,0,0), time.Now())
221+
bd.AddTabIf(len(inIds)>0, "AND id IN ("+bd.AddIn(inIds)+")", id)
222+
titles, data, err := mdb.QueryPageArr(bd.String(), bd.Args()...)
223+
if err != nil {
224+
panic(err)
225+
}
226+
227+
updateBD := qsql.NewSqlBuilder(mdb.DriverName())
228+
updateBD.Add("UPDATE tmp SET")
229+
updateBD.AddTab("(updated_at=?,name=?)", time.Now())
230+
updateDB.Add("WHERE")
231+
updateDB.AddTab("id=?", id)
232+
if _, err := mdb.Exec(updateDB.String(), updateDB.Args()...); err != nil{
233+
panic(err)
234+
}
235+
}
236+
```

0 commit comments

Comments
 (0)