Skip to content

实体管理

实体类遵循 mybatisplus 的书写规范,在对应系统或插件的 entity 目录下。实体类是项目数据层的基础,良好的实体类设计有助于提高代码的可读性、可维护性和性能

文件位置

实体类基础结构

实体类是数据库表在 Java 中的映射,用于封装数据库表的结构和数据。在本项目中,实体类遵循以下基本结构:

java
package com.niu.tourism.entity.hotel;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.io.Serializable;

/**
 * 酒店实体类
 */
@Data
@TableName("tourism_hotel")
public class TourismHotel implements Serializable {

    private static final long serialVersionUID = 1L;
    
    // 字段定义
    // ...
}

核心注解使用

@Data(Lombok)

用于自动生成 getter、setter、toString、equals 和 hashCode 方法,简化代码。

java
@Data
@TableName("tourism_hotel")
public class TourismHotel implements Serializable {
    // ...
}

@TableName(MyBatis Plus)

用于指定实体类对应的数据库表名。系统使用统一的表前缀,注意与表对应。

java
@TableName("tourism_hotel")
public class TourismHotel implements Serializable {
    // ...
}

注意

个别字段名称可能使用了 mysql 的关键字,这里需要增加 @TableField 注解。例如:

    @TableField(value = "desc")
     private String desc;

部分功能将实体类直接接口返回,会针对个别字段特殊处理,比如 createTime 数据类型是 long,但是返回数据是时间格式,同时不能专门书写 get 方法,就要使用注解处理,具体查看注解 @JsonSerialize

例如:

//将时间由 long 转化成时间格式
@JsonSerialize(using = BeanJsonSerializer.LongDateToStringSerializer.class)

字段定义规范

命名规则

  • 采用 camelCase 命名法(驼峰命名)

  • 字段名与数据库字段名对应(通过 MyBatis Plus 自动映射)

  • 避免使用 Java 关键字

  • 使用有意义的字段名,避免缩写

示例:

java
private String hotelName;      // 酒店名称
private Integer hotelStar;     // 酒店星级
private String fullAddress;    // 完整地址
private Integer isDelete;      // 是否删除

数据类型选择

数据库类型Java类型使用场景
INT/BIGINTInteger/Long整数类型(如 ID、数量、状态等)
VARCHAR/TEXTString字符串类型(如名称、描述、地址等)
DECIMALBigDecimal金额、价格等需要精确计算的数值
DATETIME/TIMESTAMPLong时间戳(毫秒)
BOOLEANInteger布尔值(1表示是,0表示否)

示例:

java
private Integer hotelId;               // 整数类型
private String hotelName;              // 字符串类型
private BigDecimal price;              // 金额类型
private Long createTime;               // 时间戳
private Integer isDelete;              // 布尔值(0/1)

状态字段处理

使用 Integer 类型表示状态,通过注释说明状态含义。

示例:

java
/** 酒店状态 - 1正常 0下架 */
private Integer hotelStatus;

/** 是否删除 - 0正常 1删除 */
private Integer isDelete;

/** 是否单独设置 - 0否 1是 */
private Integer isSet;

序列化处理

所有实体类都必须实现 Serializable 接口,并定义 serialVersionUID 常量,确保序列化和反序列化的兼容性。

java
public class TourismHotel implements Serializable {

    private static final long serialVersionUID = 1L;
    // ...
}

完整实体类示例(酒店实体类)

java
package com.niu.tourism.entity.hotel;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.io.Serializable;

/**
 * 酒店实体类
 */
@Data
@TableName("tourism_hotel")
public class TourismHotel implements Serializable {

    private static final long serialVersionUID = 1L;

    /** 酒店ID */
    @TableId(value = "hotel_id", type = IdType.AUTO)
    private Integer hotelId;

    /** 酒店星级 */
    private Integer hotelStar;

    /** 酒店标签,多个逗号分隔 */
    private String hotelTag;

    /** 酒店介绍 */
    private String hotelDesc;

    /** 站点ID */
    private Integer siteId;

    /** 酒店名称 */
    private String hotelName;

    /** 酒店封面 */
    private String hotelCover;

    /** 酒店图片 */
    private String hotelImages;

    /** 酒店参数 */
    private String hotelAttribute;

    /** 省ID */
    private Integer provinceId;

    /** 市ID */
    private Integer cityId;

    /** 区县ID */
    private Integer districtId;

    /** 地址 */
    private String address;

    /** 完整地址 */
    private String fullAddress;

    /** 经度 */
    private String longitude;

    /** 纬度 */
    private String latitude;

    /** 酒店状态 - 1正常 0下架 */
    private Integer hotelStatus;

    /** 周边交通 */
    private String aroundTraffic;

    /** 周边美食 */
    private String aroundFood;

    /** 创建时间 */
    private Long createTime;

    /** 是否删除 - 0正常 1删除 */
    private Integer isDelete;

    /** 删除时间 */
    private Long deleteTime;

    /** 海报ID */
    private Integer posterId;
}

基于 MIT 协议发布