今天这版来说说数据处理,其实处理有很多种方法比如放到缓存,巴拉巴拉。。。。但是我这就说gorm,因为我就用到这了个,以后再用到别的再说别的,保姆式记录日志~
1.准备工作
(1)拥有一个数据库(我说一下我的流程,有的略过)
mysql下载安装->mysql配置->navicat下载安装->创建链接->创建数据库
mysql安装配置:https://www.cnblogs.com/winton-nfs/p/11524007.html(写的可明白了)
navicat:找个破解版的就行
创建链接:打开navicat左上角链接->选择mysql->填写连接名、主机、端口。。。->建表就完事了
2.链接数据库
现在goland的命令行输入:go get -u github.com/jinzhu/gorm(下载包用的)
接下来上代码
import (
"fmt"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
)
var db *gorm.DB
func Init() {
var err error
db, err = gorm.Open("mysql", "用户名:密码@tcp(主机:端口)/数据库名?charset=utf8")
if err!=nil{
panic(err)
}
fmt.Println("success")
}
3.增删改查操作*
先新建一个表(自行解决),再建一个和表对应的结构体,我把这个结构体放在了一个名为data的文件夹下面(user.go)
type user struct {//user用小写来实现私有
Id int `gorm:"primary_key" json:"id"`
Username string `gorm:"username"`
Phone string `gorm:"phone"`
}
func New() user { //创建一个私有user的方法(对user的简单封装)
return user{}
}
func News() user{//创建多个私有user的方法
return user{}
}
(1)增
func main() {
Init()//连接数据库(方法代码如上)
u:=data.New()//创建user结构体
u.Id=2
u.Username="mengyu"
u.Phone="222"
db.Create(u) //赋值之后,增加他们
}
(2)删
func main() {
Init()
db.Delete(u) //删除全部数据
u:=data.New()
db.Delete(&u, "phone LIKE ?", "%3%")//按条件删除phone有3的数据
}
(3)改
Init()
u:=data.New()
u.Id=1//id=1
u.Username="mm"//name=mm
db.Save(&u)//更新为以上信息
db.Model(&u).Where("username = ?", "mm").Update("phone", "1111")//把username=mm对应的phone改为1111
db.Model(&u).Updates(map[string]interface{}{"username": "hello", "phone": “18”})//map更新:更新所有
db.Model(&u).Where("id = ?", 1).Updates(map[string]interface{}{"username": "mengyu", "phone": "11"})//加入条件的map更新
(4)查
- 单个数据的查询
func main() {
Init()//连接数据库(方法代码如上)
u:=data.New()//创建user结构体
db.First(&u)//查询第一条数据
db.Last(&u)//查询最后一条数据
db.Where("id=?", "1").Find(&u)//根据某个条件查询一个值
}
- 多个数据的查询
func main() {
us:=data.News()
db.Find(&us)//查询所有,需要用切片、数组等装
db.Where("phone <= ?", 500).Find(&us)//比较查询
db.Where("phone > ? AND phone < ?",0,500).Find(&us)//一定范围内查询
offset := 2 // 从第几个开始查, 和limit 配合在一起可以实现分页功能
limit := 5 // 要查多少个数据
db.Offset((offset-1) * limit).Limit(limit).Find(&us)
for i :=0;i< len(us);i++{
fmt.Println(us[i])
}
//注意:Offset 是跳过数据的, 所以要查询第一页要写-1,
//写Offset = 1 的时候会跳过第一页
//Offset * Limit ,就跳过的要查询的数据了
网友评论