Golang ORM + PostgreSQL

Golang 的 ORM 框架有很多,我这里使用的国产的 xorm [http://xorm.io/], 它包含了一个命令行工具用以从数据库生成databean。

PostgreSQL 配置

  1. 在 $PGDATA 指向的文件夹里有一个文件 postgresql.conf, 参数listen_addresses 可以配置数据库的监听IP地址,默认值为 localhost , 如果把它的值设为 * 符号,表示监听全局。

    我这里把它的值设为 * ,方便Golang对数据库进行连接。
    更多参数说明可以查看手册:http://www.postgres.cn/docs/9.3/runtime-config-file-locations.html

  1. postgresql.conf 文件所在目录下,有一个文件 pg_hba.conf,它用以配置连接数据库的用户认证。它主要分为3个类别:local Unix domain socketIPV4 connectIPV6 connect

    TYPE 一列,可以配置为 localhosthostsslhostnossl

    ADDRESS 一列,如果想要指向一个唯一主机,IPV4地址为:IP地址/32,IPV6地址为:IP地址/128

    METHOD 一列,可以配置 trust, reject, md5, password等, passwordmd5 的区别是一个明文传输,一个加密传输。

    更多配置说明可以参考手册:http://www.postgres.cn/docs/9.3/auth-pg-hba-conf.html

    以下是配置示例:

    1
    2
    3
    4
    5
    6
    local  all      aboo                       md5

    host all all 127.0.0.1/32 md5
    host db_test aboo 192.168.0.102/32 md5

    host all all ::1/128 md5

xorm

  • 添加 xorm 库:

    1
    go get github.com/go-xorm/xorm
  • 添加Golang的PostgreSQL驱动 lib\pg 库:

    1
    go get github.com/lib/pq
  • 下载 xorm\cmd 工具:

    1
    go get github.com/go-xorm/cmd/xorm

    下载完之后进入到该目录,执行 go build 生成脚本,方便以后生成数据Bean用。在构建这个脚本前,本地有 golang.org\x\cryptogolang.org\x\net 2个库,如果没有可以从GitHub下载然后添加到 GOPATH 中,否则无法成功。

    更多 xorm 相关信息可以到它官网查看:http://xorm.io

    在这里推荐一个Go依赖包下载工具 gopm : https://gopm.io

CRUD

  1. 现在数据库 db_test 中添加一个名为 tb_user 的表。
  2. 使用 xorm 的命令行工具生成表 tb_user 的数据Bean,然后添加到项目中。
  3. 为了全局能够操作同一数据库,需要使用一个单例来维护 xorm 的实例,在单例里面连接并初始化数据库。

    connectInfo := "user=aboo password=666666 dbname=db_test sslmode=disable host=192.168.0.102 port=5432"
    eng,err := xorm.NewEngine("postgres", connectInfo)
    
    if err != nil {
        logs.Info("connect db fail: ", err)
        return
    }
    logs.Info("connect db success")
    
    //连接池的空闲数大小
    eng.SetMaxIdleConns(30)
    //设置最大打开连接数
    eng.SetMaxOpenConns(30)
    //数据库操作log打印
    eng.ShowSQL(true)
    eng.Logger().SetLevel(core.LOG_INFO)
    

    记得要导入驱动: _ "github.com/lib/pq"

  4. 查询方法: Get方法Find方法Rows方法
  5. 插入方法:Insert方法InsertOne方法
  6. 更新方法:Update方法
  7. 删除方法: Delete方法

更多使用方法可以查看 xorm 官网开发文档。