61396-Go语言程序设计项目化教程(微课版)6.1 数据库基本操作_第1页
61396-Go语言程序设计项目化教程(微课版)6.1 数据库基本操作_第2页
61396-Go语言程序设计项目化教程(微课版)6.1 数据库基本操作_第3页
61396-Go语言程序设计项目化教程(微课版)6.1 数据库基本操作_第4页
61396-Go语言程序设计项目化教程(微课版)6.1 数据库基本操作_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

数据库基本操作原生方式操作数据库GORM框架介绍01.02.目录GORM常用操作03.结构体定义表字段GORM创建数据表04.05.索引和复合主键06.01原生方式操作数据库下载依赖关系连接数据库创建数据表Go语言程序操作数据库,是通过database/sql包以及第三方实现database/sql/driver接口的数据库驱动包共同完成的。database/sql包是Golang的标准库之一,它提供了一系列接口方法,用于访问关系型数据库。database/sql包不会提供数据库特有的方法,在使用database/sql包时必须注入至少一个数据库驱动特有的方法交给注入的数据库驱动去实现。在使用Go语言开发信息系统的过程中,我们通常会使用到以下数据库:MySQL、MariaDB、PostgreSQL、SQlite和SQLServer。1原生方式操作数据库Go语言程序操作数据库1原生方式操作数据库MariaDB的下载地址为:/download/1原生方式操作数据库MySQL的下载地址为:/downloads/installer/1原生方式操作数据库数据表创建数据表连接连接数据库依赖下载依赖关系1原生方式操作数据库goget-u/go-sql-driver/mysql下载依赖关系注:/go-sql-driver/mysql为用于下载Go的数据库/sql包的MySQL驱动程序的地址命令goget会自动从一些主流公用代码仓库(比如GitHub)下载目标代码包,并把它们安装到环境变量GOPATH包含的第1工作区的相应目录中-u参数会让命令利用网络来更新已有代码包及其依赖包。默认情况下,该命令只会从网络上下载本地不存在的代码包,而不会更新已有的代码包1原生方式操作数据库funcOpen(driverName,dataSourceNamestring)(*DB,error)连接数据库在Go语言中database/sql包中提供了Open()函数来连接数据库。driverName:表示指定的数据库dataSourceName:表示指定的数据源,通过Open()函数打开指定的数据库和数据源,一般至少要包括数据库文件名和(可能的)连接信息*DB:表示返回的数据库对象,可以被多个go进程同时使用,并且会维护自身的闲置连接池。这样一来,Open函数只需要调用一次,很少需要关闭DB1原生方式操作数据库func(db*DB)Exec(querystring,args...interface{})(Result,error)创建数据表Go语言中使用Exec()函数来创建数据表querystring:表示要插入表中的字符串args:表示query中的占位参数Result:表示结果集,Exec执行一次命令(包括查询、删除、更新、插入等),返回的Result是对已执行的SQL命令的总结,数据库查询的时候,都会有结果集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:="createtableaccount("+"idintprimarykey,"+"usernamevarchar(50),"+"balancedouble)"_,err=pool.Exec(sql)iferr!=nil{fmt.Println(err.Error())}else{fmt.Println("数据库创建成功")}deferpool.Close()}运行结果为:数据库连接成功数据库创建成功1原生方式操作数据库02GORM框架介绍ORM的具体定义ORM的整体架构核心原则GORM的特性ORM(ObjectRelationalMapping),即对象关系映射用于实现面向对象编程语言里不同类型系统的数据之间的转换作用是映射数据库与对象之间的关系,方便我们在操作数据库时不用去写复杂的SQL语句,把对数据库的操作上升到对于对象的操作。2GORM框架介绍Go语言本身自带的database/sql包:需要编写大量复杂的SQL语句生产环境中:使用GORM标准框架来操作数据库GORM=Go+ORM2GORM框架介绍O(Object,对象模型):实体对象,即在程序中根据数据表结构建立的一个个实体(Entity)R(Relation,关系型数据库的数据结构):建立的数据库表M(Mapping,映射):从R(数据库)到O(对象模型)的映射,常用XML文件来表示映射关系ORM的具体定义简单:以最基本的形式建模数据,相较于Go语言本身去直接操作SQL要传达性:数据库结构要使用尽可能被人理解的语言进行文档化精确性:基于数据模型创建正确标准化的结构ORM的整体架构基于以下3个核心原则全功能ORM关联(HasOne,HasMany,BelongsTo,ManyToMany,多态,单表继承)Create,Save,Update,Delete,Find中钩子方法支持

Preload、Joins

的预加载事务,嵌套事务,SavePoint,RollbackToSavedPoint批量插入,FindInBatches,Find/CreatewithMap,使用SQL表达式、ContextValuer进行CRUD2GORM框架介绍ORM的特性SQL构建器,Upsert,数据库锁,Optimizer/Index/CommentHint,命名参数,子查询复合主键,索引,约束AutoMigration自定义Logger灵活的可扩展插件API:DatabaseResolver(多数据库,读写分离)、Prometheus…每个特性都经过了测试的重重考验开发者友好2GORM框架介绍ORM的特性03GORM常用操作GORM的安装数据库连接数据库基本操作goget-ugorm.io/gorm //下载安装GORM的核心库goget-ugorm.io/driver/mysql //mysql驱动$goget-ugorm.io/driver/sqlite //sqllite的驱动$goget-ugorm.io/driver/postgres //postgres的驱动GORM的安装下载驱动包在Golang中连接不同的数据就需要使用不同的driver驱动。GORM官方支持的数据库类型有MySQL、PosgreSQL、Sqlite、SQLServer等。3GORM常用操作3GORM常用操作import("gorm.io/gorm""gorm.io/driver/mysql")导入驱动程序数据库基本操作CRUD增加(create)查询(read)修改(update)删除(delete)packagemainimport("fmt""gorm.io/driver/mysql""gorm.io/gorm")funcmain(){db,err:=gorm.Open(mysql.Open("root:root@tcp(:3306)/test"),&gorm.Config{})iferr!=nil{fmt.Println("数据库连接失败")}else{fmt.Println("数据库连接成功")fmt.Println(db.Logger)}}运行结果为:数据库连接成功&{0xc000181e50{200mstruefalse3}%s3GORM常用操作04结构体定义表字段映射规则结构体名字对应规则模型定义规则字段标签设置规则4结构体定义表字段遇到其他大写字母变为小写并且在前面加下划线第一个大写字母变为小写连着的几个大写字母,只有第一个遵循上面的两条规则,其他的大写字母转为小写,不加下划线,遇到小写,前面的第一个大写字母变小写并加下划线复数形式使用gorm.Model需注意的规则gorm.Model是一个包含了ID、CreatedAt、UpdatedAt、DeletedAt四个字段的Golang结构体。在使用结构体定义表字段时,可以直接使用gorm.Model定义,也可以将它嵌入到自己的模型中(自己定义的struct),也可以不使用gorm.Model,自行定义模型。由于GORM是使用的ORM映射,所以需要定义要操作的表的Model。4结构体定义表字段//第一个大写字母变为小写,转为复数User=>users首字母小写,复数;UserInfo=>user_infos;DBUserInfo=>db_user_infos;DBXXXXUserInfo=>dbxxxx_user_infos。//结构体字段名和列名的对应规则是列名是字段名的蛇形小写Name-->name;CreatedTime-->create_time;可以通过gorm标签指定列名,AnimalIdint64gorm:"column:beast_id"。基本模型定义gorm.Model,包括字段ID、CreatedAt、UpdatedAt、DeletedAt,只需要在自己的模型中指定gorm.Model匿名字段,即可使用上面的四个字段。ID:主键自增长;CreatedAt:用于存储记录的创建时间;UpdatedAt:用于存储记录的修改时间;DeletedAt:用于存储记录的删除时间。模型定义规则4结构体定义表字段声明model时,tag是可选的。需要注意的是:tag名大小写不敏感,建议使用camelCase风格。字段标签设置规则标签名说明column指定db列名type列数据类型,推荐使用兼容性好的通用类型,例如:所有数据库都支持bool、int、uint、float、string、time、bytes并且可以和其他标签一起使用,例如:notnull、size、autoIncrement…,像varbinary(8)这样指定数据库数据类型也是支持的。在使用指定数据库数据类型时,它需要是完整的数据库数据类型,如:MEDIUMINTUNSIGNEDnotNULLAUTO_INCREMENTsize指定列大小,例如:size:2564结构体定义表字段标签名说明primaryKey指定列为主键unique指定列为唯一default指定列的默认值precision指定列的精度scale指定列大小notnull指定列为NOTNULLautoIncrement指定列为自动增长autoIncrementIncrement自动步长,控制连续记录之间的间隔embedded嵌套字段embeddedPrefix嵌入字段的列名前缀comment迁移时为字段添加注释check创建检查约束,例如check:age>13,查看约束获取详情4结构体定义表字段标签名说明autoCreateTime创建时追踪当前时间,对于int字段,它会追踪秒级时间戳,您可以使用nano/milli来追踪纳秒、毫秒时间戳,例如:autoCreateTime:nanoautoUpdateTime创建/更新时追踪当前时间,对于int字段,它会追踪秒级时间戳,您可以使用nano/milli来追踪纳秒、毫秒时间戳,例如:autoUpdateTime:milliindex根据参数创建索引,多个字段使用相同的名称则创建复合索引,查看索引获取详情uniqueIndex与index相同,但创建的是唯一索引<-设置字段写入的权限,<-:create只创建、<-:update只更新、<-:false无写入权限、<-创建和更新权限->设置字段读的权限,->:false无读权限-忽略该字段,-无读写权限4结构体定义表字段05GORM创建数据表初始化连接GORM创建表5GORM创建数据表配置MySQL连接参数username:="root"//账号password:="root"//密码host:=""//数据库地址,可以是ip或者域名port:=3306//数据库端口Dbname:="codebaoku"//数据库名数据库连接串dsn{username}:{password}@tcp({host}:{port})/{Dbname}?charset=utf8&parseTime=True&loc=Local连接Mysqldb,err:=gorm.Open(mysql.Open(dsn),&gorm.Config{})GORM创建表db.AutoMigrate(&tablename{})db.Set("gorm:table_options","ENGINE=InnoDB").CreateTable(&User{})//设置表属性在GORM因为其支持模型创建,所以支持数据模型同步的方式创建表。数据模型同步即先创建一个model,然后使用GORM支持的自动迁移模式就可以根据model直接生成表项。当需要调整表内容时,只修改model即可,GORM的自动迁移功能可以始终让数据表保持最新。AutoMigrate会创建表、缺少的外键、约束、列和索引,并且会更改现有列的类型(如果其大小、精度、是否为空可更改),但不会删除未使用的列,可以保护数据。5GORM创建数据表funcmain(){username:="root"password:="root"host:=""port:=3306Dbname:="test"dsn:=fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local",username,password,host,port,Dbname)db,err:=gorm.Open(mysql.Open(dsn),&gorm.Config{})iferr!=nil{fmt.Println("数据库连接失败",err.Error())}db.Set(“gorm:table_options”,“ENGINE=INNODB”).Migrator().CreateTable(&User{})//创建users表,并设置表的存储引擎为InnoDB}packagemainimport("fmt""gorm.io/driver/mysql""gorm.io/gorm")typeUserstruct{gorm.ModelNamestring}5GORM创建数据表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(&User{})==false{db.AutoMigrate(&Person{})fmt.Println("表格创建成功")}}gorm默认的复数形式不是简单的加s或es,而是根据其词的意义来加的,对特殊的词进行了特殊处理。5GORM创建数据表06索引和主键索引定义索引优势多种索引自增主键复合主键6索引和复合主键索引索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性;可以大大加快数据的检索速度,这也是创建索引的最主要的原因;可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义;在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间;通过使用索引,可以

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论