61396-Go语言程序设计项目化教程(微课版)6.2 CRUD操作_第1页
61396-Go语言程序设计项目化教程(微课版)6.2 CRUD操作_第2页
61396-Go语言程序设计项目化教程(微课版)6.2 CRUD操作_第3页
61396-Go语言程序设计项目化教程(微课版)6.2 CRUD操作_第4页
61396-Go语言程序设计项目化教程(微课版)6.2 CRUD操作_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

CRUD操作插入数据查询数据01.02.目录更新数据删除数据03.04.01插入数据原生方式插入数据GORM方式插入数据INSERTINTOtable_name(field1,field2,...fieldN)VALUES(value1,value2,...valueN);原生方式插入单条数据注:如果想要添加全部数据,并采用自增方式,可以使用(PRIMARYKEYAUTO_INCREMENT),在第一列增加数据时可以将位置参数直接置为"0"或"Null"。INSERTINTOtable_name(field1,field2,...fieldN)VALUES(valueA1,valueA2,...valueAN),(valueB1,valueB2,...valueBN)......;原生方式插入多条数据1原生方式插入数据1原生方式插入数据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("数据库连接成功")}sql1:="createtableaccount("+"idintprimarykey,"+"usernamevarchar(50),"+"balancedouble)"_,err=pool.Exec(sql1)iferr!=nil{fmt.Println(err.Error())}else{fmt.Println("数据库创建成功")sql2:=`insertintoaccountvalues(1,"go",12.34)`_,err=pool.Exec(sql2)iferr!=nil{fmt.Println(err.Error())}else{fmt.Println("数据1插入成功")}sql3:=`insertintoaccountvalues(2,"golang",34.56),(3,"Go",56.78)`_,err=pool.Exec(sql3)iferr!=nil{fmt.Println(err.Error())}else{fmt.Println("数据2插入成功")}}deferpool.Close()}运行结果为:数据库连接成功数据库创建成功数据1插入成功数据2插入成功1GORM插入数据db.HasTable(&User{})//检查模型User的表是否存在db.HasTable("users")//检查表users是否存在

u:=User{

结构体成员1类型1……}判断是否存在模型或表创建结构体变量保存数据db.Create(u)向表格内插入数据1GORM插入数据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("数据库连接失败",err.Error())}ifdb.Migrator().HasTable(&Person{})==true{fmt.Println("表格存在,可以插入数据")u:=Person{Id:1,Name:"Go",}iferr:=db.Create(u).Error;err!=nil{fmt.Println("数据插入失败",err)}else{fmt.Println("数据插入成功")}}}packagemainimport("fmt""gorm.io/driver/mysql""gorm.io/gorm")typePersonstruct{IdintNamestring}02查询数据原生方式查询数据GORM方式查询数据2原生方式查询数据func(db*DB)Query(querystring,args...interface{})(*Rows,error){} //多行查询func(db*DB)QueryRow(querystring,args...any)*Row{ } //单行查询func(r*Row)Scan(dest...interface{})error //将查询结果分别保存到dest参数指定的值中数据查询保存结果集func(rs*Rows)Next()bool{} //遍历结果集遍历结果集func(r*Row)Scan(dest...any)error{} //将查询到的结果赋值给目标变量保存结果到变量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("数据库连接成功")}//构造sql语句

sql1:="select*fromaccountwhereid=?"//创建a结构体变量,用于保存数据varaaccount//查询id=1err=pool.QueryRow(sql1,1).Scan(&a.id,&a.username,&a.balance)//如果报错,打印错误信息,退出程序iferr!=nil{fmt.Printf("查询失败:",err)return}//打印结果fmt.Printf("id\tusername\tbalance\n")fmt.Printf("%d\t%s\t%f\n",a.id,a.username,a.balance)}运行结果为:id username balance1 go

12.3400002原生方式查询单行数据2原生方式查询多行数据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("数据库连接成功")}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)}}运行结果为:数据库连接成功id usernamebalance1 go 12.3400002 golang 34.5600003 Go 56.7800002GORM查询数据db.Take(&user) //没有排序的情况下的第一条记录db.First(&user) //主键升序第一条获取一条记录第一条记录db.Last(&user) //主键降序第一条最后一条记录func(db*DB)Where(queryinterface{},args...interface{})(tx*DB){}条件查询db.Find(&user) //获取表格内所有记录获取所有记录2GORM查询数据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("数据库连接失败",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)}}运行结果为:表格存在,可以操作{1Go}{1Go}{1Go}[{1Go}{2go}][Gogo]{1Go}{1Go}03更新数据原生方式更新数据GORM方式更新数据3原生方式更新数据UPDATE<表名>SET字段1=值1[,字段2=值2...][WHERE子句][ORDERBY子句][LIMIT子句]构造sql语句db.Exec().RowsAffected()影响行数<表名>指要更新的表名称;SET指表中要修改的列名及列值;WHERE表示限定表中要修改的行,也可以不指定,不指定则修改表中所有的行;ORDERBY表示限定表中的行被修改的次序,也可以不做限制;LIMIT表示限定被修改的行数,也可以不做限制。如果要修改一行数据的多个列值,SET子句的每个值都需要用","分隔。func(db*DB)Exec(querystring,args...any)(Result,error){}注:Exec执行查询,不返回任何行。args用于查询中的任何占位符参数。执行函数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("数据库连接成功")}//更新数据sql:="updateaccountsetusername=?whereid=?"ret,err:=pool.Exec(sql,"Go语言",1)iferr!=nil{fmt.Printf("更新失败:%v\n",err)return}n,err:=ret.RowsAffected()//操作影响的行数

iferr!=nil{fmt.Printf("获取影响行数失败:%v\n",err)return}fmt.Printf("更新成功,影响%d行。\n",n)}运行结果为:数据库连接成功更新成功,影响1行。3原生方式更新数据3GORM更新数据HasTable(dstinterface{})booldb.Model() //指定db要运行操作的模型判断表格是否存在第一条记录func(db*DB)Update(columnstring,valueinterface{})(tx*DB){} //使用回调函数更新更新属性最后一条记录获取所有记录func(db*DB)Save(valueinterface{})(tx*DB){} //保存更新值在数据库中,如果值没有主键,将插入它3GORM更新数据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("数据库连接失败",err.Error())}ifdb.Migrator().HasTable(&Person{})==true{fmt.Println("表格存在,可以操作")varps[]Persondb.Find(&ps)//查询原始内容

fmt.Println(ps)//打印原始内容

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)//再次打印所有内容

}}运行结果为:表格存在,可以操作[{1Go}{2go}{3golang}][{1更新}{2update}{5updates}]04删除数据原生方式删除数据GORM方式删除数据DELETEFROM<表名>[WHERE子句][ORDERBY子句][LIMIT子句]构造sql语句db.Exec().RowsAffected() //RowsAffected返回受更新、插入或删除影响的行数。但并不是每个数据库或数据库驱动程序都支持这一点。影响行数<表名>是指定要删除数据的表名称;WHERE子句表示删除操作限定的行条件,如果不指定,则代表删除该表中的所有行;ORDERBY子句表示表中各行将按照子句指定的顺序进行删除,也可以不指定;LIMIT子句用于告知服务器在控制命令被返回到客户端前被删除行的最大值,也可以不指定。4原生方式删除数据func(db*DB)Exec(querystring,args...any)(Result,error){}执行函数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("数据库连接成功")}//删除数据sql:="deletefromaccountwhereid=?"ret,err:=pool.Exec(sql,3)iferr!=nil{fmt.Printf("删除失败:%v\n",err)return}n,err:=ret.RowsAffected()//操作影响的行数

iferr!=nil{fmt.Printf("获取影响行数失败:%v\n",err)return}fmt.Printf("删除成功,影响:%d\n行",n)}运行结果为:数据库连接成功删除成功,影响1行。4原生方式删除数据4GORM删除数据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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论