- xorm学习
- 文档
GitHub - go-xorm/xorm: Simple and Powerful ORM for Go, support mysql,postgres,tidb,sqlite3,mssql,oracle, Moved to https://gitea.com/xorm/xorm
- 依赖
go get github.com/go-xorm/xorm
- 代码
package main import ( "fmt" "time" _ "github.com/go-sql-driver/mysql" "github.com/go-xorm/xorm" ) // 定义结构体与数据库表名和字段对应 type User struct { Id int64 `xorm:"pk autoincr" json:"id"` // 设置主键 且自增 Name string `xorm:"unique" json:"name"` // 添加唯一索引 Age int `json:"age"` // 默认对应数据库字段age Birthday string `xorm:"birth" json:"birthday"` // 设置数据库字段birth CreateTime time.Time `xorm:"created" json:"createTime"` // created:创建时自动更新时间 UpdateTime time.Time `xorm:"updated" json:"createTime"` // updated:修改时自动更新时间 } var x *xorm.Engine func init() { // 链接数据库 sqlAddr := "root:123456@tcp(127.0.0.1:3306)/mytest?charset=utf8&parseTime=true&loc=Local" var err error x, err = xorm.NewEngine("mysql", sqlAddr) if err != nil { fmt.Println("创建数据库链接失败") return } // 同步数据库表信息 表或字段不存在则创建 err = x.Sync(new(User)) if err != nil { fmt.Println("同步数据库信息失败") return } } func main() { //add() //find() // Limit() //edit() delete() } // 删除 func delete() { // 根据id删除 //i, err := x.Id(1).Delete(&User{}) // 根据条件删除 i, err := x.Where("age=?", 19).Delete(&User{}) if err != nil { fmt.Println("删除失败...", err.Error()) } fmt.Println("删除成功...", i) } // 更新 func edit() { // 根据id更新 //i, err := x.Id(1).Update(&User{Name: "admin123", Age: 199}) // 根据条件更新 i, err := x.Where("id=?", 1).Update(&User{Name: "admin", Age: 17}) if err != nil { fmt.Println("更新失败...", err.Error()) } fmt.Println("更新成功...", i) } // 排序和分页 func Limit() { var user []User // 根据年龄排序 并获取年龄最小的前2条数据 err := x.Asc("age").Limit(2, 0).Find(&user) if err != nil { fmt.Println("查询失败...", err.Error()) } fmt.Println("查询成功...", user) } // 多条件查询 func find() { var user []User // 查询birth=2021-10-13 并且 age>19 err := x.Where("birth=?", "2021-10-13").And("age>?", 19).Find(&user) if err != nil { fmt.Println("查询失败...", err.Error()) } fmt.Println("查询成功...", user) } // 添加 func add() { user := User{Name: "lisi", Age: 18, Birthday: time.Now().String()} i, e := x.Insert(user) if e != nil { fmt.Println("添加失败...", e.Error()) } fmt.Println("添加成功...", i) }
- 测试
- gorm学习
- 文档
https://github.com/go-gorm/gorm https://gorm.io/docs/index.html
- 依赖
go get -u gorm.io/gorm go get -u gorm.io/driver/mysql
- 代码
package main import ( "fmt" "time" "gorm.io/driver/mysql" "gorm.io/gorm" ) // 定义结构体与数据库表名和字段对应 注意结构体Student对应的数据库表名为students // 需要提前在数据库创建好students表 type Student struct { Id int64 `gorm:"primaryKey;autoIncrement" json:"id"` // 设置主键 且自增 Name string `gorm:"unique;not null" json:"name"` // 添加唯一索引 Age int `json:"age"` Class string `gorm:"type:varchar(20);" json:"class"` CreateTime time.Time `json:"createTime"` UpdateTime time.Time `json:"createTime"` } var db *gorm.DB func init() { // 创建数据库链接 sqlAddr := "root:123456@tcp(127.0.0.1:3306)/mytest?charset=utf8mb4&parseTime=true&loc=Local" var err error db, err = gorm.Open(mysql.Open(sqlAddr), &gorm.Config{}) if err != nil { fmt.Println("链接数据库失败", err.Error()) return } } func main() { // add() find() // list // count() //edit() //delete() } // 更新 func delete() { // 根据id更新 tx := db.Where("age=?", 7).Delete(&Student{}) if tx.Error != nil { fmt.Println("更新失败...", tx.Error.Error()) } fmt.Println("更新成功...", tx.RowsAffected) } // 更新 func edit() { // 根据id更新 s := Student{Name: "edit123", Age: 7} tx := db.Model(&Student{}).Where("age=?", 8).Updates(&s) if tx.Error != nil { fmt.Println("更新失败...", tx.Error.Error()) } fmt.Println("更新成功...", tx.RowsAffected) } // 统计 func count() { var count int64 tx := db.Model(&Student{}).Where("class=?", "一年级").Count(&count) if tx.Error != nil { fmt.Println("查询失败...", tx.Error.Error()) } fmt.Println("查询成功...", count) } // 多条 func list() { s := make([]Student, 10) tx := db.Where("class=?", "二年级").Find(&s) if tx.Error != nil { fmt.Println("查询失败...", tx.Error.Error()) } fmt.Println("查询成功...", s) } // 条件查询 func find() { student := Student{} tx := db.Where("name=?", "lisi").First(&student) if tx.Error != nil { fmt.Println("查询失败...", tx.Error.Error()) return } fmt.Println("查询成功...", student) } // 添加 func add() { student := Student{Name: "zhangsan12", Age: 18, Class: "二年级", CreateTime: time.Now(), UpdateTime: time.Now()} tx := db.Create(&student) if tx.RowsAffected == 0 { fmt.Println("添加失败...") return } fmt.Println("添加成功...", tx.RowsAffected) }
- 表结构
- 测试