最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

golang?beego框架路由ORM增刪改查完整案例

 更新時(shí)間:2022年04月18日 09:11:26   作者:Jeff的技術(shù)棧  
這篇文章主要為大家介紹了golang?beego框架路由ORM增刪改查完整案例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪

程序運(yùn)行前加載

1.導(dǎo)包前面加下劃線,運(yùn)行前加載

2.把要加載的寫在init函數(shù)里面

路由設(shè)置

路由的作用:根據(jù)不同的請(qǐng)求指定不同的控制器

路由函數(shù):

beego.Router("/path",&controller.MainController{})

函數(shù)參數(shù):

先分析一下Url地址由哪幾部分組成?

http://192.168.110.71:8080/index
http://地址:端口/資源路徑

第一個(gè)參數(shù):資源路徑,也就是 / 后面的內(nèi)容

第二個(gè)參數(shù):需要指定的控制器指針

了解上面的內(nèi)容之后我們來(lái)看幾個(gè)簡(jiǎn)單的例子:

beego.Router("/", &controllers.MainController{}) 
beego.Router("/index", &controllers.IndexController{}) 
beego.Router("/login", &controllers.LoginController{})

高級(jí)路由設(shè)置

一般在開發(fā)過(guò)程中,我們基本不使用beego提供的默認(rèn)請(qǐng)求訪問(wèn)方法,都是自定義相應(yīng)的方法。那我們來(lái)看一下如何來(lái)自定義請(qǐng)求方法。

自定義請(qǐng)求方法需要用到Router的第三個(gè)參數(shù)。這個(gè)參數(shù)是用來(lái)給不同的請(qǐng)求指定不同的方法。具體有如下幾種情況。

一個(gè)請(qǐng)求訪問(wèn)一個(gè)方法(也是最常用的),請(qǐng)求和方法之間用 : 隔開,不同的請(qǐng)求用 ; 隔開:

beego.Router("/simple",&SimpleController{},"get:GetFunc;post:PostFunc")

可以多個(gè)請(qǐng)求,訪問(wèn)一個(gè)方法 ,請(qǐng)求之間用 , 隔開,請(qǐng)求與方法之間用 : 隔開:

beego.Router("/api",&RestController{},"get,post:ApiFunc")

所有的請(qǐng)求訪問(wèn)同一個(gè)方法,用 * 號(hào)代表所有的請(qǐng)求,和方法之間用 : 隔開:

beego.Router("/api/list",&RestController{},"*:ListFood")

如果同時(shí)存在 * 和對(duì)應(yīng)的 HTTP請(qǐng)求,那么優(yōu)先執(zhí)行 HTTP請(qǐng)求所對(duì)應(yīng)的方法,例如同時(shí)注冊(cè)了如下所示的路由:

beego.Router("/simple",&SimpleController{},"*:AllFunc;post:PostFunc")

那么當(dāng)遇到 Post 請(qǐng)求的時(shí)候,執(zhí)行 PostFunc 而不是 AllFunc。

如果用了自定義方法之后,默認(rèn)請(qǐng)求將不能訪問(wèn)。

beego-ORM初始化

ORM-----對(duì)象關(guān)系映射

安裝ORM+導(dǎo)包

go get github.com/astaxie/beego/orm
import "github.com/astaxie/beego/orm"

定義結(jié)構(gòu)體

相當(dāng)于django中的model類

type User struct{ 
  Id int 
  Name string 
  PassWord string 
}

beego支持的數(shù)據(jù)庫(kù)

mysql,sqlite3,postgersql

驅(qū)動(dòng)如下:

import (
    _ "github.com/go-sql-driver/mysql"
    _ "github.com/lib/pq"
    _ "github.com/mattn/go-sqlite3"
)

連接數(shù)據(jù)庫(kù)

用RegisterDataBase()函數(shù),第一個(gè)參數(shù)為數(shù)據(jù)庫(kù)別名,也可以理解為數(shù)據(jù)庫(kù)的key值,項(xiàng)目中必須有且只能有一個(gè)別名為 default 的連接,第二個(gè)參數(shù)是數(shù)據(jù)庫(kù)驅(qū)動(dòng),這里我們用的MySQL數(shù)據(jù)庫(kù),所以以MySQL驅(qū)動(dòng)為例,第三個(gè)參數(shù)是連接字符串,和傳統(tǒng)操作數(shù)據(jù)庫(kù)連接字符串一樣

格式為:用戶名:密碼@tcp(ip:port)/數(shù)據(jù)庫(kù)名稱?編碼方式

代碼如下:

orm.RegisterDataBase("default","mysql","root:@tcp(127.0.0.1:3306)/class1? charset=utf8")

注意:ORM只能操作表,不能操作數(shù)據(jù)庫(kù),所以我們連接的數(shù)據(jù)庫(kù)要提前在MySQL終端創(chuàng)建好。

注冊(cè)數(shù)據(jù)庫(kù)表

用orm.RegisterModel()函數(shù),參數(shù)是結(jié)構(gòu)體對(duì)象,如果有多個(gè)表,可以用 , 隔開,多new幾個(gè)對(duì)象:

orm.RegisterModel(new(User))

生成表

用orm.RunSyncdb()函數(shù),這個(gè)函數(shù)有三個(gè)參數(shù),

第一個(gè)參數(shù)是數(shù)據(jù)庫(kù)的別名和連接數(shù)據(jù)庫(kù)的第一個(gè)參數(shù)相對(duì)應(yīng)。

第二個(gè)參數(shù)是是否強(qiáng)制更新,一般我們寫的都是false,如果寫true的話,每次項(xiàng)目編譯一次數(shù)據(jù)庫(kù)就會(huì)被清空一次,fasle的話會(huì)在數(shù)據(jù)庫(kù)發(fā)生重大改變(比如添加字段)的時(shí)候更新數(shù)據(jù)庫(kù)。

第三個(gè)參數(shù)是用來(lái)說(shuō),生成表過(guò)程是否可見,如果我們寫成課件,那么生成表的時(shí)候執(zhí)行的SQL語(yǔ)句就

會(huì)在終端看到。反之看不見。代碼如下:

orm.RunSyncdb("default",false,true)

完整案例

import "github.com/astaxie/beego/orm"
type User struct { 
	Id int 
	Name string 
	Passwd string 
}


func init(){
	//1.連接數(shù)據(jù)庫(kù)
 orm.RegisterDataBase("default","mysql","root:123456@tcp(127.0.0.1:3306)/test?charset=utf8")
	//2.注冊(cè)表
	orm.RegisterModel(new(User))
	// 3.生成表
	// 1.數(shù)據(jù)庫(kù)別名
	// 2.是否強(qiáng)制更新
	// 3.創(chuàng)建表過(guò)程是否可見 
	orm.RunSyncdb("default",false,true) 
}

因?yàn)檫@里我們把ORM初始化的代碼放到了 models包的init()函數(shù)里面,所以如果我們想讓他執(zhí)行的話就需要在main.go里面加入這么一句代碼:

import _ "classOne/models"

ORM增刪改查

在執(zhí)行ORM的操作之前需要先把ORM包導(dǎo)入,但是GoLand會(huì)自動(dòng)幫我們導(dǎo)包,也可以手動(dòng)導(dǎo)包

go get github.com/astaxie/beego/orm
import "github.com/astaxie/beego/orm"

插入

先獲取一個(gè)ORM對(duì)象,用orm.NewOrm()即可獲得

o := orm.NewOrm()
var user User  //定義一個(gè)要插入數(shù)據(jù)庫(kù)的結(jié)構(gòu)體對(duì)象
user.Name = "itcast" //給定義的對(duì)象賦值
user.Passwd = "heima"
//執(zhí)行插入操作,o.Insert()插入,參數(shù)是結(jié)構(gòu)體對(duì)象,返回值是插入的id和錯(cuò)誤信息。
id, err := o.Insert(&user) 
if err == nil { 
  fmt.Println(id) 
}

注意:這里不用給Id賦值,因?yàn)榻ū淼臅r(shí)候我們沒(méi)有指定主鍵,ORM默認(rèn)會(huì)以變量名為Id,類型為int的字段當(dāng)主鍵

查詢

查詢,用o.Read(),第一個(gè)參數(shù)是對(duì)象地址,第二個(gè)參數(shù)是指定查詢字段,返回值只有錯(cuò)誤信息。

o := orm.NewOrm() //1.要先獲得一個(gè)ORM對(duì)象
var user User  //2.定義一個(gè)要獲取數(shù)據(jù)的結(jié)構(gòu)體對(duì)象
user.Name = "itcast" //3.給結(jié)構(gòu)體對(duì)象賦值,相當(dāng)于給查詢條件賦值
err := o.Read(&user,"Name") //4.查詢,用o.Read()
if err != nil{ 
  beego.Info("查詢數(shù)據(jù)錯(cuò)誤",err) 
  return 
}

注意:如果查詢字段是查詢對(duì)象的主鍵的話,可以不用指定查詢字段

更新

執(zhí)行更新操作,用o.Update()函數(shù),參數(shù)是結(jié)構(gòu)體對(duì)象指針,返回值是更新的條目數(shù)和錯(cuò)誤信息

o := orm.NewOrm() //1.要先獲得一個(gè)ORM對(duì)象
var user User  //2.定義一個(gè)要獲取數(shù)據(jù)的結(jié)構(gòu)體對(duì)象
user.Name = "itcast" //3.給結(jié)構(gòu)體對(duì)象賦值,相當(dāng)于給查詢條件賦值
err := o.Read(&user) //4.查詢更新的數(shù)據(jù)是否存在
if err != nil{ 
  beego.Info("查詢數(shù)據(jù)錯(cuò)誤",err) 
  return 
}
user.Name = "jeff"  //5.如果查找到了要更新的對(duì)象,就給這個(gè)對(duì)象賦新值
count,err=o.Update(&user)  //6. 更新操作
if err != nil{ 
  beego.Info("更新數(shù)據(jù)錯(cuò)誤",err) 
  return 
}

刪除

執(zhí)行刪除操作,用的方法是o.Delete(),參數(shù)是刪除的結(jié)構(gòu)體對(duì)象,返回值是刪除的條目數(shù)和錯(cuò)誤信息

o := orm.NewOrm() //1.要先獲得一個(gè)ORM對(duì)象
var user User  //2.定義一個(gè)要獲取數(shù)據(jù)的結(jié)構(gòu)體對(duì)象
user.Id = 1   //3.給結(jié)構(gòu)體對(duì)象賦值,相當(dāng)于給查詢條件賦值
num, err := o.Delete(&User{Id: 1}) 
if err == nil { 
  fmt.Println(num) 
}

案例

注冊(cè)

在router.go文件的init()函數(shù)中加下面這行代碼: 路由文件

beego.Router("/register1", &controllers.MainController{})

Controllers/default.go業(yè)務(wù)邏輯中:

func (c *MainController) Get() {
	c.Data["data"] = "get請(qǐng)求"
	c.TplName = "register.html"
}
func (c *MainController) Post() {
	c.Data["name"] = "jeff"
	c.TplName = "register.html"
	userName := c.GetString("userName")
	passwd := c.GetString("passwd")
	beego.Info("用戶名",userName)
	beego.Info("密碼",passwd)
	if userName != "" || passwd != ""{
		c.Redirect("/login",400)
	}
	c.TplName = "register.html"
}

Views/register.html視圖文件中:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注冊(cè)</title>
</head>
<body>
<div style="position:absolute;left:50%; top:50%;">
    <form action="/register1" method="post"> 用戶名:<input type="text" name="userName">
        <p></p> 密碼:<input type="password" name="passwd">
        <p></p> <input type="submit" value="注冊(cè)">
    </form>
</div>
</body>
</html>

案例2

路由:

beego.Router("/addAritcle", &controllers.MainController{},"post:AddAritcle;get:Index")

default業(yè)務(wù)邏輯:

func (c*MainController) AddAritcle() {
	c.Data["name"] = c.GetString("userName")
	c.Data["pwd"] = c.GetString("passwd")
	beego.Info("用戶名:",c.Data["name"])
	beego.Info("密碼",c.Data["pwd"])
	c.TplName = "success.html"
}
func (c*MainController) Index() {
	c.TplName = "addArticle.html"
}

view視圖

addArticle.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>成功</title>
</head>
<body>
<p style="font-size: 70px;color: brown">成功?。?!</p>
<p>用戶名:{{.name}}</p>
<p>密碼:{{.pwd}}</p>
</body>
</html>

Success.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>成功</title>
</head>
<body>
<p style="font-size: 70px;color: brown">成功?。?!</p>
<p>用戶名:{{.name}}</p>
<p>密碼:{{.pwd}}</p>
</body>
</html>

以上就是golang beego框架路由ORM增刪改查完整案例的詳細(xì)內(nèi)容,更多關(guān)于golang beego框架路ORM增刪改查的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 一文教你如何快速學(xué)會(huì)Go的切片和數(shù)組數(shù)據(jù)類型

    一文教你如何快速學(xué)會(huì)Go的切片和數(shù)組數(shù)據(jù)類型

    數(shù)組是屬于同一類型的元素的集合。切片是數(shù)組頂部的方便、靈活且功能強(qiáng)大的包裝器。本文就來(lái)和大家聊聊Go中切片和數(shù)組的使用,需要的可以參考一下
    2023-03-03
  • 關(guān)于Go你不得不知道的一些實(shí)用小技巧

    關(guān)于Go你不得不知道的一些實(shí)用小技巧

    開發(fā)語(yǔ)言上Go成為高并發(fā)業(yè)務(wù)開發(fā)的主流語(yǔ)言,再加上云原生技術(shù)底座的驅(qū)動(dòng),Go語(yǔ)言風(fēng)光無(wú)限,下面這篇文章主要給大家介紹了關(guān)于Go你不得不知道的一些實(shí)用小技巧,需要的朋友可以參考下
    2022-11-11
  • 讓go程序以后臺(tái)進(jìn)程或daemon方式運(yùn)行方法探究

    讓go程序以后臺(tái)進(jìn)程或daemon方式運(yùn)行方法探究

    本文探討了如何通過(guò)Go代碼實(shí)現(xiàn)在后臺(tái)運(yùn)行的程序,最近我用Go語(yǔ)言開發(fā)了一個(gè)WebSocket服務(wù),我希望它能在后臺(tái)運(yùn)行,并在異常退出時(shí)自動(dòng)重新啟動(dòng),我的整體思路是將程序轉(zhuǎn)為后臺(tái)進(jìn)程,也就是守護(hù)進(jìn)程(daemon)
    2024-01-01
  • Ubuntu安裝Go語(yǔ)言運(yùn)行環(huán)境

    Ubuntu安裝Go語(yǔ)言運(yùn)行環(huán)境

    由于最近偏愛(ài)Ubuntu,在加上作為一門開源語(yǔ)言,在Linux上從源代碼開始搭建環(huán)境更讓人覺(jué)得有趣味性。讓我們直接先從Go語(yǔ)言的環(huán)境搭建開始
    2015-04-04
  • Golang使用Gin框架實(shí)現(xiàn)HTTP上傳文件過(guò)程介紹

    Golang使用Gin框架實(shí)現(xiàn)HTTP上傳文件過(guò)程介紹

    由于需求中有文件上傳這一個(gè)需求,在這里我們就學(xué)習(xí)一下go語(yǔ)言如何上傳文件。本文主要通過(guò)表單的方式進(jìn)行文件上傳操作,本文實(shí)例為大家分享了Go實(shí)現(xiàn)文件上傳操作的具體代碼,供大家參考,具體內(nèi)容如下
    2023-04-04
  • 深入理解Golang中WebSocket和WSS的支持

    深入理解Golang中WebSocket和WSS的支持

    本文主要介紹了深入理解Golang中WebSocket和WSS的支持,實(shí)現(xiàn)了Golang構(gòu)建WebSocket服務(wù)器和客戶端,并使用自簽名證書實(shí)現(xiàn)WSS的功能,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • golang兩種調(diào)用rpc的方法

    golang兩種調(diào)用rpc的方法

    這篇文章主要介紹了golang兩種調(diào)用rpc的方法,結(jié)合實(shí)例形式分析了Go語(yǔ)言調(diào)用rpc的原理與實(shí)現(xiàn)方法,需要的朋友可以參考下
    2016-07-07
  • Go語(yǔ)言中的Base64編碼原理介紹以及使用

    Go語(yǔ)言中的Base64編碼原理介紹以及使用

    Base64是網(wǎng)絡(luò)上最常見的用于傳輸8Bit字節(jié)代碼的編碼方式之一,可用于在HTTP環(huán)境下傳遞較長(zhǎng)的標(biāo)識(shí)信息,下面這篇文章主要給大家介紹了關(guān)于Go語(yǔ)言中的Base64編碼原理介紹以及使用的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • 深入了解Golang?哈希算法之MD5、SHA-1和SHA-256

    深入了解Golang?哈希算法之MD5、SHA-1和SHA-256

    哈希算法是計(jì)算機(jī)科學(xué)領(lǐng)域中一種重要的技術(shù),它將任意長(zhǎng)度的輸入數(shù)據(jù)映射為固定長(zhǎng)度的哈希值,在本篇文章中,我們將深入探討Golang中的哈希算法,從多個(gè)方面介紹其詳細(xì)內(nèi)容,希望通過(guò)本文的閱讀你將對(duì)?Golang哈希算法有更全面的理解
    2023-05-05
  • Go語(yǔ)言導(dǎo)出內(nèi)容到Excel的方法

    Go語(yǔ)言導(dǎo)出內(nèi)容到Excel的方法

    這篇文章主要介紹了Go語(yǔ)言導(dǎo)出內(nèi)容到Excel的方法,涉及Go語(yǔ)言操作excel的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02

最新評(píng)論

东乡族自治县| 错那县| 广汉市| 葵青区| 稷山县| 佛山市| 关岭| 凤阳县| 革吉县| 黄大仙区| 大宁县| 英吉沙县| 阳泉市| 沧州市| 长宁区| 汕头市| 宁南县| 海盐县| 光泽县| 静安区| 南皮县| 曲靖市| 永城市| 荆门市| 外汇| 涞源县| 广西| 蒙自县| 朝阳市| 通州市| 大竹县| 平舆县| 和田县| 嘉定区| 武穴市| 雷山县| 张家界市| 玉田县| 类乌齐县| 沂水县| 靖州|