171 lines
4.1 KiB
Go
171 lines
4.1 KiB
Go
// Example code for Chapter 5.5
|
|
// Purpose is to show to use BeeDB ORM for basic CRUD operations for sqlite3
|
|
package main
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
"github.com/astaxie/beedb"
|
|
_ "github.com/mattn/go-sqlite3"
|
|
"time"
|
|
)
|
|
|
|
var orm beedb.Model
|
|
|
|
type Userinfo struct {
|
|
Uid int `beedb:"PK"`
|
|
Username string
|
|
Department string
|
|
Created string
|
|
}
|
|
|
|
const DB_PATH = "./foo.db"
|
|
|
|
func checkError(err error) {
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
func getTimeStamp() string {
|
|
return time.Now().Format("2006-01-02 15:04:05")
|
|
}
|
|
func insertUsingStruct() int64 {
|
|
fmt.Println("insertUsingStruct()")
|
|
var obj Userinfo
|
|
obj.Username = "Test Add User"
|
|
obj.Department = "Test Add Department"
|
|
obj.Created = getTimeStamp()
|
|
checkError(orm.Save(&obj))
|
|
fmt.Printf("%+v\n", obj)
|
|
return int64(obj.Uid)
|
|
}
|
|
func insertUsingMap() int64 {
|
|
fmt.Println("insertUsingMap()")
|
|
add := make(map[string]interface{})
|
|
add["username"] = "astaxie"
|
|
add["department"] = "cloud develop"
|
|
add["created"] = getTimeStamp()
|
|
id, err := orm.SetTable("userinfo").Insert(add)
|
|
checkError(err)
|
|
fmt.Println("Last row inserted id =", id)
|
|
return id
|
|
}
|
|
|
|
func getOneUserInfo(id int64) Userinfo {
|
|
fmt.Println("getOneUserInfo()")
|
|
var obj Userinfo
|
|
checkError(orm.Where("uid=?", id).Find(&obj))
|
|
return obj
|
|
}
|
|
|
|
func getAllUserInfo(id int64) []Userinfo {
|
|
fmt.Println("getAllUserInfo()")
|
|
var alluser []Userinfo
|
|
checkError(orm.Limit(10).Where("uid>?", id).FindAll(&alluser))
|
|
return alluser
|
|
}
|
|
|
|
func updateUserinfo(id int64) {
|
|
fmt.Println("updateUserinfo()")
|
|
var obj Userinfo
|
|
obj.Uid = int(id)
|
|
obj.Username = "Update Username"
|
|
obj.Department = "Update Department"
|
|
obj.Created = getTimeStamp()
|
|
checkError(orm.Save(&obj))
|
|
fmt.Printf("%+v\n", obj)
|
|
}
|
|
|
|
func updateUsingMap(id int64) {
|
|
fmt.Println("updateUsingMap()")
|
|
t := make(map[string]interface{})
|
|
t["username"] = "updateastaxie"
|
|
//update one
|
|
// id, err := orm.SetTable("userinfo").SetPK("uid").Where(2).Update(t)
|
|
//update batch
|
|
lastId, err := orm.SetTable("userinfo").Where("uid>?", id).Update(t)
|
|
checkError(err)
|
|
fmt.Println("Last row updated id =", lastId)
|
|
}
|
|
|
|
func getMapsFromSelect(id int64) []map[string][]byte {
|
|
fmt.Println("getMapsFromSelect()")
|
|
//Original SQL Backinfo resultsSlice []map[string][]byte
|
|
//default PrimaryKey id
|
|
c, err := orm.SetTable("userinfo").SetPK("uid").Where(id).Select("uid,username").FindMap()
|
|
checkError(err)
|
|
fmt.Printf("%+v\n", c)
|
|
return c
|
|
}
|
|
|
|
func groupby() {
|
|
fmt.Println("groupby()")
|
|
//Original SQL Group By
|
|
b, err := orm.SetTable("userinfo").GroupBy("username").Having("username='updateastaxie'").FindMap()
|
|
checkError(err)
|
|
fmt.Printf("%+v\n", b)
|
|
}
|
|
|
|
func joinTables(id int64) {
|
|
fmt.Println("joinTables()")
|
|
//Original SQL Join Table
|
|
a, err := orm.SetTable("userinfo").Join("LEFT", "userdetail", "userinfo.uid=userdetail.uid").Where("userinfo.uid=?", id).Select("userinfo.uid,userinfo.username,userdetail.profile").FindMap()
|
|
checkError(err)
|
|
fmt.Printf("%+v\n", a)
|
|
}
|
|
|
|
func deleteWithUserinfo(id int64) {
|
|
fmt.Println("deleteWithUserinfo()")
|
|
obj := getOneUserInfo(id)
|
|
id, err := orm.Delete(&obj)
|
|
checkError(err)
|
|
fmt.Println("Last row deleted id =", id)
|
|
}
|
|
|
|
func deleteRows() {
|
|
fmt.Println("deleteRows()")
|
|
//original SQL delete
|
|
id, err := orm.SetTable("userinfo").Where("uid>?", 2).DeleteRow()
|
|
checkError(err)
|
|
fmt.Println("Last row updated id =", id)
|
|
}
|
|
|
|
func deleteAllUserinfo(id int64) {
|
|
fmt.Println("deleteAllUserinfo()")
|
|
//delete all data
|
|
alluser := getAllUserInfo(id)
|
|
id, err := orm.DeleteAll(&alluser)
|
|
checkError(err)
|
|
fmt.Println("Last row updated id =", id)
|
|
}
|
|
func main() {
|
|
db, err := sql.Open("sqlite3", DB_PATH)
|
|
checkError(err)
|
|
orm = beedb.New(db)
|
|
var lastIdInserted int64
|
|
|
|
fmt.Println("Inserting")
|
|
lastIdInserted = insertUsingStruct()
|
|
insertUsingMap()
|
|
|
|
a := getOneUserInfo(lastIdInserted)
|
|
fmt.Println(a)
|
|
|
|
b := getAllUserInfo(lastIdInserted)
|
|
fmt.Println(b)
|
|
|
|
fmt.Println("Updating")
|
|
updateUserinfo(lastIdInserted)
|
|
updateUsingMap(lastIdInserted)
|
|
|
|
fmt.Println("Querying")
|
|
getMapsFromSelect(lastIdInserted)
|
|
groupby()
|
|
joinTables(lastIdInserted)
|
|
|
|
fmt.Println("Deleting")
|
|
deleteWithUserinfo(lastIdInserted)
|
|
deleteRows()
|
|
deleteAllUserinfo(lastIdInserted)
|
|
}
|