golang mysql orm
个人学习项目, 一个易于使用的mysql-orm
mapping struct to mysql table
golang结构体映射mysql table,以便于后续操作表
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
"github.com/folospace/mysql-go-orm/orm"
)
//mysql db
var db, _ = sql.Open("mysql", "user:[email protected](127.0.0.1:3306)/mydb?parseTime=true&charset=utf8mb4&loc=Asia%2FShanghai")
//user table model
var UserTable = new(User)
type User struct {
Id int `json:"id"`
Name string `json:"name"`
}
func (m *User) Query() *orm.Query {
return new(orm.Query).UseDB(db).FromTable(m)
}
func (*User) TableName() string {
return "user"
}
func (*User) DatabaseName() string {
return "mydb"
}
select query
查询table数据, 填充到各种数据类型中
func main() {
{
var data User //select one user
UserTable.Query().Limit(1).Select(&data)
fmt.Println(data)
}
{
var data []User //select users
UserTable.Query().Limit(5).Select(&data)
fmt.Println(data)
}
{
var data int //select count
UserTable.Query().Limit(1).SelectCount(&data)
fmt.Println(data)
}
{
var data []int //select user.ids
UserTable.Query().Limit(5).Select(&data)
fmt.Println(data)
}
{
var data map[int]User //select map[id]User
UserTable.Query().Limit(5).Select(&data)
fmt.Println(data)
}
{
var data map[int]string //select map[id]name
UserTable.Query().Limit(5).Select(&data)
fmt.Println(data)
}
}
update query
更新表数据
{
//update user set name="hello" where id=1
UserTable.Query().Where(&UserTable.Id, 1).Update(&UserTable.Name, "hello")
}
join and where
连表和where条件
{
//update user join order on user.id=order.user_id
//set order.order_amount=100
//where user.id in (1,2)
UserTable.Query().Join(OrderTable, func(query *orm.Query) {
query.Where(&UserTable.Id, &OrderTable.UserId)
}).
Where(&UserTable.Id, orm.WhereIn, []int{1,2}).
Update(&OrderTable.OrderAmount, 100)
}