Compare commits
11 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
f50930ec74 | |
|
|
d50f150d98 | |
|
|
0238ec9a01 | |
|
|
1cc976ed72 | |
|
|
7d3ddc62e3 | |
|
|
427f568db6 | |
|
|
828e19de93 | |
|
|
1e18be8326 | |
|
|
21e9f7c79d | |
|
|
93fbb99ee0 | |
|
|
d41b554acf |
|
|
@ -48,7 +48,7 @@ var pageInfo = []string{
|
||||||
}
|
}
|
||||||
|
|
||||||
// Crud -------------------------- 泛型CURD核心结构体 --------------------------
|
// Crud -------------------------- 泛型CURD核心结构体 --------------------------
|
||||||
// Crud GORM 版本的泛型CURD封装,R为对应的模型结构体
|
// Crud GORM 版本的泛型CURD封装,R为对应的模型结构体, C为对应模型结构体的字段结构体
|
||||||
type Crud[R any, C any] struct {
|
type Crud[R any, C any] struct {
|
||||||
Dao IDao[C]
|
Dao IDao[C]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -98,7 +98,7 @@ func TestBuildWhere(t *testing.T) {
|
||||||
// TestBuildMap 测试 BuildMap 方法
|
// TestBuildMap 测试 BuildMap 方法
|
||||||
func TestBuildMap(t *testing.T) {
|
func TestBuildMap(t *testing.T) {
|
||||||
// 创建一个空的 Crud 实例用于测试(不需要实际的 Dao)
|
// 创建一个空的 Crud 实例用于测试(不需要实际的 Dao)
|
||||||
var crud Crud[interface{}]
|
var crud Crud[interface{}, interface{}]
|
||||||
|
|
||||||
t.Run("BuildMapWithoutField", func(t *testing.T) {
|
t.Run("BuildMapWithoutField", func(t *testing.T) {
|
||||||
result := crud.BuildMap(">", 18)
|
result := crud.BuildMap(">", 18)
|
||||||
|
|
@ -131,7 +131,7 @@ func TestBuildMap(t *testing.T) {
|
||||||
|
|
||||||
// TestClearField 测试 ClearField 方法
|
// TestClearField 测试 ClearField 方法
|
||||||
func TestClearField(t *testing.T) {
|
func TestClearField(t *testing.T) {
|
||||||
var crud Crud[interface{}]
|
var crud Crud[interface{}, interface{}]
|
||||||
|
|
||||||
t.Run("ClearFieldBasic", func(t *testing.T) {
|
t.Run("ClearFieldBasic", func(t *testing.T) {
|
||||||
req := struct {
|
req := struct {
|
||||||
|
|
@ -210,7 +210,7 @@ func TestClearField(t *testing.T) {
|
||||||
|
|
||||||
// TestBuildWhereAndOr 测试 BuildWhereAndOr 方法
|
// TestBuildWhereAndOr 测试 BuildWhereAndOr 方法
|
||||||
func TestBuildWhereAndOr(t *testing.T) {
|
func TestBuildWhereAndOr(t *testing.T) {
|
||||||
var crud Crud[interface{}]
|
var crud Crud[interface{}, interface{}]
|
||||||
|
|
||||||
t.Run("SimpleAND", func(t *testing.T) {
|
t.Run("SimpleAND", func(t *testing.T) {
|
||||||
where := crud.BuildWhereAndOr().
|
where := crud.BuildWhereAndOr().
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,31 @@
|
||||||
|
package base
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/gogf/gf/v2/os/gtime"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
type IdModel struct {
|
||||||
|
Id int `json:"id" gorm:"column:id;type:int(11);common:id"`
|
||||||
|
}
|
||||||
|
type TimeModel struct {
|
||||||
|
CreateTime string `json:"create_time" gorm:"column:create_time;type:varchar(255);common:创建时间"`
|
||||||
|
UpdateTime string `json:"update_time" gorm:"column:update_time;type:varchar(255);common:更新时间"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (tm *TimeModel) BeforeCreate(scope *gorm.DB) error {
|
||||||
|
scope.Set("create_time", gtime.Datetime())
|
||||||
|
scope.Set("update_time", gtime.Datetime())
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (tm *TimeModel) BeforeUpdate(scope *gorm.DB) error {
|
||||||
|
scope.Set("update_time", gtime.Datetime())
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
//func (tm *TimeModel) AfterFind(scope *gorm.DB) error {
|
||||||
|
// tm.CreateTime = gtime.New(tm.CreateTime).String()
|
||||||
|
// tm.UpdateTime = gtime.New(tm.UpdateTime).String()
|
||||||
|
// return nil
|
||||||
|
//}
|
||||||
|
|
@ -3,6 +3,7 @@ package database
|
||||||
import (
|
import (
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
"git.magicany.cc/black1552/gin-base/config"
|
"git.magicany.cc/black1552/gin-base/config"
|
||||||
"git.magicany.cc/black1552/gin-base/log"
|
"git.magicany.cc/black1552/gin-base/log"
|
||||||
|
|
@ -40,6 +41,9 @@ func init() {
|
||||||
// 构建 GORM 配置
|
// 构建 GORM 配置
|
||||||
gormConfig := &gorm.Config{
|
gormConfig := &gorm.Config{
|
||||||
SkipDefaultTransaction: true,
|
SkipDefaultTransaction: true,
|
||||||
|
NowFunc: func() time.Time {
|
||||||
|
return time.Now().Local()
|
||||||
|
},
|
||||||
// 命名策略:保持与模型一致,避免字段/表名转换问题
|
// 命名策略:保持与模型一致,避免字段/表名转换问题
|
||||||
NamingStrategy: schema.NamingStrategy{
|
NamingStrategy: schema.NamingStrategy{
|
||||||
SingularTable: true, // 表名禁用复数形式(例如 User 对应 user 表,而非 users)
|
SingularTable: true, // 表名禁用复数形式(例如 User 对应 user 表,而非 users)
|
||||||
|
|
|
||||||
|
|
@ -1,28 +0,0 @@
|
||||||
package model
|
|
||||||
|
|
||||||
import (
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"gorm.io/gorm"
|
|
||||||
)
|
|
||||||
|
|
||||||
// BaseModel 基础模型,包含自定义的创建时间和更新时间
|
|
||||||
type BaseModel struct {
|
|
||||||
Id int `json:"id" gorm:"column:id;primaryKey;autoIncrement;common:主键ID"` // 主键 ID
|
|
||||||
CreateTime time.Time `json:"create_time" gorm:"column:create_time;type:datetime;autoCreateTime;common:创建时间"`
|
|
||||||
UpdateTime time.Time `json:"update_time" gorm:"column:update_time;type:datetime;autoUpdateTime;common:更新时间"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// BeforeCreate 创建前自动设置时间
|
|
||||||
func (b *BaseModel) BeforeCreate(tx *gorm.DB) error {
|
|
||||||
now := time.Now()
|
|
||||||
b.CreateTime = now
|
|
||||||
b.UpdateTime = now
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// BeforeUpdate 更新前自动更新时间
|
|
||||||
func (b *BaseModel) BeforeUpdate(tx *gorm.DB) error {
|
|
||||||
b.UpdateTime = time.Now()
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue