前景介绍:
随着科技的迅速发展,计算机技术已应用到社会的各个领域。随着计算机技术和通信技术的迅速发展,网络的规模也逐渐增大,网络的元素也随之不断增加,有的利用其通信,有的利用其商业用途,在网络上进行出售、收购、宣传等操作,从而使得网络越来越成为现今社会上必不可少的元素,而网站就是这个网络里很庞大的元素。
通过购物网站这个平台,可以使用户足不出户就可以了解丰富的商品信息,极大的方便了用户,系统的主要功能包括:商品名称、商品类别、商品价格商品生产日期和保质期
系统展示效果:
项目文件夹组织结构:
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文件是用来封装前端页面然后展示效果