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


实体类基础结构
实体类是数据库表在 Java 中的映射,用于封装数据库表的结构和数据。在本项目中,实体类遵循以下基本结构:
package com.niu.core.entity.shop;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 店铺扩展表实体
*/
@Data
public class SiteShop implements Serializable {
private static final long serialVersionUID = 1L;
// 字段定义
// ...
}
核心注解使用
@Data(Lombok)
用于自动生成 getter、setter、toString、equals 和 hashCode 方法,简化代码
@Data
public class SiteShop implements Serializable {
// ...
}
@TableId(MyBatis Plus)
用于指定实体类的主键字段,支持自定义主键名称和生成策略
/** 主键 */
@TableId(value="id", type= IdType.AUTO)
private Integer id;
/** 分类id */
@TableId(value="category_id", type= IdType.AUTO)
private Integer categoryId;
/** 系统用户ID */
@TableId(value="uid", type= IdType.AUTO)
private Integer uid;
@TableField(MyBatis Plus)
用于指定实体类字段与数据库字段的映射关系,当字段名与数据库列名不一致时使用
@TableField(value = "desc")
private String desc;
@TableLogic(MyBatis Plus)
用于逻辑删除功能,标注在删除字段上
@TableLogic
private Integer isDelete;
字段定义规范
命名规则
-
采用
camelCase命名法(驼峰命名) -
字段名与数据库字段名对应(通过 MyBatis Plus 自动映射)
-
避免使用 Java 关键字
-
使用有意义的字段名,避免缩写
示例:
private String alipayAccountNo; // 支付宝账号
private String bankAccountName; // 提现账号对应姓名
private Integer businessStatus; // 营业状态
private Integer categoryId; // 商家分类id
数据类型选择
| 数据库类型 | Java类型 | 使用场景 |
|---|---|---|
| INT/BIGINT | Integer/Long | 整数类型(如 ID、数量、状态等) |
| VARCHAR/TEXT | String | 字符串类型(如名称、描述、地址等) |
| DECIMAL | BigDecimal | 金额、价格等需要精确计算的数值 |
| DATETIME/TIMESTAMP | Long | 时间戳(毫秒) |
| BOOLEAN | Integer | 布尔值(1表示是,0表示否) |
示例:
private Integer categoryId; // 整数类型
private String categoryName; // 字符串类型
private BigDecimal commissionRate; // 金额类型
private Long createTime; // 时间戳
private Integer isRecommend; // 布尔值(0/1)
状态字段处理
使用 Integer 类型表示状态,通过注释说明状态含义和取值范围。
示例:
/** 提现账户类型(1银行卡,2支付宝,3微信,4微信零钱) */
private Integer bankType;
/** 营业状态(1营业中,2休息中) */
private Integer businessStatus;
/** 是否推荐 */
private Integer isRecommend;
/** 是否自营 */
private Integer isSelf;
序列化处理
所有实体类都必须实现 Serializable 接口,并定义 serialVersionUID 常量,确保序列化和反序列化的兼容性。
public class SiteShop implements Serializable {
private static final long serialVersionUID = 1L;
// ...
}
视图(Mapper)
Mapper 是 MyBatis 的数据访问层接口,用于与数据库进行交互,遵循 MyBatis Plus 的书写规范
文件位置


目录原则
保持与 Entity 层的目录结构一致,这样调用时方便查找
接口定义规范
继承关系
Mapper 接口有两种继承方式:
-
MPJBaseMapper :来自
mybatisplusjoin,支持连表查询功能 -
BaseMapper :来自
MyBatis Plus,提供基础的 CRUD 功能
项目中大部分 Mapper 都继承自 MPJBaseMapper,便于后期进行复杂的连表查询操作
命名规范
-
Mapper 接口命名:
{实体类名称}Mapper -
包路径:
com.niu.core.mapper.{功能模块}
注解使用
@Mapper
用于标记接口为 MyBatis 的 Mapper 接口,系统启动时会自动扫描并注入 Spring 容器
@Mapper
public interface SysUserMapper extends MPJBaseMapper<SysUser> {
}
Mapper 实现实例
继承 MPJBaseMapper 的 Mapper
package com.niu.core.mapper.sys;
import com.github.yulichang.base.MPJBaseMapper;
import com.niu.core.entity.sys.SysUser;
import org.apache.ibatis.annotations.Mapper;
/**
* 后台管理员 Mapper
*/
@Mapper
public interface SysUserMapper extends MPJBaseMapper<SysUser> {
}
继承 BaseMapper 的 Mapper
package com.niu.core.mapper.sys;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.niu.core.entity.sys.SysBackupRecords;
import org.apache.ibatis.annotations.Mapper;
/**
* 备份记录 Mapper
*/
@Mapper
public interface SysBackupRecordsMapper extends BaseMapper<SysBackupRecords> {
}
商品相关 Mapper
package com.niu.core.mapper.shop;
import com.github.yulichang.base.MPJBaseMapper;
import com.niu.core.entity.shop.MallGoods;
import org.apache.ibatis.annotations.Mapper;
/**
* 商品表 Mapper
*/
@Mapper
public interface MallGoodsMapper extends MPJBaseMapper<MallGoods> {
}
调用方式
Mapper 接口在 Service 层通过 @Resource 或 @Autowired 注解进行注入使用:
@Service
public class SysUserServiceImpl implements ISysUserService {
@Resource
private SysUserMapper sysUserMapper;
@Override
public SysUser getById(Integer id) {
return sysUserMapper.selectById(id);
}
// 其他方法...
}