文档章节

xorm操作PostgreSQL数据库(增删改查实例)

mickelfeng
 mickelfeng
发布于 2018/11/27 15:44
字数 838
阅读 238
收藏 0

一、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)
    }
}

 

本文转载自:https://blog.csdn.net/skh2015java/article/details/78814595

mickelfeng

mickelfeng

粉丝 237
博文 2802
码字总数 604377
作品 0
成都
高级程序员
私信 提问
使用xorm工具,根据数据库自动生成 go 代码

使用xorm工具,根据数据库自动生成 go 代码 引入 使用 golang 操作数据库的同学都会遇到一个问题 —— 根据数据表结构创建对应的 struct 模型。因为 golang 的使用首字母控制可见范围,我们经...

万建宁
2018/12/04
430
0
xorm速记卡 Quick Reference

xorm is a very famous golang lib, for operating relation database. Install Documentation godoc-xorm gowalker-xorm Quickstart Get started Import packages Define models Create dat......

go-skyblue
2014/03/10
2.6K
0
Go语言ORM框架 xorm 发布 v0.1.9

xorm是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便。 本次版本发布有如下更新: 1. 新增 postgres 和 mymysql 驱动支持; 2. 在Postgres中支持原始SQL语句中使用 ` 和 ? 符...

lunny
2013/08/08
3.2K
9
xorm v0.1.7 发布,Go语言ORM框架

xorm是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便。 本次版本发布有如下更新: 1.新增IConnectPool接口以及NoneConnectPool, SysConnectPool, SimpleConnectPool三种实现...

lunny
2013/07/03
1K
23
go-xorm支持外键吗

@lunny 你好,想跟你请教个问题:百度也没有找到答案,请问一下go-xorm支持外键吗?比如在结构体中引用结构体,查询外层结构体之后,内部包含的结构体也被赋值,go-xorm目前支持这个吗?谢谢...

pchenghao
2015/07/27
786
1

没有更多内容

加载失败,请刷新页面

加载更多

elasticsearch查询20公里以内的数据并按距离升序排序data es写法

NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();BoolQueryBuilder boolQueryBuilder=new BoolQueryBuilder();//这暂wei加入业务查询条件 queryBuilder.withQue......

为何不可1995
36分钟前
5
0
superset在线pip部署

1、安装依赖sudo yum install gcc libffi-devel python-devel python-pip python-wheel openssl-devel libsasl2-devel openldap-devel报错:没有可用软件包 python-pip。没有可用软件包 ......

阿伦哥-
41分钟前
4
0
photoshop简单使用

PS基本操作与图片格式 photoshop工具 组成 菜单项 工具栏 辅助面板 图片格式 jpg png gif 注: psd photoshop CC链接: https://pan.baidu.com/s/1LVa5R_btSjczLBwskCZidQ 提取码:sc3v 快捷...

studywin
43分钟前
4
0
springboot 整合pageHelper

今天跟大家聊聊springboot整合pageHelp,首先pageHelper是一个缓存式分页,分页步骤如下: 1 pom文件添加依赖 <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelp......

gaofei123
43分钟前
7
0
《DNS攻击防范科普系列1》—你的DNS服务器真的安全么?

DNS服务器,即域名服务器,它作为域名和IP地址之间的桥梁,在互联网访问中,起到至关重要的作用。每一个互联网上的域名,背后都至少有一个对应的DNS。对于一个企业来说,如果你的DNS服务器因...

大涛学弟
44分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部