xorm操作PostgreSQL數據庫(增刪改查實例) 轉

一、xorm介紹

xorm是一個簡單而強大的Go語言ORM庫.通過它可以使數據庫操作非常簡便。xorm的目標並不是讓你完全不去學習SQL,我們認爲SQL並不會爲ORM所替代,但是ORM將可以解決絕大部分的簡單SQL需求。xorm支持兩種風格的混用。

特性

支持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記錄版本(即樂觀鎖)
驅動支持

xorm當前支持的驅動和數據庫如下:

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 (試驗性支持)
二、下載

      安裝xorm

     go  get github.com/go-xorm/xorm      
      安裝Postgres驅動

     go get github.com/lib/pq                   

三、實例

注意:要先導入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)
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章