Beego框架:原生SQL查詢
阿新 • • 發佈:2018-11-21
type SqlController struct {
beego.Controller
}
#Prepare
sql語句在傳送到伺服器時會做語法檢查和編譯,然而我們多次執行同一功能的sql語句,只是每次傳遞的引數不一致,所以我們可以通過Prepare進行預處理,這樣伺服器只需要,做一次語法檢查和編譯,極大的提高了執行sql語句的效率
func (this *SqlController) GetPrepare() { //1.建立orm orm := orm.NewOrm() p, err := orm.Raw("update user set name = ? where name = ?").Prepare() if err != nil { fmt.Println("err = ", err) this.Ctx.WriteString("查詢出錯!") return } res, err := p.Exec("吳俏祥", "123") if err != nil { fmt.Println("err = ", err) this.Ctx.WriteString("查詢出錯!") } n, err := res.RowsAffected() if err != nil { fmt.Println("err = ", err) this.Ctx.WriteString("查詢出錯!") } fmt.Println("n = ", n) res, err = p.Exec("尹成大魔王", "mike") if err != nil { fmt.Println("err = ", err) this.Ctx.WriteString("查詢出錯!") } n, err = res.RowsAffected() if err != nil { fmt.Println("err = ", err) this.Ctx.WriteString("查詢出錯!") } fmt.Println("n = ", n) res, err = p.Exec("兄弟連", "asde") if err != nil { fmt.Println("err = ", err) this.Ctx.WriteString("查詢出錯!") } n, err = res.RowsAffected() if err != nil { fmt.Println("err = ", err) this.Ctx.WriteString("查詢出錯!") } fmt.Println("n = ", n) this.Ctx.WriteString("成功!") }
#將將指定的欄位解析到map
func (this *SqlController) GetRawsToMap() { //1.建立map res := make(orm.Params) //2.建立orm orm := orm.NewOrm() //3.通過sql語句查詢 //將user表中name作為鍵,nickname作為值存入map中,其中鍵是string型別, // 如果型別不匹配beego會自動轉換為string型別 /*n, err := orm.Raw("select nickname, name from user"). RowsToMap(&res, "name", "nickname")*/ n, err := orm.Raw("select * from user").RowsToMap(&res, "age", "name") //4.處理錯誤 if err != nil { fmt.Println("err = ", err) this.Ctx.WriteString("查詢出錯!") return } //5.列印結果 fmt.Println("n = ", n) for key, value := range res { fmt.Println(key, " = ", value) } //6.給客戶端返回資料 this.Ctx.WriteString("查詢成功!") }
#QueryRows
func (this *SqlController) GetQueryRows(){ //1.建立user切片 var users []*models.User //2.建立orm orm := orm.NewOrm() //3.通過sql語句查詢 n, err := orm.Raw("select * from user where name = ?", "mike").QueryRows(&users) //4.處理錯誤 if err != nil { fmt.Println("err = ", err) this.Ctx.WriteString("查詢出錯!") return } //5.列印結果 fmt.Println("n = ", n) for _, user := range users { fmt.Println("user = ", user) } //6.給客戶端返回資料 this.Ctx.WriteString("查詢成功!") }
#QueryRow
func (this *SqlController) GetQueryRow() {
//1.建立user物件
//user := models.User{}
var user models.User
//2.建立orm
orm := orm.NewOrm()
//3.通過sql語句查詢
err := orm.Raw("select * from user where id = ?", 3).QueryRow(&user)
//4.處理錯誤
if err != nil {
fmt.Println("err = ", err)
this.Ctx.WriteString("查詢出錯!")
return
}
//5.列印結果
fmt.Println("user = ", user)
this.Ctx.WriteString("查詢成功!")
}
#Exec
func (this *SqlController) GetRawAndExec() {
//建立orm
orm := orm.NewOrm()
//raw函式中的引數是sql語句,形式引數通過?佔位,後面提供的實際引數和?的順序一一對應
//Exec()函式的功能是執行sql語句
res, err := orm.Raw("update user set name = ? where id = ?", "admin", 7).Exec()
if err != nil {
this.Ctx.WriteString("查詢失敗!")
return
}
n, err := res.RowsAffected()//查詢受影響的行數
if err != nil {
this.Ctx.WriteString("查詢失敗!")
return
}
this.Ctx.WriteString("mysql row affected nums = " + strconv.Itoa(int(n)))
}
學院Go語言視訊主頁
https://edu.csdn.net/lecturer/1928
清華團隊帶你實戰區塊鏈開發
掃碼獲取海量視訊及原始碼 QQ群:721929980