GROM学习之路(一)

一、定义

解释:相当于UCML平台的对应关系,将数据库中的数据对应成对象实例。

二、Orm的执行流程

1、导入包;

import ("github.com/astaxie/beego/orm"_ "github.com/go-sql-driver/mysql"
)

2、注册驱动和数据库;

 dsn := "root:root@tcp(localhost:3306)/testorm?charset=utf8mb4&parseTime=true&loc=PRC"orm.RegisterDriver("mysql", orm.DRMySQL)    //beego中自己注册,可以省略注册这一项orm.RegisterDataBase("default", "mysql", dsn) //第一个参数为别名,第二个参数为数据库

4、定义数据库模型(结构体) model;

type User struct {ID     intName   stringGender boolTel    string
}

5、注册数据模型;

type User struct {ID     intName   stringGender boolTel    string
}orm.RegisterModel(&User{})                    //或者new(User),注册模型orm.RunCommand()    //RunCommand运行orm.RunSyncdb("default", true, true) //第一个参数为别名,第二个参数为判断是否为强制同步,第三个参数为是否显示执行过程

6、操作,同步表结构,数据:增删查改;

go run main.go  orm   //查看orm可操作的命令



三、ORM的操作

1、tag标签的更改字段名字

2、相关函数

func (m *UserMode) TableName() string {return "user"
} //更换表的默认名字func (m *UserMode) TableIndex() [][]string {return [][]string{{"ID"},{"Name"},{"ID", "Name"},}
} //创建联合索引
func (m *UserMode) TableEngine() string {return "myisam"
} //修改储存方式

3、增删查改

(1)增加对象数据到数据库中

package mainimport ("fmt""github.com/astaxie/beego/orm"_ "github.com/go-sql-driver/mysql""time"
)type User struct {ID       int        `orm:"column(id);pk;auto;"`Name     string     `orm:"column(name);size(8)"`Gender   bool       `orm:"column(gender)"`Tel      string     `orm:"column(tel);size(11)"`Birthday *time.Time `orm:"type(date)"`
}func main() {t, _ := time.Parse("2006-01-02", "2013-01-03") //时间刷新必须为2006-01-02 15:04:05user := &User{Name:     "yang",Gender:   true,Tel:      "13253647586",Birthday: &t,}dsn := "root:root@tcp(localhost:3306)/testorm?charset=utf8mb4&parseTime=true&loc=PRC"orm.RegisterDriver("mysql", orm.DRMySQL)      //beego中自己注册,可以省略注册这一项orm.RegisterDataBase("default", "mysql", dsn) //第一个参数为别名,第二个参数为数据库orm.RegisterModel(&User{})                    //或者new(User),注册模型ormer := orm.NewOrm()                         //创建orm对象fmt.Printf("%#v\n", user)ormer.Insert(user) //将user对象插入到数据库中}

增加多个对象到数据库中

package mainimport ("fmt""github.com/astaxie/beego/orm"_ "github.com/go-sql-driver/mysql""time"
)type User struct {ID       int        `orm:"column(id);pk;auto;"`Name     string     `orm:"column(name);size(8)"`Gender   bool       `orm:"column(gender)"`Tel      string     `orm:"column(tel);size(11)"`Birthday *time.Time `orm:"type(date)"`
}func main() {t, _ := time.Parse("2006-01-02", "2013-01-03") //时间刷新必须为2006-01-02 15:04:05dsn := "root:root@tcp(localhost:3306)/testorm?charset=utf8mb4&parseTime=true&loc=PRC"orm.RegisterDriver("mysql", orm.DRMySQL)      //beego中自己注册,可以省略注册这一项orm.RegisterDataBase("default", "mysql", dsn) //第一个参数为别名,第二个参数为数据库orm.RegisterModel(&User{})                    //或者new(User),注册模型ormer := orm.NewOrm()                         //创建orm对象var users []*User = make([]*User, 3, 3)for i := 0; i < 3; i++ {user := &User{Name:     fmt.Sprintf("user%d", i),Gender:   true,Tel:      "13253647586",Birthday: &t,}users[i] = user}fmt.Println(ormer.InsertMulti(1, users)) //第一个参数指执行几个对象插入(从0开始)
}

对象不存在的时候创建

 ormer.ReadOrCreate(user, "Name")

根据user名字查看,如果数据库中没有这一项,则创建这一条数据。

(2)读取用户

根据某一个条件

 ormer := orm.NewOrm()                         //创建orm对象user := &User{ID: 2,}err := ormer.Read(user) //根据用户ID查询数据库填充user对象fmt.Println(user, err)

多条件查询,必须保证数值为唯一

 ormer := orm.NewOrm()                         //创建orm对象user := &User{ID:   1,Name: "yang1",}err := ormer.Read(user, "ID", "Name") //根据用户ID和Name多个条件查询数据库查询填充user对象fmt.Println(user, err)

(3)更改

 ormer := orm.NewOrm()                         //创建orm对象user := &User{ID: 1,}ormer.Read(user) //优先填充useruser.Name = "修改"ormer.Update(user) //对user进行修改

(4)删除

 ormer := orm.NewOrm()                         //创建orm对象user := &User{Name: "yang1",}ormer.Read(user, "Name")ormer.Delete(user) //删除Name为yang1的数据

4、查询扩展

(1) QueryTable

 ormer := orm.NewOrm()                         //创建orm对象queryset := ormer.QueryTable(&User{})         //&User{}对象或者"user"(表名)或者new(User)获取queryseter对象fmt.Println(queryset.Count())                 //查询行数var users []*Userqueryset.All(&users)for k, v := range users {fmt.Println(k, v)}

Filter操作的方法,加字母i忽略大小写

 ormer := orm.NewOrm()                                          //创建orm对象queryset := ormer.QueryTable(&User{})                          //&User{}对象或者"user"(表名)或者new(User)获取queryseter对象fmt.Println(queryset.Filter("id__iexact", 1).Count())          //查询id为1的值,可以省略exact的值fmt.Println(queryset.Filter("name__contains", "user").Count()) //查询包含user的数据库字段数fmt.Println(queryset.Filter("name__startswith", "y").Count())  //查询开始为y的值fmt.Println(queryset.Filter("name__endswith", "y").Count())    //查询结束为y的值fmt.Println(queryset.Filter("id__in", []int{1, 2, 3}).Count()) //判断id在切片中的数量

不等于

 fmt.Println(queryset.Exclude("name__iexact", "user").Count()) //查询不包含user的值

多重条件

 fmt.Println(queryset.Filter("id__gt", 1).Filter("id__lt", 3).Count()) //查询id大于1小于3的值

分页

ormer := orm.NewOrm()                         //创建orm对象squeryset := ormer.QueryTable(&User{})         //&User{}对象或者"user"(表名)或者new(User)获取queryseter对象var users []*Userqueryset.Limit(3).Offset(2).All(&users)for _, v := range users {fmt.Println(v)}

排序

 ormer := orm.NewOrm()                         //创建orm对象squeryset := ormer.QueryTable(&User{})         //&User{}对象或者"user"(表名)或者new(User)获取queryseter对象var users []*User//queryset.OrderBy("-id").All(&users)        //按照id逆序排列输出,把-号去掉就按照正序排列queryset.OrderBy("id", "Name").All(&users) //按照多个条件排序for _, v := range users {fmt.Println(v)}

复杂条件定义

ormer := orm.NewOrm()queryset := ormer.QueryTable(&User{})//复杂条件的定义, name like '%kk%' and (tel like '152%' or tel like '158%')cond := orm.NewCondition() //创建一个Condition对象conTel := orm.NewCondition()conTel = conTel.Or("name__iexact", "yang").Or("name__iexact", "user0")cond = cond.And("id", 1).AndCond(conTel)var users []*Userqueryset.SetCond(cond).All(&users)for _, v := range users {fmt.Println(v)}

5、批量删除、修改

 ormer := orm.NewOrm()queryset := ormer.QueryTable(&User{})queryset.Filter("id__gt", 4).Update(orm.Params{"name": "kk2"}) //把id大于4的name全部修改为kk2queryset.Filter("id__gt", 7).Delete()

将整数相加

6、原始语句查询

(1)直接使用sql.db

db, err := orm.GetDB("default")if err != nil {fmt.Println(err)}db.QueryRow("name").Scan()db.Exec(...)

(2) orm包

 ormer := orm.NewOrm()rawseter := ormer.Raw("insert into user(name,gender,Birthday) values (?,?,?)", "test", true, &t)fmt.Println(rawseter.Exec())

查询后获取值

 ormer := orm.NewOrm()var user *Userrawseter := ormer.Raw("select * from user where id =?", 2)rawseter.QueryRow(&user)fmt.Println(user)

返回切片

 ormer := orm.NewOrm()var users []orm.Paramsrawseter := ormer.Raw("select * from user ")rawseter.Values(&users)for _, v := range users {fmt.Println(v["name"])}

orm启动事务

将cmdb中的修改为orm模式

同步数据库操作

如果看完对自己有所帮助,请点赞支持,谢谢大家

GROM学习之路(一)相关推荐

  1. Redis学习之路(一)--下载安装redis

    redis学习之路--下载安装redis windows安装redis 1.下载redis 2.安装 3.查看是否安装成功 windows安装redis 1.下载redis 网址:https://gi ...

  2. 前端Vue学习之路(二)-Vue-router路由

    Vue学习之路 (二) Vue-router(基础版) 一.增加静态路由 二.动态路由+路由嵌套+404页面 三. 编程式导航 四.命名路由 五.命名视图 六.重定向和起别名 1.重定向 2.起别名 ...

  3. 前端Vue学习之路(一)-初识Vue

    Vue学习之路 (一) 1.引言 2.更换npm国内镜像源 3.用npm下载Vue 4.Vue全家桶 5.使用命令创建项目 5.推荐插件 6.推荐网站 7.学习扩展 1.引言 先安装node.js环境 ...

  4. 学习之路-现代密码学基础-001

    学习之路-现代密码学基础-第一章密码学概论 转载于:https://www.cnblogs.com/vegetables-Adanos/p/5371420.html

  5. 拿下斯坦福和剑桥双offer,00后的算法学习之路

    董文馨,00后,精通英语,西班牙语.斯坦福大学计算机系和剑桥大学双Offer,秋季将进入斯坦福大学学习. 10岁开始在国外上学:12岁学Scratch: 13岁学HTML & CSS: 14岁 ...

  6. Markdown学习之路

    Markdown学习之路 作者:CFishHome 转载请注明地址:https://blog.51cto.com/12731497/2164274 Markdown是什么? Markdown是一个 W ...

  7. [EntLib]微软企业库5.0 学习之路——第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——上篇...

    本文是为后面的学习之路做铺垫,简单介绍下企业库中的Validation模块的一些相关知识,包括Validation模块的简介.用途.使用方法.默认提供的多种验证器的介绍等. 一.简介及用途 在实际的项 ...

  8. 转载: Qt 学习之路 2归档

    Qt 学习之路 2归档 http://www.devbean.net/2012/08/qt-study-road-2-catelog/

  9. python之路 mysql 博客园_教为学:Python学习之路(二):MySQLdb的几种安装方式,以及用Python测试连接MySql...

    教为学:Python学习之路(二):MySQLdb的几种安装方式,以及用Python测试连接MySql Easy_install安装MySQLdb 很简单,以至于我不晓得该怎么说.一句话. sodu ...

最新文章

  1. ISV页面中获取当前用户信息
  2. 用了ReSharpe硬是爽
  3. python join函数_一行 Python 代码能实现这么多丧心病狂的功能?
  4. Insider Dev Tour 2019 | 以技术之力,展现传承魅力
  5. python开学吧真假,开学第一课,课课有总结
  6. python受欢迎的原因是什么?
  7. 【最小生成树】Prim算法和Kruskal算法的区别对比
  8. 【转】使用Boost Graph library(二)
  9. 斯坦福大学自然语言处理第三课“最小编辑距离(Minimum Edit Distance)”
  10. 使用Sharepoint Services 3.0构建基本网站
  11. 计算机物联网工程学什么,物联网工程主要学什么 物联网工程专业课程有哪些...
  12. 企业运营管理体系是什么?
  13. 03、单线通讯—SIF通讯协议(一线通)案例二
  14. 将类似html数据打印机,白激光打印机的工作原理.doc
  15. 日本财险容灾案例揭示小公司的容灾之道
  16. linux系统的超级管理员,系统的超级管理员:root《 Linux 文件与目录权限 》
  17. 万字长文,带你入门异步编程
  18. 关于从3维空间进入4维空间的想法
  19. 迪士尼2016年压轴巨作---《海洋奇缘》观后感
  20. 对冲基金到底是什么:细数对冲基金的七种武器

热门文章

  1. KBengine常见错误总结
  2. kbengine源码_kbengine mmo源码(完整服务端源码+资源+完整客户端源码)
  3. python怎么遍历文件夹内的删除文件_python遍历文件夹并删除特定格式文件的示例...
  4. 使用SymPy求微分方程
  5. 分享计算机专业学习路线(转)
  6. XXX不是内部或外部命令,也不是可运行的程序或批处理文件的解决
  7. if语句计算狗狗年龄相当于人类年龄的多少?
  8. Element-UI+Vue使用cell-style=“cellStyle“改变单元格字体样式
  9. Customizable constraint systems for succinct arguments学习笔记(1)
  10. 功能安全function safety 和SOTIF区别