其他技巧
最后更新于:2022-04-02 02:47:17
[TOC]
### 名称映射规则
三种名称映射
`SnakMapper ` 支持struct为驼峰式命名,表结构为下划线命名之间的转换,这个是**默认**的Maper;
`SameMapper` 支持结构体名称和对应的表名称以及结构体field名称与对应的表字段名称相同的命名;
`GonicMapper` 和`SnakeMapper`很类似,但是对于特定词支持更好,比如ID会翻译成id而不是`i_d`。
表名称和字段名称的映射规则可单独设定
```
engine.SetTableMapper(core.SameMapper{})
engine.SetColumnMapper(core.SnakeMapper{})
```
### 自动时间操作
### `yyy-mm-dd H:i:s` 格式 操作
当数据库字段为 `datetime` 或者 `timestamp` 时
```
type User struct {
Id int64
Name string
UpdatedAt time.Time `xorm:"updated"` //[created|updated|deleted]
}
var user User
user.id = 1
engine.Get(&user)
engine.Update(&user)
```
### 时间戳格式操作
```
type User struct {
Id int64
Name string
UpdatedAt int `xorm:"updated"` //time.Time->int 则为时间戳格式
}
```
## 软删除
```
type User struct {
Id int64
Name string
DeletedAt time.Time `xorm:"deleted"`
}
engine.Id(1).Delete(&user)
//获取软删除的数据
engine.Id(1).Unscoped().Get(&user)
//真实删除数据
engine.Id(1).Unscoped().Delete(&user)
```
## find查询
```
//映射到 非struct
cfgId :=make([]string,0)
err = Engine.Table(new(SYS_CONFIG)).Cols("CFG_ID").Find(&cfgId)
//获取多个字段的 非struct
cfgId :=make([][]string,0)
err = Engine.Table(new(SYS_CONFIG)).Cols("CFG_ID","CFG_TYPE").Find(&cfgId)
```
';