【JAVA MVC】搭建简单的超市商品管理系统

前景介绍: 

随着科技的迅速发展,计算机技术已应用到社会的各个领域。随着计算机技术和通信技术的迅速发展,网络的规模也逐渐增大,网络的元素也随之不断增加,有的利用其通信,有的利用其商业用途,在网络上进行出售、收购、宣传等操作,从而使得网络越来越成为现今社会上必不可少的元素,而网站就是这个网络里很庞大的元素。
通过购物网站这个平台,可以使用户足不出户就可以了解丰富的商品信息,极大的方便了用户,系统的主要功能包括:商品名称、商品类别、商品价格商品生产日期和保质期

系统展示效果:

项目文件夹组织结构:

CommoditySystemApplication: 

CommoditySystemApplication一个Java类的定义,用于启动一个基于Spring Boot的商品管理系统应用。

这是Java源文件的包声明,指定了该类所属的包名。

package com.example.commoditysystem;

这是一个导入语句,用于导入Spring Boot框架中的SpringApplication类。SpringApplication是Spring Boot应用程序的入口点。

import org.springframework.boot.SpringApplication;

这是另一个导入语句,用于导入Spring Boot框架中的@SpringBootApplication注解。@SpringBootApplication是一个组合注解,它包含了多个其他注解,用于快速配置和启动Spring Boot应用程序。

import org.springframework.boot.autoconfigure.SpringBootApplication;

这是一个注解,用于将该类标记为Spring Boot应用程序的主类。它会自动进行组件扫描、属性配置和自动配置等操作。

@SpringBootApplication

这是一个公共类的定义,类名为CommoditySystemApplication。

public class CommoditySystemApplication

这是主方法的定义,作为程序的入口点。当执行该类时,会从这个方法开始执行。

public static void main(String[] args)

这是用于启动Spring Boot应用程序的方法。它会启动嵌入式的Tomcat服务器,并根据注解和配置文件中的信息来自动配置和初始化应用程序。

SpringApplication.run(CommoditySystemApplication.class, args);

定义一个包含了主类和入口方法的Spring Boot应用程序。通过@SpringBootApplication注解,它可以自动进行配置,并使用SpringApplication.run方法来启动应用程序。

CommodityController:

创建名为"CommodityController"的Java类,用于处理商品相关的HTTP请求。它使用了Spring框架的注解来定义控制器的行为和映射。

导入了相关的类和包

import com.example.commoditysystem.model.Commodity;
import com.example.commoditysystem.service.CommodityService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import java.util.List;

声明了一个名为"CommodityController"的类,并标注为@Controller,表示这是一个控制器类。

@Controller
public class CommodityController {

使用@Autowired注解将CommodityService接口的实现注入到CommodityController中。

@Autowired
private CommodityService commodityService;

定义了一个用于展示商品首页的方法,使用@GetMapping注解,并指定了请求路径为"/"。

@GetMapping("/")
public String viewHomePage(Model model) {
    return findPaginated(1, "name", "asc" ,model);
}

定义了一个用于显示添加商品表单的方法,使用@GetMapping注解,并指定了请求路径为"/showNewCommodityForm"。

@GetMapping("/showNewCommodityForm")
public String showCommodity(Model model){
    Commodity commodity = new Commodity();
    model.addAttribute("commodity",commodity);
    return "new_commodity";
}

定义了一个用于保存商品信息的方法,使用@PostMapping注解,并指定了请求路径为"/saveCommodity"。

@PostMapping("/saveCommodity")
public String saveCommodity(@ModelAttribute("commodity") Commodity commodity){
    commodityService.saveCommodity(commodity);
    return "redirect:/";
}

定义了一个用于显示修改商品表单的方法,使用@GetMapping注解,并指定了请求路径为"/showNewCommodityUpdate{id}"。

@GetMapping("/showNewCommodityUpdate{id}")
public String showFormForUpdate(@PathVariable(value = "id") long id,Model model){
    Commodity commodity = commodityService.getCommodityByid(id);

    model.addAttribute("commodity",commodity);
    return "update_commodity";
}

定义了一个用于删除商品信息的方法,使用@GetMapping注解,并指定了请求路径为"/deleteCommodity{id}"。

@GetMapping("/deleteCommodity{id}")
public String deleteCommodity(@PathVariable(value = "id") long id){
    this.commodityService.deleteCommodityByid(id);
    return "redirect:/";
}

定义了一个用于获取分页数据的方法,使用@GetMapping注解,并指定了请求路径为"/page/{pageNo}"。

@GetMapping("/page/{pageNo}")
public String findPaginated(@PathVariable (value = "pageNo") int pageNo,
                            @RequestParam("sortField") String sortField,
                            @RequestParam("sortDir") String sortDir,
                            Model model) {
  
    return "index";
}

定义了一个用于搜索商品的方法,使用@GetMapping注解,并指定了请求路径为"/query{inpname}"。

@GetMapping("/query{inpname}")
public String query(@PathVariable(value = "inpname") String inpname,Model model){
  
    return "index";
}

以上就是这些代码定义了一系列处理商品相关请求的方法,通过调用CommodityService来实现相应的业务逻辑,并将结果添加到Model中返回给前端页面。

Commodity:

创建名为"Commodity"的Java类,用于表示商品对象。它使用了Lombok注解来自动生成getter、setter方法,以及其他一些常用方法。

 导入了相关的类和包:

import jakarta.persistence.*;
import lombok.Data;

使用@Data注解,这是Lombok注解之一,它会自动生成字段的getter和setter方法,以及其他一些通用方法,如equals()和hashCode()等。

@Data

使用@Entity注解,表示这是一个JPA实体类,会与数据库中的表进行映射。

@Entity

使用@Table注解,指定了对应数据库中的表名为"commoditys"。

@Table(name = "commoditys")

使用@Id注解,表示这是主键字段。

@Id

使用@GeneratedValue注解,指定了主键的生成策略为自增长。

@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;

使用@Column注解,指定了该字段对应数据库中的列名为"commodity_name",并提供了其他一些属性。

@Column(name="commodity_name")
private String name;

类似地,使用@Column注解指定其他字段与数据库表中的列的映射关系。

@Column(name="place")
private String place;

@Column(name="start_date")
private String startDate;

@Column(name="expiration_date")
private String expirationDate;

@Column(name="price")
private double price;

以上这些代码定义了一个表示商品的实体类,通过注解来映射实体类的字段与数据库表的列,方便进行数据的CRUD操作。同时,使用Lombok的@Data注解自动生成了常用的getter、setter方法,简化了实体类的编写。

CommodityRepository:

定义了一个名为CommodityRepository的接口,它继承了JpaRepository接口,用于对Commodity实体类进行数据库操作。 

导入了相关的类和包:

import com.example.commoditysystem.model.Commodity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.List;

@Repository注解表示该接口是一个Spring Data Repository,用于将数据访问层的异常转换为Spring的统一异常体系。

@Repository

CommodityRepository接口继承了JpaRepository<Commodity, Long>接口。JpaRepository是Spring Data JPA提供的一个接口,它提供了一系列用于对数据库进行增删改查操作的方法,并支持根据方法名自动生成SQL查询。

public interface CommodityRepository extends JpaRepository<Commodity, Long>

findByCommodityName方法是自定义的查询方法。使用了@Query注解,它允许我们在方法上定义自定义的查询语句。在这个例子中,通过name参数查找包含该名称的商品。%:name%是JPQL中的占位符,表示模糊查询。

@Query("select c from Commodity c where c.name like %:name%")
List<Commodity> findByCommodityName(@Param("name") String name);

CommodityRepository接口继承了JpaRepository接口,并定义了一个自定义的查询方法。通过使用@Query注解,我们可以自定义查询语句,进行更灵活的查询操作。这样,我们可以通过调用CommodityRepository中的方法来实现对商品表的数据库操作。

CommodityService:

创建名为CommodityService的接口,它是商品服务的接口,定义了一些对商品操作的方法。

getAllCommoditys方法用于获取所有商品的列表。

List<Commodity> getAllCommoditys();

saveCommodity方法用于保存商品信息。

void saveCommodity(Commodity commodity);

findByNameContaining方法通过商品名进行模糊查询,返回包含指定名称的商品列表。

List<Commodity> findByNameContaining(String name);

getCommodityByid方法通过商品id获取单个商品。

Commodity getCommodityByid(Long id);

deleteCommodityByid方法通过商品id删除商品。

void deleteCommodityByid(Long id);

findPaginated方法用于分页查询商品列表。它接收页码、页大小、排序字段和排序方向作为参数,返回指定页码和大小的分页商品数据。

Page<Commodity> findPaginated(int pageNo, int pageSize, String sortField, String sortDirection);

CommodityService接口定义了一系列对商品进行操作的方法,包括获取所有商品列表、保存商品、模糊查询商品、获取单个商品、删除商品和分页查询商品。通过实现该接口,可以实现具体的商品服务功能。

CommodityServiceLmpl:

创建一个商品服务的实现类CommodityServiceLmpl,它能实现CommodityService接口中定义的方法。

导入了相关的类和包:

import com.example.commoditysystem.model.Commodity;
import com.example.commoditysystem.repository.CommodityRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;

@Service注解表示该类是一个服务类,用于业务逻辑的处理。

@Service

@Autowired注解将CommodityRepository自动注入到CommodityServiceLmpl中,以便操作数据库。

@Autowired
private CommodityRepository commodityRepository;

getAllCommoditys方法实现了从数据库中获取所有商品的列表。

@Override
public List<Commodity> getAllCommoditys() {
    return commodityRepository.findAll();
}

saveCommodity方法实现了保存商品信息到数据库。

@Override
public void saveCommodity(Commodity commodity) {
    this.commodityRepository.save(commodity);
}

findByNameContaining方法实现了通过商品名进行模糊查询,返回包含指定名称的商品列表。

@Override
public List<Commodity> findByNameContaining(String name) {
    List<Commodity> commoditiesList = commodityRepository.findByCommodityName(name);
    return commoditiesList;
}

getCommodityByid方法实现了通过商品id获取单个商品。

@Override
public Commodity getCommodityByid(Long id) {
    Optional<Commodity> optional = commodityRepository.findById(id);
    Commodity commodity = null;
    if(optional.isPresent()){
        commodity = optional.get();
    }else{
        throw new RuntimeException("未添加此商品:" + id);
    }
    return commodity;
}

deleteCommodityByid方法实现了通过商品id删除商品。

@Override
public void deleteCommodityByid(Long id) {
    commodityRepository.deleteById(id);
}

findPaginated方法用于实现分页查询商品列表。通过调用commodityRepository的findAll方法,传入Pageable对象实现分页查询,并根据排序参数进行排序。

@Override
public Page<Commodity> findPaginated(int pageNo, int pageSize, String sortField, String sortDirection) {
    Sort sort = sortDirection.equalsIgnoreCase(Sort.Direction.ASC.name())
            ? Sort.by(sortField).ascending()
            : Sort.by(sortField).descending();
    Pageable pageable = PageRequest.of(pageNo - 1, pageSize, sort);
    return this.commodityRepository.findAll(pageable);
}

CommodityServiceLmpl类实现了CommodityService接口中定义的方法,通过注入CommodityRepository实现与数据库的交互。它提供了对商品的增删改查、模糊查询和分页查询等功能。

HTML:


html文件是用来封装前端页面然后展示效果

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值