开发一个简易商品管理系统是Java初学者和中小团队验证技术选型的好方式。通过合理的分层设计和成熟的框架组合,我们可以在几天内搭建出具备商品录入、查询、修改与删除能力的后台服务,并为后续扩展留下空间。

一、系统整体架构与数据表设计
在Java生态中开发商品管理系统,最务实的方案是采用Spring Boot作为基础框架,结合MyBatis完成数据库访问。整体架构通常分为控制器层、服务层、持久层以及领域模型层。控制器层负责接收HTTP请求并返回JSON数据,服务层封装核心业务规则,持久层通过映射文件执行SQL,领域模型则对应数据库中的商品记录。
商品数据表的设计应当覆盖业务最小可用字段。一般来说,商品编号作为主键,商品名称、单价、库存数量、创建时间是必备列。下面给出MySQL中的建表语句,其中使用了自增主键和不为空的约束来保证数据完整性。
CREATE TABLE product (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
price DECIMAL(10,2) NOT NULL,
stock INT NOT NULL DEFAULT 0,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
这种表结构简洁且易于扩展。当后续需要增加商品分类、供应商信息时,只需新增字段或建立关联表,而不会对原有逻辑造成破坏。在小型系统中,避免过度设计尤为重要,先让核心流程跑通再迭代优化才是合理路径。
二、实体类与持久层映射实现
在Java代码里,我们首先定义与数据表对应的实体类。实体类的属性名通常采用驼峰命名,借助MyBatis的自动映射或显式配置与下划线字段关联。使用普通的POJO即可,不需要继承特定父类,这样降低了框架侵入性。
public class Product {
private Long id;
private String name;
private java.math.BigDecimal price;
private Integer stock;
private java.time.LocalDateTime createTime;
// getter和setter省略
}
持久层使用Mapper接口配合XML文件是最直观的做法。在Mapper中声明增删改查方法,SQL写在独立的映射文件里,便于阅读和调优。以下是一个插入商品和按主键查询的示例,注意参数使用#{}占位符可以防止SQL注入。
<mapper namespace="com.example.mapper.ProductMapper">
<insert id="insert" parameterType="com.example.entity.Product">
INSERT INTO product(name, price, stock) VALUES(#{name}, #{price}, #{stock})
</insert>
<select id="selectById" resultType="com.example.entity.Product">
SELECT id, name, price, stock, create_time AS createTime FROM product WHERE id = #{id}
</select>
</mapper>
这种方式的优势在于SQL与Java代码解耦,当数据库字段调整时,修改XML比改动注解更加安全。对于简易系统,也可以直接使用MyBatis-Plus提供的通用Mapper减少重复代码,但理解原生映射有助于排查复杂查询问题。
三、控制器与业务服务层的开发
服务层承担校验与事务控制职责。比如新增商品时,应当判断价格和库存是否为非负数,否则抛出异常由控制器统一处理。Spring的@Service注解标记业务组件,方法上添加@Transactional保证数据一致性。
@Service
public class ProductService {
@Autowired
private ProductMapper productMapper;
public Long addProduct(Product product) {
if (product.getPrice() == null || product.getPrice().compareTo(java.math.BigDecimal.ZERO) < 0) {
throw new IllegalArgumentException("价格不能为负");
}
if (product.getStock() < 0) {
throw new IllegalArgumentException("库存不能为负");
}
productMapper.insert(product);
return product.getId();
}
}
控制器层通过@RestController暴露REST接口,接收前端提交的商品数据并返回处理结果。下面是一个处理新增与查询请求的简单控制器,使用@PostMapping和@GetMapping映射不同HTTP动作。
@RestController
@RequestMapping("/product")
public class ProductController {
@Autowired
private ProductService productService;
@PostMapping("/add")
public String add(@RequestBody Product product) {
Long id = productService.addProduct(product);
return "保存成功,编号:" + id;
}
@GetMapping("/{id}")
public Product get(@PathVariable Long id) {
return productService.getById(id);
}
}
通过上述三层协作,一个简易商品管理系统的后端就具备了基本能力。在真实项目中,还可以补充全局异常处理器、参数校验注解以及简单的登录拦截,使系统更健壮。对于想深入Java Web开发的工程师来说,从这样小巧但完整的系统起步,比直接阅读庞大源码更容易建立全局认知。
Java商品管理系统Spring_Boot修改时间:2026-08-16 23:26:27