1、xorm介紹mysql
xorm是一個簡單而強大的Go語言ORM庫.經過它能夠使數據庫操做很是簡便。xorm的目標並非讓你徹底不去學習SQL,咱們認爲SQL並不會爲ORM所替代,可是ORM將能夠解決絕大部分的簡單SQL需求。xorm支持兩種風格的混用。git
特性github
支持Struct和數據庫表之間的靈活映射,並支持自動同步表結構
事務支持
支持原始SQL語句和ORM操做的混合執行
使用連寫來簡化調用
支持使用Id, In, Where, Limit, Join, Having, Table, Sql, Cols等函數和結構體等方式做爲條件
支持級聯加載Struct
支持LRU緩存(支持memory, memcache, leveldb, redis緩存Store)和 Redis緩存
支持反轉,即根據數據庫自動生成xorm的結構體
支持事件
支持created, updated, deleted和version記錄版本(即樂觀鎖)
驅動支持redis
xorm當前支持的驅動和數據庫以下:sql
Mysql: github.com/go-sql-driver/mysql
MyMysql: github.com/ziutek/mymysql/godrv
Postgres: github.com/lib/pq
Tidb: github.com/pingcap/tidb
SQLite: github.com/mattn/go-sqlite3
MsSql: github.com/denisenkom/go-mssqldb
MsSql: github.com/lunny/godbc
Oracle: github.com/mattn/go-oci8 (試驗性支持)
ql: github.com/cznic/ql (試驗性支持)
2、下載數據庫
安裝xormwindows
go get github.com/go-xorm/xorm
安裝Postgres驅動緩存
go get github.com/lib/pq session
3、實例函數
注意:要先導入postgreSQL驅動 _"github.com/lib/pq"
package main import ( "github.com/go-xorm/xorm" _ "github.com/lib/pq" "log" "fmt" ) const ( host = "localhost" port = 5432 user = "postgres" password = "your_password" dbName="your_db_name" ) func main() { user := &UserTbl{ Id:1, Username :"Windows", Sex :1, Info : "操做系統", } SessionUserTest(user) } func getDBEngine() *xorm.Engine { psqlInfo := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable",host,port,user,password,dbName) //格式 engine, err := xorm.NewEngine("postgres", psqlInfo) if err != nil { log.Fatal(err) return nil } engine.ShowSQL() //菜鳥必備 err = engine.Ping() if err != nil { log.Fatal(err) return nil } fmt.Println("connect postgresql success") return engine } //table name 爲user_tbl type UserTbl struct { Id int Username string Sex int Info string } //查詢全部 func selectAll() { var user []UserTbl engine := getDBEngine() engine.SQL("select * from user_tbl").Find(&user) fmt.Println(user) } //條件查詢 func selectUser(name string) { var user []UserTbl engine := getDBEngine() engine.Where("user_tbl.username=?",name).Find(&user) fmt.Println(user) } //能夠用Get查詢單個元素 func selectOne(id int) { var user UserTbl engine := getDBEngine() engine.Id(id).Get(&user) //engine.Alias("u").Where("u.id=?",id).Get(&user) fmt.Println(user) } //添加 func InsertUser(user *UserTbl) bool { engine := getDBEngine() rows,err := engine.Insert(user) if err != nil { log.Println(err) return false } if rows == 0 { return false } return true } //刪除(根據名稱刪除) func DeleteUser(name string) bool { user := UserTbl{ Username:name, } engine := getDBEngine() rows,err := engine.Delete(&user) if err != nil { log.Println(err) return false } if rows == 0 { return false } return true } //利用sql刪除 func DeleteUserBySQL(name string) bool { engine := getDBEngine() result,err := engine.Exec("delete from user_tbl where username=?",name) if err != nil { log.Println(err) return false } rows,err :=result.RowsAffected() if err == nil && rows >0 { return true } return false } //更新 func UpdateUser(user *UserTbl) bool { engine := getDBEngine() //Update(bean interface{}, condiBeans ...interface{}) bean是須要更新的bean,condiBeans是條件 rows,err := engine.Update(user,UserTbl{Id:user.Id}) if err != nil { log.Println(err) return false } if rows > 0 { return true } return false } //利用session進行增刪改 //用session的好處就是能夠事務處理 func SessionUserTest(user *UserTbl) { engine := getDBEngine() session := engine.NewSession() session.Begin() _,err := session.Insert(user) if err != nil { session.Rollback() log.Fatal(err) } user.Username="windows" _,err = session.Update(user,UserTbl{Id:user.Id}) if err != nil { session.Rollback() log.Fatal(err) } _,err = session.Delete(user) if err != nil { session.Rollback() log.Fatal(err) } err = session.Commit() if err != nil { log.Fatal(err) } }