/*
* 实体元数据模块
* 提供 JPA 风格的实体映射定义
*/
package tybb2026::tycj_orm
import std.collection.*
/*
* 实体基类标记
* 用于标记类为数据库实体
*/
public abstract class Entity {}
/*
* 表名注解
* 用于指定实体对应的数据库表名
*/
public abstract class Table {
public let name: String
public init(name!: String = "") {
this.name = name
}
}
/*
* 主键标记
* 用于标记实体类的主键字段
*/
public abstract class Id {}
/*
* 列映射注解
* 用于指定字段对应的数据库列名
*/
public abstract class Column {
public let name: String
public init(name!: String = "") {
this.name = name
}
}
/*
* 非持久化标记
* 标记该字段不映射到数据库列
*/
public abstract class Transient {}
/*
* 实体元数据类
* 存储实体的映射信息
*/
public class EntityMetadata {
/* 表名 */
public var tableName: String
/* 字段映射表:字段名 -> 列名 */
public var fieldMappings: HashMap<String, String>
/* 主键字段名 */
public var idField: String
public init(tableName!: String = "") {
this.tableName = tableName
this.fieldMappings = HashMap<String, String>()
this.idField = ""
}
/*
* 添加字段映射
* @param fieldName 字段名
* @param columnName 列名
* @return 当前对象,支持链式调用
*/
public func addFieldMapping(fieldName: String, columnName: String): EntityMetadata {
fieldMappings[fieldName] = columnName
return this
}
/*
* 获取列名
* @param fieldName 字段名
* @return 列名选项
*/
public func getColumnName(fieldName: String): Option<String> {
return fieldMappings.get(fieldName)
}
/*
* 获取所有字段名
* @return 字段名列表
*/
public func getFieldNames(): ArrayList<String> {
let result = ArrayList<String>()
for ((key, _) in fieldMappings) {
result.add(key)
}
return result
}
/*
* 获取所有列名
* @return 列名列表
*/
public func getColumnNames(): ArrayList<String> {
let result = ArrayList<String>()
for ((_, value) in fieldMappings) {
result.add(value)
}
return result
}
}