生成代码
生成代码使用工具db-reverse
安装工具
go get -u github.com/tal-tech/db-reverse
执行命令
进入db-reverse项目目录
./xorm reverse mysql 'root:123456@(127.0.0.1:3306)/test?charset=utf8' ./goxorm/
- 其中root:123456@(127.0.0.1:3306)/test?charset=utf8为指定mysql配置,与go原生sql/driver配置格式一致
- 命令执行后生成文件在models目录下,每张表对应一个文件
- 不支持表名、字段名、索引名带’-‘字符,生成时会跳过该表
文件结构
- 表结构映射结构体类型
type Dbtest struct {
Id int `xorm:"not null pk autoincr INT(11)"`
Param1 int `xorm:"not null default 0 index INT(11)"`
Param2 string `xorm:"not null default '' VARCHAR(256)"`
Param3 string `xorm:"not null default '' CHAR(64)"`
TeAcParam4 string `xorm:"not null default '' VARCHAR(64)"`
}
- 访问表实体结构及初始化方法
type DbtestDao struct {
torm.DbBaseDao
}
func NewDbtestDao(v ...interface{}) *DbtestDao {
this := new(DbtestDao)
if ins := torm.GetDbInstance("default", "writer"); ins != nil {
this.UpdateEngine(ins.Engine)
} else {
return nil
}
if len(v) != 0 {
this.UpdateEngine(v...)
}
return this
}
- 索引查询方法
func (this *DbtestDao) Get(mId torm.Param) (ret []Dbtest, err error) {
ret = make([]Dbtest, 0)
this.InitSession()
this.BuildQuery(mId, "id")
err = this.Session.Find(&ret)
return
}
func (this *DbtestDao) GetLimit(mId torm.Param, pn, rn int) (ret []Dbtest, err error) {
ret = make([]Dbtest, 0)
this.InitSession()
this.BuildQuery(mId, "id")
err = this.Session.Limit(rn, pn).Find(&ret)
return
}
func (this *DbtestDao) GetCount(mId torm.Param) (ret int64, err error) {
this.InitSession()
this.BuildQuery(mId, "id")
ret, err = this.Session.Count(new(Dbtest))
return
}
文件更新
工具生成文件需要更改两个位置才可以使用
- 更改包名为项目内包名(生成时为torm)
package torm //更改此行 如:torm=>mysqlRepo
import (
"github.com/tal-tech/torm"
)
- 更改库名(生成时为default)
func NewDbtestDao(v ...interface{}) *DbtestDao {
this := new(DbtestDao)
if ins := torm.GetDbInstance("default", "writer"); ins != nil { //更改此行 如:default=>live
this.UpdateEngine(ins.Engine)
} else {
return nil
}
if len(v) != 0 {
this.UpdateEngine(v...)
}
return this
}
更改default名为对应配置文件内库名
live.writer=live_rw:feofefWEFEF#@fdfewoiffjfejlf@tcp(live-writer:3306)/live?charset=utf8mb4
文件引入
将文件引入项目中,文件位置没有要求,推荐创建一个文件夹管理所有mysql表,如msyqlRepo