《61396-Go语言程序设计项目化教程(微课版)6.2 CRUD操作.pptx》由会员分享,可在线阅读,更多相关《61396-Go语言程序设计项目化教程(微课版)6.2 CRUD操作.pptx(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、CRUDCRUD操作操作插入数据查询数据01.02.目录更新数据删除数据03.04.01插入数据原生方式插入数据GORM方式插入数据INSERT INTO table_name(field1,field2,.fieldN)VALUES(value1,value2,.valueN);原生方式插入单条数据注:如果想要添加全部数据,并采用自增方式,可以使用(PRIMARY KEY AUTO_INCREMENT),在第一列增加数据时可以将位置参数直接置为0或Null。INSERT INTO table_name(field1,field2,.fieldN)VALUES(valueA1,valueA2,
2、.valueAN),(valueB1,valueB2,.valueBN).;原生方式插入多条数据1原生方式插入数据原生方式插入数据1原生方式插入数据原生方式插入数据package mainimport(database/sql fmt _ main()pool,err:=sql.Open(mysql,root:roottcp(127.0.0.1:3306)/test)if err!=nil fmt.Println(err.Error()else fmt.Println(数据库连接成功)sql1:=create table account(+id int primary key,+usernam
3、e varchar(50),+balance double)_,err=pool.Exec(sql1)if err!=nil fmt.Println(err.Error()else fmt.Println(数据库创建成功)sql2:=insert into account values(1,go,12.34)_,err=pool.Exec(sql2)if err!=nil fmt.Println(err.Error()else fmt.Println(数据1插入成功)sql3:=insert into account values (2,golang,34.56),(3,Go,56.78)_,
4、err=pool.Exec(sql3)if err!=nil fmt.Println(err.Error()else fmt.Println(数据2插入成功)defer pool.Close()运行结果为:数据库连接成功数据库创建成功数据1插入成功数据2插入成功1GORMGORM插入数据插入数据db.HasTable(&User)/检查模型User的表是否存在db.HasTable(users)/检查表users是否存在 u:=User 结构体成员1 类型1 判断是否存在模型或表创建结构体变量保存数据db.Create(u)向表格内插入数据1GORMGORM插入数据插入数据func main(
5、)dsn:=root:roottcp(127.0.0.1:3306)/test?charset=utf8&parseTime=True&loc=Local db,err:=gorm.Open(mysql.Open(dsn),&gorm.Config)if err!=nil fmt.Println(数据库连接失败,err.Error()if db.Migrator().HasTable(&Person)=true fmt.Println(表格存在,可以插入数据)u:=Person Id:1,Name:Go,if err:=db.Create(u).Error;err!=nil fmt.Print
6、ln(数据插入失败,err)else fmt.Println(数据插入成功)package mainimport(fmt gorm.io/driver/mysql gorm.io/gorm)type Person struct Id int Name string02查询数据原生方式查询数据GORM方式查询数据2原生方式查询数据原生方式查询数据func(db*DB)Query(query string,args.interface)(*Rows,error)/多行查询func(db*DB)QueryRow(query string,args.any)*Row/单行查询func(r*Row)Sc
7、an(dest.interface)error/将查询结果分别保存到dest参数指定的值中数据查询保存结果集func(rs*Rows)Next()bool/遍历结果集遍历结果集func(r*Row)Scan(dest.any)error/将查询到的结果赋值给目标变量保存结果到变量package mainimport(database/sql fmt _ account struct id int username string balance float64func main()pool,err:=sql.Open(mysql,root:roottcp(127.0.0.1:3306)/test
8、)if err!=nil fmt.Println(err.Error()else fmt.Println(数据库连接成功)/构造sql语句 sql1:=select*from account where id=?/创建a结构体变量,用于保存数据 var a account /查询id=1 err=pool.QueryRow(sql1,1).Scan(&a.id,&a.username,&a.balance)/如果报错,打印错误信息,退出程序 if err!=nil fmt.Printf(查询失败:,err)return /打印结果 fmt.Printf(id t username t bala
9、nce n)fmt.Printf(%dt%st%fn,a.id,a.username,a.balance)运行结果为:id username balance 1 go 12.3400002原生方式查询单行数据原生方式查询单行数据2原生方式查询多行数据原生方式查询多行数据package mainimport(database/sql fmt _ account struct id int username string balance float64func main()pool,err:=sql.Open(mysql,root:roottcp(127.0.0.1:3306)/test)if e
10、rr!=nil fmt.Println(err.Error()else fmt.Println(数据库连接成功)sql:=select*from account where id!=?var a account rows,err:=pool.Query(sql,-1)if err!=nil fmt.Printf(查询失败:,err)return defer rows.Close()fmt.Printf(id t username t balance n)for rows.Next()err:=rows.Scan(&a.id,&a.username,&a.balance)if err!=nil
11、fmt.Println(err)return fmt.Printf(%dt%st%fn,a.id,a.username,a.balance)运行结果为:数据库连接成功id username balance 1 go 12.3400002 golang 34.5600003 Go 56.7800002GORMGORM查询数据查询数据db.Take(&user)/没有排序的情况下的第一条记录db.First(&user)/主键升序第一条获取一条记录第一条记录db.Last(&user)/主键降序第一条最后一条记录func(db*DB)Where(query interface,args.inter
12、face)(tx*DB)条件查询db.Find(&user)/获取表格内所有记录获取所有记录2GORMGORM查询数据查询数据package mainimport(fmt gorm.io/driver/mysql gorm.io/gorm)type Person struct Id int Name stringfunc main()dsn:=root:roottcp(127.0.0.1:3306)/test?charset=utf8&parseTime=True&loc=Local db,err :=gorm.Open(mysql.Open(dsn),&gorm.Config)if err!
13、=nil fmt.Println(数据库连接失败,err.Error()if db.Migrator().HasTable(&Person)=true fmt.Println(表格存在,可以操作)p:=Person db.Take(&p)/Take()等价于LIMIT 1 fmt.Println(p)db.First(&p)/First()等价于ASC LIMIT 1 fmt.Println(p)db.Last(&p)/Last()等价于DESC LIMIT 1 fmt.Println(p)var ps Person db.Find(&ps)/查询所有 fmt.Println(ps)var n
14、ames string db.Model(Person).Pluck(name,&names)/查询name列信息 fmt.Println(names)db.Where(id in(?),int1).Take(&p)/select*from people where id=?fmt.Println(p)db.Select(name).Where(id=?,1).Take(&p)/select name from people where id=1 fmt.Println(p)运行结果为:表格存在,可以操作1 Go1 Go1 Go1 Go 2 goGo go1 Go1 Go03更新数据原生方式更
15、新数据GORM方式更新数据3原生方式更新数据原生方式更新数据UPDATE SET 字段 1=值 1,字段 2=值 2.WHERE 子句 ORDER BY 子句 LIMIT 子句构造sql语句db.Exec().RowsAffected()影响行数指要更新的表名称;SET指表中要修改的列名及列值;WHERE表示限定表中要修改的行,也可以不指定,不指定则修改表中所有的行;ORDER BY表示限定表中的行被修改的次序,也可以不做限制;LIMIT表示限定被修改的行数,也可以不做限制。如果要修改一行数据的多个列值,SET子句的每个值都需要用,分隔。func(db*DB)Exec(query string
16、,args.any)(Result,error)注:Exec执行查询,不返回任何行。args用于查询中的任何占位符参数。执行函数package mainimport(database/sql fmt _ main()pool,err:=sql.Open(mysql,root:roottcp(127.0.0.1:3306)/test)if err!=nil fmt.Println(err.Error()else fmt.Println(数据库连接成功)/更新数据 sql:=update account set username=?where id=?ret,err:=pool.Exec(sql,
17、Go语言,1)if err!=nil fmt.Printf(更新失败:%vn,err)return n,err:=ret.RowsAffected()/操作影响的行数 if err!=nil fmt.Printf(获取影响行数失败:%vn,err)return fmt.Printf(更新成功,影响%d行。n,n)运行结果为:数据库连接成功更新成功,影响1行。3原生方式更新数据原生方式更新数据3GORMGORM更新数据更新数据HasTable(dst interface)booldb.Model()/指定db要运行操作的模型 判断表格是否存在第一条记录func(db*DB)Update(colu
18、mn string,value interface)(tx*DB)/使用回调函数更新更新属性最后一条记录获取所有记录func(db*DB)Save(value interface)(tx*DB)/保存更新值在数据库中,如果值没有主键,将插入它 3GORMGORM更新数据更新数据package mainimport(fmt gorm.io/driver/mysql gorm.io/gorm)type Person struct Id int Name stringfunc main()dsn:=root:roottcp(127.0.0.1:3306)/test?charset=utf8&pars
19、eTime=True&loc=Local db,err:=gorm.Open(mysql.Open(dsn),&gorm.Config)if err!=nil fmt.Println(数据库连接失败,err.Error()if db.Migrator().HasTable(&Person)=true fmt.Println(表格存在,可以操作)var ps Person db.Find(&ps)/查询原始内容 fmt.Println(ps)/打印原始内容 p:=Person db.Where(id=?,1).Take(&p)/select*from people where id=1 p.Na
20、me=更新 db.Save(&p)/update people set name=更新 where id=1 db.Model(Person).Where(id=?,2).Update(name,update)/update people set name=update where id=2 updatePerson:=Person Id:5,Name:updates,db.Model(Person).Where(id?,2).Updates(&updatePerson)/update people set id=5,name=updates where id 2 db.Find(&ps)/再
21、次查询所有 fmt.Println(ps)/再次打印所有内容 运行结果为:表格存在,可以操作1 Go 2 go 3 golang1 更 新 2 update 5 updates04删除数据原生方式删除数据GORM方式删除数据DELETE FROM WHERE 子句 ORDER BY 子句 LIMIT 子句构造sql语句db.Exec().RowsAffected()/RowsAffected返回受更新、插入或删除影响的行数。但并不是每个数据库或数据库驱动程序都支持这一点。影响行数是指定要删除数据的表名称;WHERE子句表示删除操作限定的行条件,如果不指定,则代表删除该表中的所有行;ORDER
22、BY子句表示表中各行将按照子句指定的顺序进行删除,也可以不指定;LIMIT子句用于告知服务器在控制命令被返回到客户端前被删除行的最大值,也可以不指定。4原生方式删除数据原生方式删除数据func(db*DB)Exec(query string,args.any)(Result,error)执行函数package mainimport(database/sql fmt _ main()pool,err:=sql.Open(mysql,root:roottcp(127.0.0.1:3306)/test)if err!=nil fmt.Println(err.Error()else fmt.Print
23、ln(数据库连接成功)/删除数据 sql:=delete from account where id=?ret,err:=pool.Exec(sql,3)if err!=nil fmt.Printf(删除失败:%vn,err)return n,err:=ret.RowsAffected()/操作影响的行数 if err!=nil fmt.Printf(获取影响行数失败:%vn,err)return fmt.Printf(删除成功,影响:%dn行,n)运行结果为:数据库连接成功删除成功,影响1行。4原生方式删除数据原生方式删除数据4GORMGORM删除数据删除数据func(db*DB)Delet
24、e(value interface,conds.interface)(tx*DB)tx=db.getInstance()if len(conds)0 if exprs:=tx.Statement.BuildCondition(conds0,conds1:.);len(exprs)0 tx.Statement.AddClause(clause.WhereExprs:exprs)tx.Statement.Dest=valuereturn tx.callbacks.Delete().Execute(tx)/删除匹配给定的删除值条件,如果该值有主键,则将主键包括在内作为条件判断表格是否存在4GORMG
25、ORM删除数据删除数据package mainimport fmtimport gorm.io/driver/mysql import gorm.io/gormtype Person struct Id int Name stringfunc main()dsn:=root:roottcp(127.0.0.1:3306)/test?charset=utf8&parseTime=True&loc=Local db,err:=gorm.Open(mysql.Open(dsn),&gorm.Config)if err!=nil fmt.Println(数据库连接失败,err.Error()if db
26、.Migrator().HasTable(&Person)=true fmt.Println(表格存在,可以操作)var ps Person db.Find(&ps)/查询原始内容 fmt.Println(ps)/打印原始内容 p:=Person db.Where(id=?,1).Take(&p)/select*from people where id=1 db.Delete(&p)/delete from people where id=1 db.Where(name=?,update).Delete(&Person)/delete from people where name=update db.Find(&ps)/再次查询所有 fmt.Println(ps)/再次打印所有内容 运行结果为:表格存在,可以操作1 更新 2 update 5 updates5 updates谢谢观看谢谢观看