You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
161 lines
6.5 KiB
161 lines
6.5 KiB
1 year ago
|
/*
|
||
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||
|
* contributor license agreements. See the NOTICE file distributed with
|
||
|
* this work for additional information regarding copyright ownership.
|
||
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||
|
* (the "License"); you may not use this file except in compliance with
|
||
|
* the License. You may obtain a copy of the License at
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
* See the License for the specific language governing permissions and
|
||
|
* limitations under the License.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
package zorm
|
||
|
|
||
|
// IEntityStruct "struct"实体类的接口,所有的struct实体类都要实现这个接口
|
||
|
// IEntityStruct The interface of the "struct" entity class, all struct entity classes must implement this interface
|
||
|
type IEntityStruct interface {
|
||
|
// 获取表名称
|
||
|
// Get the table name.
|
||
|
GetTableName() string
|
||
|
|
||
|
// 获取数据库表的主键字段名称.因为要兼容Map,只能是数据库的字段名称
|
||
|
// Get the primary key field name of the database table. Because it is compatible with Map, it can only be the field name of the database
|
||
|
GetPKColumnName() string
|
||
|
|
||
|
// GetPkSequence 主键序列
|
||
|
// GetPkSequence Primary key sequence
|
||
|
GetPkSequence() string
|
||
|
}
|
||
|
|
||
|
// IEntityMap 使用Map保存数据,用于不方便使用struct的场景,如果主键是自增或者序列,不要"entityMap.Set"主键的值
|
||
|
// IEntityMap Use Map to save data for scenarios where it is not convenient to use struct
|
||
|
// If the primary key is auto-increment or sequence, do not "entity Map.Set" the value of the primary key
|
||
|
type IEntityMap interface {
|
||
|
// 获取表名称
|
||
|
// Get the table name
|
||
|
GetTableName() string
|
||
|
|
||
|
// 获取数据库表的主键字段名称.因为要兼容Map,只能是数据库的字段名称.
|
||
|
// Get the primary key field name of the database table. Because it is compatible with Map, it can only be the field name of the database.
|
||
|
GetPKColumnName() string
|
||
|
|
||
|
// GetEntityMapPkSequence 主键序列,不能使用GetPkSequence方法名,避免默认实现了IEntityStruct接口
|
||
|
// GetEntityMapPkSequence primary key sequence, you cannot use the GetPkSequence method name, to avoid the default implementation of IEntityStruct interface
|
||
|
GetEntityMapPkSequence() string
|
||
|
|
||
|
// GetDBFieldMap 针对Map类型,记录数据库字段
|
||
|
// GetDBFieldMap For Map type, record database fields.
|
||
|
GetDBFieldMap() map[string]interface{}
|
||
|
|
||
|
// GetDBFieldMapKey 按照Set的先后顺序记录key值,也就是数据库字段,用于SQL排序
|
||
|
// GetDBFieldMapKey records the key value, that is, the database field, in the order of the Set, which is used for SQL sorting
|
||
|
GetDBFieldMapKey() []string
|
||
|
// 设置数据库字段的值
|
||
|
// Set the value of a database field.
|
||
|
Set(key string, value interface{}) map[string]interface{}
|
||
|
}
|
||
|
|
||
|
// EntityStruct "IBaseEntity" 的基础实现,所有的实体类都匿名注入.这样就类似实现继承了,如果接口增加方法,调整这个默认实现即可
|
||
|
// EntityStruct The basic implementation of "IBaseEntity", all entity classes are injected anonymously
|
||
|
// This is similar to implementation inheritance. If the interface adds methods, adjust the default implementation
|
||
|
type EntityStruct struct{}
|
||
|
|
||
|
// 默认数据库的主键列名
|
||
|
// Primary key column name of the default database
|
||
|
const defaultPkName = "id"
|
||
|
|
||
|
//GetTableName 获取表名称,必须有具体的Struct实现,类似java的抽象方法,避免手误忘记写表名.如果有扩展需求,建议使用接口进行扩展,不要默认实现GetTableName
|
||
|
/*
|
||
|
func (entity *EntityStruct) GetTableName() string {
|
||
|
return ""
|
||
|
}
|
||
|
*/
|
||
|
|
||
|
// GetPKColumnName 获取数据库表的主键字段名称.因为要兼容Map,只能是数据库的字段名称
|
||
|
// GetPKColumnName Get the primary key field name of the database table
|
||
|
// Because it is compatible with Map, it can only be the field name of the database
|
||
|
func (entity *EntityStruct) GetPKColumnName() string {
|
||
|
return defaultPkName
|
||
|
}
|
||
|
|
||
|
// var defaultPkSequence = make(map[string]string, 0)
|
||
|
|
||
|
// GetPkSequence 主键序列
|
||
|
// GetPkSequence Primary key sequence
|
||
|
func (entity *EntityStruct) GetPkSequence() string {
|
||
|
return ""
|
||
|
}
|
||
|
|
||
|
//-------------------------------------------------------------------------//
|
||
|
|
||
|
// EntityMap IEntityMap的基础实现,可以直接使用或者匿名注入
|
||
|
type EntityMap struct {
|
||
|
// 表名
|
||
|
tableName string
|
||
|
// 主键列名
|
||
|
PkColumnName string
|
||
|
// 主键序列,如果有值,优先级最高
|
||
|
PkSequence string
|
||
|
// 数据库字段,不暴露外部
|
||
|
dbFieldMap map[string]interface{}
|
||
|
// 列名,记录顺序
|
||
|
dbFieldMapKey []string
|
||
|
}
|
||
|
|
||
|
// NewEntityMap 初始化Map,必须传入表名称
|
||
|
func NewEntityMap(tbName string) *EntityMap {
|
||
|
entityMap := EntityMap{}
|
||
|
entityMap.dbFieldMap = map[string]interface{}{}
|
||
|
entityMap.tableName = tbName
|
||
|
entityMap.PkColumnName = defaultPkName
|
||
|
entityMap.dbFieldMapKey = make([]string, 0)
|
||
|
return &entityMap
|
||
|
}
|
||
|
|
||
|
// GetTableName 获取表名称
|
||
|
func (entity *EntityMap) GetTableName() string {
|
||
|
return entity.tableName
|
||
|
}
|
||
|
|
||
|
// GetPKColumnName 获取数据库表的主键字段名称.因为要兼容Map,只能是数据库的字段名称
|
||
|
func (entity *EntityMap) GetPKColumnName() string {
|
||
|
return entity.PkColumnName
|
||
|
}
|
||
|
|
||
|
// GetEntityMapPkSequence 主键序列,不能使用GetPkSequence方法名,避免默认实现了IEntityStruct接口
|
||
|
// GetEntityMapPkSequence primary key sequence, you cannot use the GetPkSequence method name, to avoid the default implementation of IEntityStruct interface
|
||
|
func (entity *EntityMap) GetEntityMapPkSequence() string {
|
||
|
return entity.PkSequence
|
||
|
}
|
||
|
|
||
|
// GetDBFieldMap 针对Map类型,记录数据库字段
|
||
|
// GetDBFieldMap For Map type, record database fields
|
||
|
func (entity *EntityMap) GetDBFieldMap() map[string]interface{} {
|
||
|
return entity.dbFieldMap
|
||
|
}
|
||
|
|
||
|
// GetDBFieldMapKey 按照Set的先后顺序记录key值,也就是数据库字段,用于SQL排序
|
||
|
// GetDBFieldMapKey records the key value, that is, the database field, in the order of the Set, which is used for SQL sorting
|
||
|
func (entity *EntityMap) GetDBFieldMapKey() []string {
|
||
|
return entity.dbFieldMapKey
|
||
|
}
|
||
|
|
||
|
// Set 设置数据库字段
|
||
|
// Set Set database fields
|
||
|
func (entity *EntityMap) Set(key string, value interface{}) map[string]interface{} {
|
||
|
_, ok := entity.dbFieldMap[key]
|
||
|
if !ok { // 如果不存在
|
||
|
entity.dbFieldMapKey = append(entity.dbFieldMapKey, key)
|
||
|
}
|
||
|
entity.dbFieldMap[key] = value
|
||
|
|
||
|
return entity.dbFieldMap
|
||
|
}
|