xorm 生成结构体


xorm 数据库表生成 对应的结构体
golang 操作数据库 根据数据表结构创建对应的 struct 模型
golang 使用首字母控制可见范围  设计struct字段名和数据库字段名的对应关系 工作繁琐
xorm 工具自动生成 model
xorm 是个简单强大的Go语言ORM库 可以简便 数据库操作
支持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 工具


xorm 是一组数据库操作命令的工具 包含命令
reverse 反转一个数据库结构,生成代码
shell 通用的数据库操作客户端 可对数据库结构和数据操作
dump Dump数据库中所有结构和数据到标准输出
source 从标注输入中执行SQL文件
driver 列出所有支持的数据库驱动

reverse 命令

数据表结构生成 go 代码
下载该工具 go get github.com/go-xorm/cmd/xorm
安装对应的 driver
go get github.com/go-sql-driver/mysql  //安装mysql驱动
//go get github.com/ziutek/mymysql/godrv  //MyMysql
//go get github.com/lib/pq  //Postgres
//go get github.com/mattn/go-sqlite3  //SQLite

xorm 下载 go get github.com/go-xorm/xorm
执行 xorm help reverse 能获取帮助信息
usage: xorm reverse [-s] driverName datasourceName tmplPath [generatedPath] [tableFilterReg]
according database's tables and columns to generate codes for Go, C++ and etc.
-s                Generated one go file for every table
driverName        Database driver name, now supported four: mysql mymysql sqlite3 postgres
datasourceName    Database connection uri, for detail infomation please visit driver's project page
tmplPath          Template dir for generated. the default templates dir has provide 1 template
generatedPath     This parameter is optional, if blank, the default value is model, then will
generated all codes in model dir
tableFilterReg    Table name filter regexp
执行参数 -s 表示为每张表创建一个单独文件
接下来的参数依次是 驱动 数据源 模板目录(在源码的 /cmd/xorm/templates/goxorm  根据需求定制) 生成目录 表格过滤条件
以 Mysql 为例使用方法
在项目目录下建立templates/goxorm文件夹
这个文件下建立config和struct.go.tpl文件
模板内容可以根据你自己的需要修改
config内容如下
lang=go
genJson=1
prefix=
struct.go.tpl内容如下
package {{.Models}}
{{$ilen := len .Imports}}
{{if gt $ilen 0}}
import (
    {{range .Imports}}"{{.}}"{{end}}
)
{{end}}

{{range .Tables}}
type {{Mapper .Name}} struct {
{{$table := .}}
{{range .ColumnsSeq}}{{$col := $table.GetColumn .}} {{Mapper $col.Name}}    {{Type $col}} {{Tag $table $col}}
{{end}}
}
{{end}}
命令行执行命令
执行命令格式是 xorm reverse mysql username:password@(ip:port)/databasename?charset=utf8  /cmd/xorm/templates/goxorm [可选your project model path]
比如 xorm reverse mysql root:root@/fox?charset=utf8 ./templates/goxorm

如果省略输出目录参数 会在当前目录建立  model 目录 该目录下就是自动生成的 go 代码 驼峰命名方式 内容如下
package models
type FaAdmin struct {
    Id           int    `json:"id" xorm:"not null pk autoincr comment('ID') INT(10)"`
    Username     string `json:"username" xorm:"not null default '' comment('用户名') unique VARCHAR(20)"`
    Nickname     string `json:"nickname" xorm:"not null default '' comment('昵称') VARCHAR(50)"`
    Password     string `json:"password" xorm:"not null default '' comment('密码') VARCHAR(32)"`
    Salt         string `json:"salt" xorm:"not null default '' comment('密码盐') VARCHAR(30)"`
    Avatar       string `json:"avatar" xorm:"not null default '' comment('头像') VARCHAR(100)"`
    Email        string `json:"email" xorm:"not null default '' comment('电子邮箱') VARCHAR(100)"`
    Loginfailure int    `json:"loginfailure" xorm:"not null default 0 comment('失败次数') TINYINT(1)"`
    Logintime    int    `json:"logintime" xorm:"not null default 0 comment('登录时间') INT(10)"`
    Createtime   int    `json:"createtime" xorm:"not null default 0 comment('创建时间') INT(10)"`
    Updatetime   int    `json:"updatetime" xorm:"not null default 0 comment('更新时间') INT(10)"`
    Token        string `json:"token" xorm:"not null default '' comment('Session标识') VARCHAR(59)"`
    Status       string `json:"status" xorm:"not null default 'normal' comment('状态') CHAR(20)"`
    GroupId      int    `json:"group_id" xorm:"not null default 0 comment('用户分组') INT(10)"`
}
生成了  model  免去手写的繁琐过程
如果一个工具能节省 1s 时间 那就值得花一天的时间去找或者开发这个工具