Base on go-sql-driver/mysql.
Get Started
import (
"database/sql"
"github.com/folospace/go-mysql-orm/orm"
)
var db, _ = orm.OpenMysql("user:password@tcp(127.0.0.1:3306)/mydb?parseTime=true&charset=utf8mb4&loc=Asia%2FShanghai")
var UserTable = new(User)
type User struct {
Id int `json:"id"`
Name string `json:"name"`
}
func (*User) Connections() []*sql.DB {
return []*sql.DB{db}
}
func (*User) DatabaseName() string {
return "mydb"
}
func (*User) TableName() string {
return "user"
}
func (u *User) Query() *orm.Query[*User] {
return orm.NewQuery(UserTable).WherePrimaryIfNotZero(u.Id)
}
func main() {
UserTable.Query().CreateTable()
UserTable.Query().CreateStruct()
UserTable.Query().Insert(&User{Name:"john"})
user, _ := UserTable.Query().Get(1)
user.Query().Update(&UserTable.Name, "john 2")
}
select
users, _ := UserTable.Query().Where(&UserTable.Name, "john").Gets()
count, _ := UserTable.Query().GetCount()
var userNameKeyById map[int]string
UserTable.Query().Select(&UserTable.Id, &UserTable.Name).GetTo(&userNameKeyById)
var usersMapkeyByName map[string][]*User
UserTable.Query().Select(&UserTable.Name, UserTable).GetTo(&usersMapkeyByName)
update | delete | insert
UserTable.Query().WherePrimary(1).Update(&UserTable.Name, "john 2")
UserTable.Query().Delete(1, 2, 3)
_ = UserTable.Query().Insert(&User{Name: "han"}).LastInsertId
join
UserTable.Query().Join(OrderTable, func (query *orm.Query[*User]) *orm.Query[*User] {
return query.Where(&UserTable.Id, &OrderTable.UserId)
}).Select(UserTable).Gets()
transaction
_ = UserTable.Query().Transaction(func (query *orm.Query[*User]) error {
newId := query.Insert(&User{Name: "john"}).LastInsertId
fmt.Println(newId)
return errors.New("I want rollback")
})
subquery
subquery := UserTable.Query().Where(&UserTable.Id, 1).SubQuery()
UserTable.Query().Where(&UserTable.Id, orm.WhereIn, subquery).Gets()
UserTable.Query().InsertSubquery(subquery)
UserTable.Query().Join(subquery, func (query *orm.Query[*User]) *orm.Query[*User] {
return query.Where(&UserTable.Id, orm.Raw("sub.id"))
}).Gets()