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

实体类基础结构
实体类是数据库表在 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 方法,简化代码。
@Data
@TableName("tourism_hotel")
public class TourismHotel implements Serializable {
// ...
}
@TableName(MyBatis Plus)
用于指定实体类对应的数据库表名。系统使用统一的表前缀,注意与表对应。
@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 关键字
-
使用有意义的字段名,避免缩写
示例:
private String hotelName; // 酒店名称
private Integer hotelStar; // 酒店星级
private String fullAddress; // 完整地址
private Integer isDelete; // 是否删除
数据类型选择
| 数据库类型 | Java类型 | 使用场景 |
|---|---|---|
| INT/BIGINT | Integer/Long | 整数类型(如 ID、数量、状态等) |
| VARCHAR/TEXT | String | 字符串类型(如名称、描述、地址等) |
| DECIMAL | BigDecimal | 金额、价格等需要精确计算的数值 |
| DATETIME/TIMESTAMP | Long | 时间戳(毫秒) |
| BOOLEAN | Integer | 布尔值(1表示是,0表示否) |
示例:
private Integer hotelId; // 整数类型
private String hotelName; // 字符串类型
private BigDecimal price; // 金额类型
private Long createTime; // 时间戳
private Integer isDelete; // 布尔值(0/1)
状态字段处理
使用 Integer 类型表示状态,通过注释说明状态含义。
示例:
/** 酒店状态 - 1正常 0下架 */
private Integer hotelStatus;
/** 是否删除 - 0正常 1删除 */
private Integer isDelete;
/** 是否单独设置 - 0否 1是 */
private Integer isSet;
序列化处理
所有实体类都必须实现 Serializable 接口,并定义 serialVersionUID 常量,确保序列化和反序列化的兼容性。
public class TourismHotel implements Serializable {
private static final long serialVersionUID = 1L;
// ...
}
完整实体类示例(酒店实体类)
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;
}