博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
xorm操作PostgreSQL数据库(增删改查实例)
阅读量:5815 次
发布时间:2019-06-18

本文共 4208 字,大约阅读时间需要 14 分钟。

hot3.png

一、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 mainimport (    "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_tbltype 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)    }}

 

转载于:https://my.oschina.net/mickelfeng/blog/2961778

你可能感兴趣的文章
青花瓷抓包详细步骤
查看>>
...
查看>>
maven常遇到的问题
查看>>
Zabbix监控网络设备
查看>>
【Spring学习笔记】之【4.4 资源之Resource通配符路径】
查看>>
Unicode 与 UTF-8
查看>>
nginx在windows下安装
查看>>
Bootstrap 3.2.0 源码试读 2014/08/07
查看>>
rabbitmq 在centos下的安装(实战)
查看>>
Spring中装配集合
查看>>
CSS字体中英文名称对照表 CSS常用中文字体英文名称对照表
查看>>
Fastreport.Net用户手册:报表选项
查看>>
Spring Boot教程--Actuator监控介绍
查看>>
Linux学习134 Unit 2
查看>>
shell编程基础(二)
查看>>
LS1012A工控主板基于NXP公司
查看>>
无VLAN配置的交换机的工作原理
查看>>
5、Linux文件和目录管理
查看>>
CSS选择器
查看>>
腾讯云安全专家 Killer 告诉你,企业上云怎么做更安全
查看>>