Introduction
上一篇已经利用了 Docker & third party package 初始化 Database
接下来就要改写程式从 Database 读写资料
Sample Code
完成后的资料夹阶层
CreateLinks
internal/users/users.go
新增程式码
package userstype User struct {ID string `json:"id"`Username string `json:"name"`Password string `json:"password"`}
internal/links/links.go
新增程式码,这段要注意 import 即可
这段主要是在使用 Database 插入资料后返回插入后的 ID
package linksimport (mig "Go-GraphQL/internal/pkg/db/migrations/mysql""Go-GraphQL/internal/users""log")// #1type Link struct {ID stringTitle stringAddress stringUser *users.User}// #2func (link Link) Save() int64 {//#3stmt, err := mig.Db.Prepare("INSERT INTO Links(Title,Address) VALUES(?,?)")if err != nil {log.Fatal(err)}//#4res, err := stmt.Exec(link.Title, link.Address)if err != nil {log.Fatal(err)}//#5id, err := res.LastInsertId()if err != nil {log.Fatal("Error:", err.Error())}log.Print("Row inserted!")return id}
schema.resolvers.go
改写 CreateLink function
func (r *mutationResolver) CreateLink(ctx context.Context, input model.NewLink) (*model.Link, error) {var link links.Linklink.Title = input.Titlelink.Address = input.AddresslinkID := link.Save()return &model.Link{ID: strconv.FormatInt(linkID, 10), Title:link.Title, Address:link.Address}, nil}
$ go run server.go
执行后到 http://localhost:8080/ 输入
mutation create{ createLink(input: {title: "something", address: "somewhere"}){ title, address, id, }}
接着会得到结果
{ "data": { "createLink": { "title": "something", "address": "somewhere", "id": "1" } }}
links Query
前面已经完成 CreateLinks 了,接下来要实现查询internal/links/links.go
新增程式码
func GetAll() []Link {stmt, err := database.Db.Prepare("select id, title, address from Links")if err != nil {log.Fatal(err)}defer stmt.Close()rows, err := stmt.Query()if err != nil {log.Fatal(err)}defer rows.Close()var links []Linkfor rows.Next() {var link Linkerr := rows.Scan(&link.ID, &link.Title, &link.Address)if err != nil{log.Fatal(err)}links = append(links, link)}if err = rows.Err(); err != nil {log.Fatal(err)}return links}
schema.resolvers.go
改写 Links funciton
func (r *queryResolver) Links(ctx context.Context) ([]*model.Link, error) {var resultLinks []*model.Linkvar dbLinks []links.LinkdbLinks = links.GetAll()for _, link := range dbLinks{resultLinks = append(resultLinks, &model.Link{ID:link.ID, Title:link.Title, Address:link.Address})}return resultLinks, nil}
$ go run server.go
重新执行后到 http://localhost:8080/ 输入
query { links { title address id }}
得到结果
{ "data": { "links": [ { "title": "something", "address": "somewhere", "id": "1" } ] }}