GORM学习
什么是ORM?
Object | Relational | Mapping |
---|---|---|
对象 | 关系 | 映射 |
程序中的对象/实例(例如Go中的结构实例) | 关系数据库(例如MySQL) |
比如
package mainimport ( "fmt")type Student struct {
id int name string}func main() {
u1 :=Student{
1,"JOJO"} fmt.Println(u1)}main方法打印结果:{
1 JOJO}
我们使用MySQL的原因就是将数据存储到数据库中,MySQL中的数据表就是结构体,数据行就是对象u1,‘字段’就是‘id int’,'name string'这样的字段。
首先按照视频讲解,我们在github中搜索到GORM,进入官网后,查看文档,为了锻炼看文档的能力,这教学视频看到开头,不看也罢!!!!开始看文档,分析我可能用到的要求。
1.连接数据库2.增删改查 3.遍历数据库表的内容//照着这个步骤搜寻知识,有空就全面总结。当然第一步登录github,创建一个账号,然后想一个读起来很6的拼音打上去!我的Username:Xiuluofashi然后在里面找到jinzhu的GORM,打开就能找到GORM官网文档https://gorm.io/docs/
开始正式学习:
下载安装驱动:
go get -u github.com/jinzhu/gormgo get -u
完成后可以开始学习了
1.使用GORM连接数据库
官方文档:
import ( "gorm.io/driver/mysql" "gorm.io/gorm")func main() {
// 参考 https://github.com/go-sql-driver/mysql#dsn-data-source-name 获取详情 dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local" db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})}
连接:
package mainimport ( _ "github.com/go-sql-driver/mysql" "github.com/jinzhu/gorm")type Student struct {
id int name string age int sex string }func main() {
// 这里的信息是我的数据库的信息 dsn := "root:123456@tcp(127.0.0.1:3306)/study?charset=utf8mb4&parseTime=True&loc=Local" // 这里有2个值,一个是 *gorm.DB类型 一个是error类型,需要两个变量来接受 db, err := gorm.Open("mysql",dsn) // err是报错信息需要验证 if err != nil {
panic(err)} // 运行一次结束程序 defer db.Close() // 把结构体和数据表进行对应 db.AutoMigrate(&Student{}) u1 := Student{
id:1, name:"叶良辰", age:19,sex:"男"} db.Create(&u1)}然后我这里连接后,看我的study数据库中的信息还是为空!!!!!(〃>目<)mysql> show tables;Empty set (0.00 sec)也就是说根本没连上,我想是不是端口号弄错了,然后我检查端口show global variables like 'port';+---------------+-------+| Variable_name | Value |+---------------+-------+| port | 3306 |+---------------+-------+1 row in set, 1 warning (0.02 sec)起初以为密码密码输入错了,改了一个值后报错panic: Error 1045: Access denied for user 'root'@'localhost' (using password: YES)那现在的情况就是,账号密码端口都是对的情况下,数据库连上了但是数据录不进去的问题。最后想起来了,之前go get的时候有一个exec;exec: "gcc": executable file not found in %PATH%原来是找错了方向,安装gcc那么就需要MinGW64位版本的软件。脚本之家就能下载。安装完后,配置bin环境变量,使用命令行gcc -v 出来代码就安装上了,然后运行代码,还是一样的问题,得不到解决,弄到这里花了N多个小时却没有解决这种小问题,关键是本人还知道这是学习前的准备工作,卡在了这里!!!!!!很崩溃,但是得牢牢记住一句话--搜集资源,心态稳住,行胜于言该找问题,还是得找问题。毕竟没有得到解决。
好 问题已经得到了解决
GORM操作大全总结
再上一份知识点中,我们想把Student{id:1, Name:"叶良辰", Age:19,Sex:"男"}这数据行放进结构中。不管怎么样都没有数据,这是因为GORM更新后,与视频中的有一些差别,原来的语法和新的GORM操作语法不同,这才多久呢,它就更新了,还出了新的语法,旧写法已经不支持了,除非使用原来老旧的知识点,这属于创建的功能 创建的功能。
不过首先我们要先连接数据库,这个因为更新了,我们没有视频学习,就只能看它的文档了,真的不习惯,之前学习视频才是主力军,但只有文档才是最新的。
1.连接数据库
package mainimport ( "gorm.io/driver/mysql" "gorm.io/gorm")//type Student struct {
Id int `gorm:"primaryKey"` Name string Age int Sex string}func main() {
// dsn:=[username[:password]@][protocol[(address)]]/dbname[?param1=value1&...¶mN=valueN] dsn=data-source-name dsn := "root:123456@tcp(127.0.0.1:3306)/study?charset=utf8mb4&parseTime=True&loc=Local" db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) if err != nil {
panic(err)} //数据对齐 db.AutoMigrate(&Student{}) //defer db.Close() 新的GORM包,这个就不用写了,写了反而报错。 }//运行不报错就成功了
2创建语句
2.1创建单个语句
// 创建记录 stu_01 := Student{
1, "红太郎", 20, "男"} result:=db.Create(&stu_01) // stu_01.ID // 返回插入数据的主键 // res