JAVA V6 多商户商城 开发文档——JAVA服务端

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 接口有两种继承方式:

  1. MPJBaseMapper :来自 mybatisplusjoin,支持连表查询功能

  2. 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);
    }
    
    // 其他方法...
}
相关推荐
alexlifexyz1 小时前
写了个 Claude Code 插件:AI 写的 Java 违反阿里规约,就写不进文件
java
轻舟技术A1 小时前
Pi 的 Rust 实现来了:rpi,不止一个终端 Agent
开发语言·后端·rust
威哥爱编程1 小时前
【AI全栈12-01】Spring Boot 为何是 AI 全栈后端优选
java·spring boot·后端
威哥爱编程1 小时前
【AI全栈12-03】Spring Boot 用多模型路由把智能客服成本降下来
java·spring boot·后端
威哥爱编程1 小时前
【AI全栈12-02】Spring Boot 跑通第一个 AI 对话接口:HR 政策问答机器人实战
java·spring boot·后端
Wang's Blog1 小时前
Java 中间件之 RabbitMQ 快速入门: 异步通讯的优缺点
java·中间件·java-rabbitmq
用户094248568031 小时前
第31章:JVM字节码解释器与模板解释器源码路径
java·jvm
额额额对了1 小时前
嵌入式 Linux 启动程序文件
开发语言·嵌入式硬件·php