61396-Go語言程序設(shè)計項目化教程(微課版)6.2 CRUD操作_第1頁
61396-Go語言程序設(shè)計項目化教程(微課版)6.2 CRUD操作_第2頁
61396-Go語言程序設(shè)計項目化教程(微課版)6.2 CRUD操作_第3頁
61396-Go語言程序設(shè)計項目化教程(微課版)6.2 CRUD操作_第4頁
61396-Go語言程序設(shè)計項目化教程(微課版)6.2 CRUD操作_第5頁
已閱讀5頁,還剩19頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

CRUD操作插入數(shù)據(jù)查詢數(shù)據(jù)01.02.目錄更新數(shù)據(jù)刪除數(shù)據(jù)03.04.01插入數(shù)據(jù)原生方式插入數(shù)據(jù)GORM方式插入數(shù)據(jù)INSERTINTOtable_name(field1,field2,...fieldN)VALUES(value1,value2,...valueN);原生方式插入單條數(shù)據(jù)注:如果想要添加全部數(shù)據(jù),并采用自增方式,可以使用(PRIMARYKEYAUTO_INCREMENT),在第一列增加數(shù)據(jù)時可以將位置參數(shù)直接置為"0"或"Null"。INSERTINTOtable_name(field1,field2,...fieldN)VALUES(valueA1,valueA2,...valueAN),(valueB1,valueB2,...valueBN)......;原生方式插入多條數(shù)據(jù)1原生方式插入數(shù)據(jù)1原生方式插入數(shù)據(jù)packagemainimport("database/sql""fmt"_"/go-sql-driver/mysql")funcmain(){pool,err:=sql.Open("mysql","root:root@tcp(:3306)/test")iferr!=nil{fmt.Println(err.Error())}else{fmt.Println("數(shù)據(jù)庫連接成功")}sql1:="createtableaccount("+"idintprimarykey,"+"usernamevarchar(50),"+"balancedouble)"_,err=pool.Exec(sql1)iferr!=nil{fmt.Println(err.Error())}else{fmt.Println("數(shù)據(jù)庫創(chuàng)建成功")sql2:=`insertintoaccountvalues(1,"go",12.34)`_,err=pool.Exec(sql2)iferr!=nil{fmt.Println(err.Error())}else{fmt.Println("數(shù)據(jù)1插入成功")}sql3:=`insertintoaccountvalues(2,"golang",34.56),(3,"Go",56.78)`_,err=pool.Exec(sql3)iferr!=nil{fmt.Println(err.Error())}else{fmt.Println("數(shù)據(jù)2插入成功")}}deferpool.Close()}運行結(jié)果為:數(shù)據(jù)庫連接成功數(shù)據(jù)庫創(chuàng)建成功數(shù)據(jù)1插入成功數(shù)據(jù)2插入成功1GORM插入數(shù)據(jù)db.HasTable(&User{})//檢查模型User的表是否存在db.HasTable("users")//檢查表users是否存在

u:=User{

結(jié)構(gòu)體成員1類型1……}判斷是否存在模型或表創(chuàng)建結(jié)構(gòu)體變量保存數(shù)據(jù)db.Create(u)向表格內(nèi)插入數(shù)據(jù)1GORM插入數(shù)據(jù)funcmain(){dsn:="root:root@tcp(:3306)/test?charset=utf8&parseTime=True&loc=Local"db,err:=gorm.Open(mysql.Open(dsn),&gorm.Config{})iferr!=nil{fmt.Println("數(shù)據(jù)庫連接失敗",err.Error())}ifdb.Migrator().HasTable(&Person{})==true{fmt.Println("表格存在,可以插入數(shù)據(jù)")u:=Person{Id:1,Name:"Go",}iferr:=db.Create(u).Error;err!=nil{fmt.Println("數(shù)據(jù)插入失敗",err)}else{fmt.Println("數(shù)據(jù)插入成功")}}}packagemainimport("fmt""gorm.io/driver/mysql""gorm.io/gorm")typePersonstruct{IdintNamestring}02查詢數(shù)據(jù)原生方式查詢數(shù)據(jù)GORM方式查詢數(shù)據(jù)2原生方式查詢數(shù)據(jù)func(db*DB)Query(querystring,args...interface{})(*Rows,error){} //多行查詢func(db*DB)QueryRow(querystring,args...any)*Row{ } //單行查詢func(r*Row)Scan(dest...interface{})error //將查詢結(jié)果分別保存到dest參數(shù)指定的值中數(shù)據(jù)查詢保存結(jié)果集func(rs*Rows)Next()bool{} //遍歷結(jié)果集遍歷結(jié)果集func(r*Row)Scan(dest...any)error{} //將查詢到的結(jié)果賦值給目標(biāo)變量保存結(jié)果到變量packagemainimport("database/sql""fmt"_"/go-sql-driver/mysql")typeaccountstruct{idintusernamestringbalancefloat64}funcmain(){pool,err:=sql.Open("mysql","root:root@tcp(:3306)/test")iferr!=nil{fmt.Println(err.Error())}else{fmt.Println("數(shù)據(jù)庫連接成功")}//構(gòu)造sql語句

sql1:="select*fromaccountwhereid=?"http://創(chuàng)建a結(jié)構(gòu)體變量,用于保存數(shù)據(jù)varaaccount//查詢id=1err=pool.QueryRow(sql1,1).Scan(&a.id,&a.username,&a.balance)//如果報錯,打印錯誤信息,退出程序iferr!=nil{fmt.Printf("查詢失敗:",err)return}//打印結(jié)果fmt.Printf("id\tusername\tbalance\n")fmt.Printf("%d\t%s\t%f\n",a.id,a.username,a.balance)}運行結(jié)果為:id username balance1 go

12.3400002原生方式查詢單行數(shù)據(jù)2原生方式查詢多行數(shù)據(jù)packagemainimport("database/sql""fmt"_"/go-sql-driver/mysql")typeaccountstruct{idintusernamestringbalancefloat64}funcmain(){pool,err:=sql.Open("mysql","root:root@tcp(:3306)/test")iferr!=nil{fmt.Println(err.Error())}else{fmt.Println("數(shù)據(jù)庫連接成功")}sql:="select*fromaccountwhereid!=?"varaaccountrows,err:=pool.Query(sql,-1)iferr!=nil{fmt.Printf("查詢失?。?,err)return}deferrows.Close()fmt.Printf("id\tusername\tbalance\n")forrows.Next(){err:=rows.Scan(&a.id,&a.username,&a.balance)iferr!=nil{fmt.Println(err)return}fmt.Printf("%d\t%s\t%f\n",a.id,a.username,a.balance)}}運行結(jié)果為:數(shù)據(jù)庫連接成功id usernamebalance1 go 12.3400002 golang 34.5600003 Go 56.7800002GORM查詢數(shù)據(jù)db.Take(&user) //沒有排序的情況下的第一條記錄db.First(&user) //主鍵升序第一條獲取一條記錄第一條記錄db.Last(&user) //主鍵降序第一條最后一條記錄func(db*DB)Where(queryinterface{},args...interface{})(tx*DB){}條件查詢db.Find(&user) //獲取表格內(nèi)所有記錄獲取所有記錄2GORM查詢數(shù)據(jù)packagemainimport("fmt""gorm.io/driver/mysql""gorm.io/gorm")typePersonstruct{IdintNamestring}funcmain(){dsn:="root:root@tcp(:3306)/test?charset=utf8&parseTime=True&loc=Local"db,err:=gorm.Open(mysql.Open(dsn),&gorm.Config{})iferr!=nil{fmt.Println("數(shù)據(jù)庫連接失敗",err.Error())}ifdb.Migrator().HasTable(&Person{})==true{fmt.Println("表格存在,可以操作")p:=Person{}db.Take(&p)//Take()等價于LIMIT1fmt.Println(p)db.First(&p)//First()等價于ASCLIMIT1fmt.Println(p)db.Last(&p)//Last()等價于DESCLIMIT1fmt.Println(p)varps[]Persondb.Find(&ps)//查詢所有

fmt.Println(ps)varnames[]stringdb.Model(Person{}).Pluck("name",&names)//查詢name列信息

fmt.Println(names)db.Where("idin(?)",[]int{1}).Take(&p)//select*frompeoplewhereid=?fmt.Println(p)db.Select("name").Where("id=?",1).Take(&p)//selectnamefrompeoplewhereid=1fmt.Println(p)}}運行結(jié)果為:表格存在,可以操作{1Go}{1Go}{1Go}[{1Go}{2go}][Gogo]{1Go}{1Go}03更新數(shù)據(jù)原生方式更新數(shù)據(jù)GORM方式更新數(shù)據(jù)3原生方式更新數(shù)據(jù)UPDATE<表名>SET字段1=值1[,字段2=值2...][WHERE子句][ORDERBY子句][LIMIT子句]構(gòu)造sql語句db.Exec().RowsAffected()影響行數(shù)<表名>指要更新的表名稱;SET指表中要修改的列名及列值;WHERE表示限定表中要修改的行,也可以不指定,不指定則修改表中所有的行;ORDERBY表示限定表中的行被修改的次序,也可以不做限制;LIMIT表示限定被修改的行數(shù),也可以不做限制。如果要修改一行數(shù)據(jù)的多個列值,SET子句的每個值都需要用","分隔。func(db*DB)Exec(querystring,args...any)(Result,error){}注:Exec執(zhí)行查詢,不返回任何行。args用于查詢中的任何占位符參數(shù)。執(zhí)行函數(shù)packagemainimport("database/sql""fmt"_"/go-sql-driver/mysql")funcmain(){pool,err:=sql.Open("mysql","root:root@tcp(:3306)/test")iferr!=nil{fmt.Println(err.Error())}else{fmt.Println("數(shù)據(jù)庫連接成功")}//更新數(shù)據(jù)sql:="updateaccountsetusername=?whereid=?"ret,err:=pool.Exec(sql,"Go語言",1)iferr!=nil{fmt.Printf("更新失敗:%v\n",err)return}n,err:=ret.RowsAffected()//操作影響的行數(shù)

iferr!=nil{fmt.Printf("獲取影響行數(shù)失?。?v\n",err)return}fmt.Printf("更新成功,影響%d行。\n",n)}運行結(jié)果為:數(shù)據(jù)庫連接成功更新成功,影響1行。3原生方式更新數(shù)據(jù)3GORM更新數(shù)據(jù)HasTable(dstinterface{})booldb.Model() //指定db要運行操作的模型判斷表格是否存在第一條記錄func(db*DB)Update(columnstring,valueinterface{})(tx*DB){} //使用回調(diào)函數(shù)更新更新屬性最后一條記錄獲取所有記錄func(db*DB)Save(valueinterface{})(tx*DB){} //保存更新值在數(shù)據(jù)庫中,如果值沒有主鍵,將插入它3GORM更新數(shù)據(jù)packagemainimport("fmt""gorm.io/driver/mysql""gorm.io/gorm")typePersonstruct{IdintNamestring}funcmain(){dsn:="root:root@tcp(:3306)/test?charset=utf8&parseTime=True&loc=Local"db,err:=gorm.Open(mysql.Open(dsn),&gorm.Config{})iferr!=nil{fmt.Println("數(shù)據(jù)庫連接失敗",err.Error())}ifdb.Migrator().HasTable(&Person{})==true{fmt.Println("表格存在,可以操作")varps[]Persondb.Find(&ps)//查詢原始內(nèi)容

fmt.Println(ps)//打印原始內(nèi)容

p:=Person{}db.Where("id=?",1).Take(&p)//select*frompeoplewhereid=1p.Name="更新"db.Save(&p)//updatepeoplesetname="更新"whereid=1db.Model(Person{}).Where("id=?",2).Update("name","update")//updatepeoplesetname="update"whereid=2updatePerson:=Person{Id:5,Name:"updates",}db.Model(Person{}).Where("id>?",2).Updates(&updatePerson)//updatepeoplesetid=5,name="updates"whereid>2db.Find(&ps)//再次查詢所有

fmt.Println(ps)//再次打印所有內(nèi)容

}}運行結(jié)果為:表格存在,可以操作[{1Go}{2go}{3golang}][{1更新}{2update}{5updates}]04刪除數(shù)據(jù)原生方式刪除數(shù)據(jù)GORM方式刪除數(shù)據(jù)DELETEFROM<表名>[WHERE子句][ORDERBY子句][LIMIT子句]構(gòu)造sql語句db.Exec().RowsAffected() //RowsAffected返回受更新、插入或刪除影響的行數(shù)。但并不是每個數(shù)據(jù)庫或數(shù)據(jù)庫驅(qū)動程序都支持這一點。影響行數(shù)<表名>是指定要刪除數(shù)據(jù)的表名稱;WHERE子句表示刪除操作限定的行條件,如果不指定,則代表刪除該表中的所有行;ORDERBY子句表示表中各行將按照子句指定的順序進行刪除,也可以不指定;LIMIT子句用于告知服務(wù)器在控制命令被返回到客戶端前被刪除行的最大值,也可以不指定。4原生方式刪除數(shù)據(jù)func(db*DB)Exec(querystring,args...any)(Result,error){}執(zhí)行函數(shù)packagemainimport("database/sql""fmt"_"/go-sql-driver/mysql")funcmain(){pool,err:=sql.Open("mysql","root:root@tcp(:3306)/test")iferr!=nil{fmt.Println(err.Error())}else{fmt.Println("數(shù)據(jù)庫連接成功")}//刪除數(shù)據(jù)sql:="deletefromaccountwhereid=?"ret,err:=pool.Exec(sql,3)iferr!=nil{fmt.Printf("刪除失敗:%v\n",err)return}n,err:=ret.RowsAffected()//操作影響的行數(shù)

iferr!=nil{fmt.Printf("獲取影響行數(shù)失敗:%v\n",err)return}fmt.Printf("刪除成功,影響:%d\n行",n)}運行結(jié)果為:數(shù)據(jù)庫連接成功刪除成功,影響1行。4原生方式刪除數(shù)據(jù)4GORM刪除數(shù)據(jù)func(db*DB)Delete(valueinterface{},conds...interface{})(tx*DB){ tx=db.getInstance() iflen(conds)>0{ ifexprs:=tx.Statement.BuildCondition(conds[0],conds[1:]...);len(exprs)>0{ tx.Statement.AddClause

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論