curd库

源码地址:github.com/azer/crud#c…

作用: Golang的一个简洁的操作关系型数据库的ORM库,具有简单和熟悉的接口

特点:

  • 简单和熟悉的接口
  • 良好的测试,在生产环境运行了两年
  • 具备时间的内置日志

安装

go get github.com/azer/crud

初始化

import (
  "github.com/azer/crud"
  _ "github.com/go-sql-driver/mysql"
)

var DB *crud.DB

func init () {
  var err error
  DB, err = crud.Connect("mysql", os.Getenv("DATABASE_URL"))
  err = DB.Ping()
}
复制代码

定义

type User struct {
  Id int `sql:"auto-increment primary-key"`
  FirstName string
  LastName string
  ProfileId int
}

type Profile struct {
  Id int `sql:"auto-increment primary-key"`
  Bio string `sql:"text"`
}
复制代码

CURD能够实现列的自动转化,比如FirstName(驼峰)转换成first_name(蛇形),仍然可以选择定制的名称

type Post struct {
  Slug string `sql:"name=slug_id varchar(255) primary-key required"`
}
复制代码

如果没有主键,CURD将寻找一个名称为Id,并且类型为整形的字段,将其设置为自动增长的主键

Create & Drop Tables

CreateTables需要结构体的列表,并且确保在数据库中是存在的

err := DB.CreateTables(User{}, Profile{})
err := DB.DropTables(User{}, Profile{})
复制代码

Reset Tables

删除并且重建表

err := DB.ResetTables(User{}, Profile{})
复制代码

SQL选项

CURD试着分辨出最优的配置,同时让我们能够自由选择。

type Tweet struct {
 Text string `sql:"varchar(140) required name=tweet"`
}
复制代码

上面的限制项是文本,不超过140个字符,不为空,改变name字段为tweet 以下为一个列表

Types: int, bigint, varchar, text, date, time, timestamp
auto-increment / autoincrement / auto_increment
primary-key / primarykey / primary_key
required
default='?'
name=?
复制代码

如果想设置结构体中某一项被忽视,直接设置-

type Foo struct {
 IgnoreMe string `sql:"-"`
}
复制代码

Create

创建

user := &User{1, "Foo", "Bar", 1}
err := DB.Create(user)
复制代码

CreateAndRead

创建和读取

user := User{
  FirstName:"Foo"
}

err := DB.CreateAndRead(&user)

user.Id
// => 123
复制代码

Read

1.读一行

user := &User{}
err := DB.Read(user, "SELECT * FROM users WHERE id = ?", 1)
// => SELECT * FROM users WHERE id = 1

fmt.Println(user.Name)
// => Foo
复制代码

2.读多行

users := []*User{}

err := DB.Read(&users)
// => SELECT * FROM users

fmt.Println(len(users))
// => 10
复制代码
  1. 取出特定列
names := []string{}
err := DB.Read(&names, "SELECT name FROM users")
name := ""
err := DB.Read(&name, "SELECT name FROM users WHERE id=1")
totalUsers := 0
err := DB.Read(&totalUsers, "SELECT COUNT(id) FROM users"
复制代码

Update

更新满足条件的列,如果没有匹配的数据,则返回sql.ErrNoRows

user := &User{}
err := DB.Read(user, "SELECT * FROM users WHERE id = ?", 1)

user.Name = "Yolo"
err := DB.Update(user)
复制代码

Delete

删除满足条件的列,如果没有匹配的数据,则返回sql.ErrNoRows

err := DB.Delete(&User{
  Id: 1
})
复制代码

Transactions

使用crud.DBBegin方法开始一个事务,每一个事务都提供下面的方法。

  • Commit
  • Rollback
  • Exec
  • Query
  • Create
  • Read
  • Update
  • Delete
tx, err := DB.Begin()

err := tx.Create(&User{
  Name: "yolo"
})

err := tx.Delete(&User{
  Id: 123
})

err := tx.Commit()
复制代码

Logs

使用Log=curd能够看到日志信息

LOG=crud go run myapp.go
复制代码

Custom Queries

result, err := DB.Query("DROP DATABASE yolo") // or .Exec
复制代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值