2. CRUD 操作

最后更新于:2022-04-02 04:54:32

对象的 CRUD(增删改查) 操作 ~~~ var DB orm.Ormer DB = orm.NewOrm() 创建一个数据库链接 Ormer DB.Insert() 插入一条数据,返回自增 id DB.InsertMulti() 同时插入多条数据,返回插入的条数 DB.Update() 修改操作,返回值为受影响的行数 DB.Read() 从数据库读取数据 DB.ReadOrCreate() 尝试从数据库读取,不存在的话就创建一个 DB.Delete() 删除操作,返回值为受影响的行数 ~~~ 代码实例: ~~~ CREATE TABLE `person` ( `user_id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(260) DEFAULT NULL, `sex` varchar(260) DEFAULT NULL, `email` varchar(260) DEFAULT NULL, PRIMARY KEY (`user_id`) ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 ~~~ ~~~ package main import ( "fmt" "github.com/astaxie/beego/orm" _ "github.com/go-sql-driver/mysql" ) /* +----------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+--------------+------+-----+---------+----------------+ | user_id | int(11) | NO | PRI | NULL | auto_increment | | username | varchar(260) | YES | | NULL | | | sex | varchar(260) | YES | | NULL | | | email | varchar(260) | YES | | NULL | | +----------+--------------+------+-----+---------+----------------+ */ // struct 字段,首字母必须大写 type Person struct { User_id int `orm:"pk"` Username string Sex string Email string } func init() { maxIdle := 30 maxConn := 30 // 创建连接池 err := orm.RegisterDataBase("default", "mysql", "root:root@tcp(127.0.0.1:3306)/test?charset=utf8", maxIdle, maxConn) if err != nil { fmt.Println("connect mysql err : ", err) } // 需要在init中注册定义的model orm.RegisterModel(new(Person)) } func main() { var DB orm.Ormer // 创建一个数据库链接 Ormer DB = orm.NewOrm() p0 := Person{ Username: "person0", Sex: "man", Email: "person0@golang.com", } // 插入一条数据,返回自增 id id, err := DB.Insert(&p0) if err != nil { fmt.Println("insert p0 err : ", err) } fmt.Println("id :", id) p1 := []Person{ {Username: "person1", Sex: "man", Email: "person1@golang.com"}, {Username: "person2", Sex: "man", Email: "person2@golang.com"}, {Username: "person3", Sex: "man", Email: "person3@golang.com"}, {Username: "person4", Sex: "man", Email: "person4@golang.com"}, {Username: "person5", Sex: "man", Email: "person5@golang.com"}, {Username: "person6", Sex: "man", Email: "person6@golang.com"}, } // 同时插入多条数据,返回插入的条数 ids, err := DB.InsertMulti(len(p1), p1) if err != nil { fmt.Println("insert p1 err : ", err) } fmt.Println("ids : ", ids) p2 := Person{User_id: 1} // 查询 err = DB.Read(&p2) if err == orm.ErrNoRows { fmt.Println("查询不到") } else if err == orm.ErrMissPK { fmt.Println("找不到主键") } else { fmt.Println(p2) } p3 := Person{Username: "person7"} // 尝试从数据库读取,不存在的话就创建一个 // 三个返回参数依次为:是否新创建的,对象 Id 值,错误 if created, id, err := DB.ReadOrCreate(&p3, "Username"); err == nil { if created { fmt.Println("New Insert an object. Id:", id) } else { fmt.Println("Get an object. Id:", id) } } p4 := Person{User_id: 4} if DB.Read(&p4) == nil { p4.Username = "Update" p4.Sex = "woman" p4.Email = "update@golang.com" // 修改操作,返回值为受影响的行数 if num, err := DB.Update(&p4); err == nil { fmt.Println("update return num : ", num) } } p5 := Person{User_id: 5} // 删除操作,返回值为受影响的行数 if num, err := DB.Delete(&p5); err == nil { fmt.Println("delete return num : ", num) } } ~~~
';