go语言数据库操作, gorm框架
type User struct{
ID uint `gorm:"primary_key"`
Name string
Age int
Birthday time.Time
AddTime time.Time
}
连接数据库
db, err := gorm.Open("mysql", "用户名:密码@tcp(地址:端口号)/数据库名")
if err != nil {
panic("连接数据库失败")
}
创建表
db.SingularTable(true) //不设置,创建生成的表名都是默认是复数形式后面带s的,设置上这一句话,就不会默认带s了
//db.CreateTable(&User{}) //创建表
表内插入数据
//user := User{Name: "Jinzhu", Age: 18, Birthday: time.Now()}
//db.Create(&user) //插入数据
查询
查询出所有的数据,查询到的结果是个可循环的切片
type User struct{
ID uint `gorm:"primary_key"`
Name string
Age int
Birthday time.Time
}
var user []User
a :=db.Find(&user) #查询出所有的
打印出来查询的东西
for _, a:= range user {
fmt.Println(a)
fmt.Println(a.ID)
}
查询出所有符合条件的数据,查询到的结果是个可循环的切片
var user []User
//select * from user where name="Jinzhu1"
a :=db.Where("name = ?", "Jinzhu1").Find(&user) //Find是查询所有,First查询出一条
for _, a:= range user {
fmt.Println(a)
fmt.Println(a.ID)
}
db.Where("name = ?", "jinzhu").First(&users) //查询出一条符合的数据
db.Where("name <> ?", "jinzhu").Find(&user) //查出name不等于jinzhu的数据
db.Where("name in (?)", []string{"jinzhu", "jinzhu1"}).Find(&user) //查询出name in ("jinzhu", "jinzhu1") 所有数据
db.Where("name LIKE ?", "%jin%").Find(&user) //模糊查询 select * from user where name LIKE "%jin%"
db.Where("name = ? AND age >= ?", "jinzhu", "17").Find(&user) //select * FROM user Where name ="jinzhu" AND age>17
db.Where(&User{Name: "jinzhu", Age: 20}).First(&user) //SELECT * FROM users WHERE name = "jinzhu" AND age = 20 LIMIT 1;
db.Where(map[string]interface{}{"name": "jinzhu", "age": 20}).Find(&users) //SELECT * FROM users WHERE name = "jinzhu" AND age = 20;
db.Where([]int64{1, 2, 3}).Find(&user) //SELECT * FROM users WHERE id IN (20, 21, 22);
用结构体查询的时候,GORM只会与非零条件查询,查询条件中的 0 ,"",false获取他零值,它不会被用来构成查询条件,例如
db.Where(&User{Name: "jinzhu", Age: 0}).Find(&users) // SELECT * FROM users WHERE name = "jinzhu";
查询出来的数据是单条的话
user :=User{}
db.Find(&user) // 查询
fmt.Println(user.ID) //获取使用查询出来的某个字段
更新
单条更新的(包括自动更新的如当前时间的字段)
user :=User{}
db.First(&user) //查询出一条数据
user.Name="334" //给数据赋新值
db.Save(&user) //更新 UPDATE users SET name='334' WHERE id=1;但是如果表中有自动更新的字段,如时间更新当前的时间,那么用Save也会把这些一块更新的
单条更新更新改变字段
user := User{}
db.Model(&user).Update("name","啊") //更新所有的数据 name="啊"
更新符合条件的数据
db.Model(&user).Where("id = ?", 1).Update("name", "hello")
更新所有数据的多个字段
db.Model(&user).Updates(map[string]interface{}{"name": "hello", "age": 18})
更新所有数据的多个字段
db.Model(&user).Updates(User{Name: "hello", Age: 18})
下面这个不会被更新,只会更新非空白的值,即非 0,false ,""等
db.Model(&user).Updates(User{Name: "", Age: 0})
更新字段忽略选定的字段,下面忽略了name omit中的
db.Model(&user).Omit("name").Updates(map[string]interface{}{"name": "321", "age": 118})
更新选定的字段,只更新name字段即Select里面的字段
db.Model(&user).Select("name").Updates(map[string]interface{}{"name": "hello", "age": 18})
批量更新符合条件的数据
db.Table("user").Where("id IN (?)", []int{1, 2}).Updates(map[string]interface{}{"name": "aa", "age": 9})
db.Model(User{}).Where("id IN (?)",[]int{1,2}).Updates(User{Name: "cc", Age: 13})
删除
user := User{}
db.Delete(&user) //删除表里的所有数据了
带条件的删除
db.Where("name LIKE ?", "%jinzhu%").Delete(User{})
go语言数据库操作, gorm框架的更多相关文章
- go语言数据库操作,xorm框架
待续............................................... 连接数据库 db, err := xorm.NewEngine("mysql", ...
- 分享一个以前写的基于C#语言操作数据库的小框架
一:前言 这个是以前写的操作MySQL数据库的小型框架,如果是中小型项目用起来也是很不错的,里面提供Filter.ModelPart.Relationship等机制实现操作数据库时的SQL语句的拼接和 ...
- 基于Gin+Gorm框架搭建MVC模式的Go语言后端系统
文/朱季谦 环境准备:安装Gin与Gorm 本文搭建准备环境:Gin+Gorm+MySql. Gin是Go语言的一套WEB框架,在学习一种陌生语言的陌生框架,最好的方式,就是用我们熟悉的思维去学.作为 ...
- java之Hibernate框架实现数据库操作
之前我们用一个java类连接MySQL数据库实现了数据库的增删改查操作---------MySQL篇: 但是数据库种类之多,除了MySQL,还有Access.Oracle.DB2等等,而且每种数据库语 ...
- IT观察】网络通信、图片显示、数据库操作……Android程序员如何利用开源框架
每个Android 程序员都不是Android应用开发之路上孤军奋战的一个人,GitHub上浩如烟海的开源框架或类库就是前人为我们发明的轮子,有的轮子能提高软件性能,而有的轮子似乎是以牺牲性能为代价换 ...
- Litepal 数据库操作框架的使用 (火)
LitePal是GitHub上一款开源的Android数据库框架. 它採用了对象关系映射(ORM)的模式,将平时开发时最经常使用的一些数据库功能进行了封装.使得开发人员不用编写一行SQL语句就能够完毕 ...
- greenDao:操作数据库的开源框架
greenDAO: Android ORM for your SQLite database 1. greenDao库获取 英文标题借鉴的是greendrobot官网介绍greenDao时给出的Tit ...
- Entity Framework 实体框架的形成之旅--几种数据库操作的代码介绍(9)
本篇主要对常规数据操作的处理和实体框架的处理代码进行对比,以便更容易学习理解实体框架里面,对各种数据库处理技巧,本篇介绍几种数据库操作的代码,包括写入中间表操作.联合中间表获取对象集合.递归操作.设置 ...
- 十三、EnterpriseFrameWork框架核心类库之数据库操作(多数据库事务处理)
本章介绍框架中封装的数据库操作的一些功能,在实现的过程中费了不少心思,针对不同数据库的操作(SQLServer.Oracle.DB2)这方面还是比较简单的,用工厂模式就能很好解决,反而是在多数据库同时 ...
随机推荐
- ccf 201712-4 行车路线(30分超时)
问题描述 小明和小芳出去乡村玩,小明负责开车,小芳来导航. 小芳将可能的道路分为大道和小道.大道比较好走,每走1公里小明会增加1的疲劳度.小道不好走,如果连续走小道,小明的疲劳值会快速增加,连续走s公 ...
- iTOP-4418开发板支持Android4.4/5.1.1系统、Linux3.4.39、QT2.2/4.7/5.7、Ubuntu12.04
核心板参数 尺寸:50mm*60mm 高度:核心板连接器组合高度1.5mm PCB层数:6层PCB沉金设计 4418 CPU:ARM Cortex-A9 四核 S5P4418处理器 1.4GHz 68 ...
- pyenv安装及常用命令
1.pyenv安装 #下载安装脚本curl https://pyenv.run | bash #添加环境变量 echo 'export PATH="/root/.pyenv/bin:$PAT ...
- redis批量灌库
需求:将批量数据灌入redis中 如果通过代码形式将数据灌入redis中,效率比较低,以下将根据redis的特性进行快速的批量灌库 环境:centos7 将数据整理成规定格式的文件,比如: SET k ...
- 2018-2019-2 网络对抗技术 20165325 Exp1 PC平台逆向破解
2018-2019-2 网络对抗技术 20165325 Exp1 PC平台逆向破解(BOF实验) 实验有三个模块: (一)直接修改程序机器指令,改变程序执行流程: (二)通过构造输入参数,造成BOF攻 ...
- SpringMVC整合Thymeleaf3
(1).pom添加相关依赖 <dependency> <groupId>org.thymeleaf</groupId> <artifactId>thym ...
- #20175204 张湲祯 2018-2019-2《Java程序设计》第五周学习总结
20175204 张湲祯 2018-2019-2<Java程序设计>第五周学习总结 教材学习内容总结 -第六章接口与实现要点: -接口: 1.使用关键字interface定义接口. 2.接 ...
- JavaScript 事件委托详解
基本概念 事件委托,通俗地来讲,就是把一个元素响应事件(click.keydown......)的函数委托到另一个元素: 一般来讲,会把一个或者一组元素的事件委托到它的父层或者更外层元素上,真正绑定事 ...
- python笔记06-10
作者:Vamei 出处:http://www.cnblogs.com/vamei 基础06 循环 for循环 举例: range的用法 这个函数的功能是新建一个表.这个表的元素都是整数,从0开始,下 ...
- python之地基(一)
想要建起一座高楼,最重要的就是建一个扎实地基,以下的内容就是地基的一部分,往你用心去阅读,去练习,去掌握. 一.变量 变量是什么?什么是变量?变量有什么好处? 变量是一种使用方便的占位符,用于引用计算 ...