go——beego的資料庫增刪改查

zhengyeye發表於2016-07-06

      一直都不理解使用go語言的時候,為什麼還要自己去裝beego,以為使用go便可以解決所有的問題,結果在朋友的點撥下,才意識到:

      go與beego的關係就好比是nodejs與thinkjs的關係,因此也就不怎麼存在疑問為什麼還要繼續安裝beego來完成專案執行了,beego其實就是一個快速開發Go應用的http框架,go 語言方面技術大牛,可以用來快速開發API、Web、後端服務等各種應用,是一個RESTFul的框架。再次附上beego的官網(http://beego.me/docs/intro/)

       接著開始我們的資料庫“增刪改查”操作吧!

1.golang本身沒有提供連線MySQL的驅動,但是定義了標準介面供第三方開發驅動。這裡連線mysql可以使用第三方庫,第三方庫推薦使用https://github.com/Go-SQL-Driver/MySQL這個驅動,更新維護都比較好;先要下載驅動,在cmd中執行

go get github.com/go-sql-driver/mysql

 

2.建立測試資料庫(我們一直在用的Navicat,就用它做例子)

CREATE DATABASE golang; 
CREATE TABLE IF NOT EXISTS `golang`.`user` (
 `userid` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '使用者編號',
 `username` VARCHAR(45) NOT NULL COMMENT '使用者名稱稱',
 `userage` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0 COMMENT '使用者年齡',
 `usersex` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0 COMMENT '使用者性別',
 PRIMARY KEY (`userid`))
 ENGINE = InnoDB
 AUTO_INCREMENT = 1
 DEFAULT CHARACTER SET = utf8
 COLLATE = utf8_general_ci
 COMMENT = '使用者表'

 

3.連線資料庫:資料庫連線使用datebase/sql Open函式進行連線

db, err := sql.Open("mysql", "user:password@tcp(localhost:5555)/dbname?charset=utf8")
其中連線引數可以有如下幾種形式:
user@unix(/path/to/socket)/dbname?charset=utf8
user:password@tcp(localhost:5555)/dbname?charset=utf8
user:password@/dbname
user:password@tcp([de:ad:be:ef::ca:fe]:80)/dbname

一般,大家都使用第二種。

 

4.在liteIDE中寫程式,完整程式碼如下:

package main

import (
    _ "crud/routers"
    "database/sql"
    "fmt"

    _ "github.com/go-sql-driver/mysql"
)

func main() {
    query()
}

//增加資料
func insert() {
    db, err := sql.Open("mysql", "root:root@/golang?charset=utf8")
    checkErr(err)

    stmt, err := db.Prepare(`INSERT user (userid,username,userage,usersex) values (?,?,?,?)`)
    checkErr(err)
    res, err := stmt.Exec(1, "Mary", 20, 1)
    checkErr(err)
    id, err := res.LastInsertId()
    checkErr(err)
    fmt.Println(id)
}

//刪除資料
func remove() {
    db, err := sql.Open("mysql", "root:root@/golang?charset=utf8")
    checkErr(err)

    stmt, err := db.Prepare(`DELETE FROM user WHERE userid=?`)
    checkErr(err)
    res, err := stmt.Exec(1)
    checkErr(err)
    num, err := res.RowsAffected()
    checkErr(err)
    fmt.Println(num)
}

//更新資料
func update() {
    db, err := sql.Open("mysql", "root:root@/golang?charset=utf8")
    checkErr(err)

    stmt, err := db.Prepare(`UPDATE user SET userage=?,usersex=? WHERE userid=?`)
    checkErr(err)
    res, err := stmt.Exec(21, 2, 2)
    checkErr(err)
    num, err := res.RowsAffected()
    checkErr(err)
    fmt.Println(num)
}

//查詢資料
func query() {
    db, err := sql.Open("mysql", "root:root@/golang?charset=utf8")
    checkErr(err)

    rows, err := db.Query("SELECT * FROM user")
    checkErr(err)

    //    //普通demo
    for rows.Next() {
        var userid int
        var username string
        var userage int
        var usersex int

        rows.Columns()
        err = rows.Scan(&userid, &username, &userage, &usersex)
        checkErr(err)

        fmt.Println(userid)
        fmt.Println(username)
        fmt.Println(userage)
        fmt.Println(usersex)
    }
}
func checkErr(err error) {
    if err != nil {
        panic(err)
    }

}

 

於是就在這個表裡進行增刪改查了……

 

 

我並沒有使用beego中的orm框架,是因為剛開始在看的時候忽略了orm。。。。。。。有點小疏忽,,,明天再研究。

相關文章