|
|
// ============================================================================
|
|
|
// 【文件说明】HwWeb.cs - 官网页面实体类
|
|
|
// ============================================================================
|
|
|
// 这个实体类对应数据库表 hw_web,用于存储官网页面配置信息。
|
|
|
//
|
|
|
// 【数据库表结构】
|
|
|
// hw_web 表字段:
|
|
|
// - web_id: 主键ID(自增)
|
|
|
// - web_json: JSON格式的页面配置
|
|
|
// - web_json_string: JSON字符串格式
|
|
|
// - web_code: 页面编码(业务主键)
|
|
|
// - is_delete: 逻辑删除标记
|
|
|
// - web_json_english: 英文版JSON配置
|
|
|
// - create_by, create_time, update_by, update_time, remark: 继承自基类
|
|
|
// ============================================================================
|
|
|
|
|
|
namespace Admin.NET.Plugin.HwPortal;
|
|
|
|
|
|
/// <summary>
|
|
|
/// 官网页面实体类。
|
|
|
/// <para>
|
|
|
/// 【C# 语法知识点 - 类继承】
|
|
|
/// public class HwWeb : HwPortalBaseEntity
|
|
|
/// HwWeb 继承自 HwPortalBaseEntity,自动获得 CreateBy、CreateTime 等公共字段。
|
|
|
///
|
|
|
/// 对比 Java:
|
|
|
/// Java 的继承语法完全一样:
|
|
|
/// public class HwWeb extends HwPortalBaseEntity { ... }
|
|
|
/// </para>
|
|
|
/// <para>
|
|
|
/// 【ORM 映射说明】
|
|
|
/// [SugarTable("hw_web")] 告诉 SqlSugar ORM:这个类映射到数据库的 hw_web 表。
|
|
|
///
|
|
|
/// 对比 Java MyBatis/JPA:
|
|
|
/// JPA: @Table(name = "hw_web")
|
|
|
/// MyBatis: 在 XML 中配置 <table tableName="hw_web">
|
|
|
/// </para>
|
|
|
/// </summary>
|
|
|
[SugarTable("hw_web")]
|
|
|
// 【C# 语法知识点 - 特性(Attribute)】
|
|
|
// [SugarTable("hw_web")] 是 SqlSugar ORM 的特性,用于指定数据库表名。
|
|
|
// 如果不写,SqlSugar 会默认用类名(HwWeb)作为表名。
|
|
|
// 但数据库表名通常是 snake_case(hw_web),所以需要显式指定。
|
|
|
public class HwWeb : HwPortalBaseEntity
|
|
|
{
|
|
|
/// <summary>
|
|
|
/// 页面主键ID。
|
|
|
/// <para>
|
|
|
/// 【C# 语法知识点 - 可空值类型 long?】
|
|
|
/// long? 表示"可空的长整型",等价于 Nullable<long>。
|
|
|
///
|
|
|
/// 为什么用可空类型?
|
|
|
/// 1. 新增记录时,ID 还没生成(数据库自增),此时是 null
|
|
|
/// 2. 查询时,某些关联查询可能返回 null
|
|
|
/// 3. 和前端交互时,空值更明确
|
|
|
///
|
|
|
/// 对比 Java:
|
|
|
/// Java 的 Long 本身就是引用类型,可以为 null:
|
|
|
/// private Long webId;
|
|
|
///
|
|
|
/// C# 的 long 是值类型,不能为 null,所以用 long? 来支持 null。
|
|
|
/// </para>
|
|
|
/// </summary>
|
|
|
[SugarColumn(ColumnName = "web_id", IsPrimaryKey = true, IsIdentity = true)]
|
|
|
// 【SugarColumn 特性参数说明】
|
|
|
// ColumnName = "web_id":映射到数据库列 web_id
|
|
|
// IsPrimaryKey = true:标记为主键
|
|
|
// IsIdentity = true:标记为自增列(数据库自动生成值)
|
|
|
//
|
|
|
// 对比 Java JPA:
|
|
|
// @Id
|
|
|
// @GeneratedValue(strategy = GenerationType.IDENTITY)
|
|
|
// @Column(name = "web_id")
|
|
|
// private Long webId;
|
|
|
public long? WebId { get; set; }
|
|
|
|
|
|
/// <summary>
|
|
|
/// JSON格式的页面配置。
|
|
|
/// <para>
|
|
|
/// 【业务说明】
|
|
|
/// 这个字段存储页面配置的 JSON 数据,前端解析后渲染页面。
|
|
|
/// 例如:导航菜单、轮播图、内容区块等配置。
|
|
|
/// </para>
|
|
|
/// </summary>
|
|
|
[SugarColumn(ColumnName = "web_json")]
|
|
|
public string WebJson { get; set; }
|
|
|
|
|
|
/// <summary>
|
|
|
/// JSON字符串格式。
|
|
|
/// </summary>
|
|
|
[SugarColumn(ColumnName = "web_json_string")]
|
|
|
public string WebJsonString { get; set; }
|
|
|
|
|
|
/// <summary>
|
|
|
/// 页面编码(业务主键)。
|
|
|
/// <para>
|
|
|
/// 【业务主键 vs 技术主键】
|
|
|
/// - 技术主键:web_id,数据库自增,无业务含义
|
|
|
/// - 业务主键:web_code,有业务含义,如 "home_page"、"about_us"
|
|
|
///
|
|
|
/// 为什么需要两个主键?
|
|
|
/// 1. 技术主键保证数据库性能(自增整数比字符串索引快)
|
|
|
/// 2. 业务主键方便开发和运维(看到 web_code 就知道是哪个页面)
|
|
|
/// 3. 业务主键可以跨环境保持一致(开发/测试/生产)
|
|
|
/// </para>
|
|
|
/// </summary>
|
|
|
[SugarColumn(ColumnName = "web_code")]
|
|
|
public long? WebCode { get; set; }
|
|
|
|
|
|
/// <summary>
|
|
|
/// 逻辑删除标记。
|
|
|
/// <para>
|
|
|
/// 【逻辑删除 vs 物理删除】
|
|
|
/// - 物理删除:DELETE FROM table WHERE id = ?,数据真的没了
|
|
|
/// - 逻辑删除:UPDATE table SET is_delete = '1' WHERE id = ?,数据还在,只是标记为删除
|
|
|
///
|
|
|
/// 为什么用逻辑删除?
|
|
|
/// 1. 数据可恢复:误删后可以恢复
|
|
|
/// 2. 审计需求:保留删除记录
|
|
|
/// 3. 关联数据:其他表可能引用这条数据
|
|
|
///
|
|
|
/// 这里的值:
|
|
|
/// - "0":正常
|
|
|
/// - "1":已删除
|
|
|
///
|
|
|
/// 对比 Java 若依:
|
|
|
/// 若依框架也使用逻辑删除,字段通常是 del_flag。
|
|
|
/// </para>
|
|
|
/// </summary>
|
|
|
[SugarColumn(ColumnName = "is_delete")]
|
|
|
public string IsDelete { get; set; }
|
|
|
|
|
|
/// <summary>
|
|
|
/// 英文版JSON配置。
|
|
|
/// <para>
|
|
|
/// 【国际化支持】
|
|
|
/// 这个字段存储英文版页面配置,用于多语言网站。
|
|
|
/// 用户切换语言时,前端读取不同的 JSON 配置。
|
|
|
/// </para>
|
|
|
/// </summary>
|
|
|
[SugarColumn(ColumnName = "web_json_english")]
|
|
|
public string WebJsonEnglish { get; set; }
|
|
|
}
|