SSM商城项目实战:分类管理

SSM商城项目实战:分类管理

在一个电商网站中,商品分类是非常重要的一个功能,它能够帮助用户快速定位到自己想要的商品。在本篇博客中,我们将使用SSM框架来实现一个简单的分类管理功能。

思路

我们将使用一级分类和二级分类的设计来实现分类管理功能。一级分类是最高级别的分类,二级分类是一级分类下的子分类。每个商品都会被分配到一个二级分类中。

我们需要设计数据库表来存储分类信息,并创建相应的实体类和Mapper接口。然后,我们将创建一个分类管理的控制器和视图,用于展示分类列表、添加分类、编辑分类和删除分类等功能。

步骤

1. 创建数据库表

首先,我们需要创建数据库表来存储分类信息。我们可以创建两个表,一个用于存储一级分类,另一个用于存储二级分类。

CREATE TABLE `category` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `subcategory` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `category_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `category_id` (`category_id`),
  CONSTRAINT `subcategory_ibfk_1` FOREIGN KEY (`category_id`) REFERENCES `category` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2. 创建实体类

在Java代码中,我们需要创建两个实体类来表示一级分类和二级分类。我们可以使用@Entity注解来标识实体类,使用@Table注解来指定对应的数据库表。

@Entity
@Table(name = "category")
public class Category {

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

    private String name;

    // 省略getter和setter方法
}
@Entity
@Table(name = "subcategory")
public class Subcategory {

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

    private String name;

    @ManyToOne
    @JoinColumn(name = "category_id")
    private Category category;

    // 省略getter和setter方法
}

3. 创建Mapper接口

我们使用MyBatis来访问数据库,所以我们需要创建两个Mapper接口来操作分类表。我们可以使用@Mapper注解来标识Mapper接口,使用@Select@Insert@Update@Delete等注解来指定SQL语句。

@Mapper
public interface CategoryMapper {

    @Select("SELECT * FROM category")
    List<Category> getAllCategories();

    @Insert("INSERT INTO category (name) VALUES (#{name})")
    void addCategory(Category category);

    @Update("UPDATE category SET name = #{name} WHERE id = #{id}")
    void updateCategory(Category category);

    @Delete("DELETE FROM category WHERE id = #{id}")
    void deleteCategory(int id);
}
@Mapper
public interface SubcategoryMapper {

    @Select("SELECT * FROM subcategory")
    List<Subcategory> getAllSubcategories();

    @Select("SELECT * FROM subcategory WHERE category_id = #{categoryId}")
    List<Subcategory> getSubcategoriesByCategoryId(int categoryId);

    @Insert("INSERT INTO subcategory (name, category_id) VALUES (#{name}, #{categoryId})")
    void addSubcategory(Subcategory subcategory);

    @Update("UPDATE subcategory SET name = #{name}, category_id = #{categoryId} WHERE id = #{id}")
    void updateSubcategory(Subcategory subcategory);

    @Delete("DELETE FROM subcategory WHERE id = #{id}")
    void deleteSubcategory(int id);
}

4. 创建Service接口和实现类

我们创建两个Service接口来定义分类管理的方法,并创建对应的实现类来实现这些方法。

public interface CategoryService {

    List<Category> getAllCategories();

    void addCategory(Category category);

    void updateCategory(Category category);

    void deleteCategory(int id);
}
@Service
public class CategoryServiceImpl implements CategoryService {

    @Autowired
    private CategoryMapper categoryMapper;

    @Override
    public List<Category> getAllCategories() {
        return categoryMapper.getAllCategories();
    }

    // 省略其他方法的实现
}
public interface SubcategoryService {

    List<Subcategory> getAllSubcategories();

    List<Subcategory> getSubcategoriesByCategoryId(int categoryId);

    void addSubcategory(Subcategory subcategory);

    void updateSubcategory(Subcategory subcategory);

    void deleteSubcategory(int id);
}
@Service
public class SubcategoryServiceImpl implements SubcategoryService {

    @Autowired
    private SubcategoryMapper subcategoryMapper;

    @Override
    public List<Subcategory> getAllSubcategories() {
        return subcategoryMapper.getAllSubcategories();
    }

    // 省略其他方法的实现
}

5. 创建控制器

我们创建两个控制器来处理分类管理的请求。一个用于处理一级分类的请求,另一个用于处理二级分类的请求。

@Controller
@RequestMapping("/category")
public class CategoryController {

    @Autowired
    private CategoryService categoryService;

    @RequestMapping("/list")
    public String listCategories(Model model) {
        List<Category> categories = categoryService.getAllCategories();
        model.addAttribute("categories", categories);
        return "category/list";
    }

    // 省略其他方法的实现
}
@Controller
@RequestMapping("/subcategory")
public class SubcategoryController {

    @Autowired
    private SubcategoryService subcategoryService;

    @Autowired
    private CategoryService categoryService;

    @RequestMapping("/list")
    public String listSubcategories(Model model) {
        List<Subcategory> subcategories = subcategoryService.getAllSubcategories();
        model.addAttribute("subcategories", subcategories);
        return "subcategory/list";
    }

    // 省略其他方法的实现
}

6. 创建视图

我们创建两个视图来显示分类列表、添加分类、编辑分类和删除分类等功能。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Category List</title>
</head>
<body>
    <h1>Category List</h1>
    <table>
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th>Action</th>
        </tr>
        <c:forEach items="${categories}" var="category">
            <tr>
                <td>${category.id}</td>
                <td>${category.name}</td>
                <td>
                    <a href="/category/edit/${category.id}">Edit</a>
                    <a href="/category/delete/${category.id}">Delete</a>
                </td>
            </tr>
        </c:forEach>
    </table>
    <br>
    <a href="/category/add">Add Category</a>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Subcategory List</title>
</head>
<body>
    <h1>Subcategory List</h1>
    <table>
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th>Category</th>
            <th>Action</th>
        </tr>
        <c:forEach items="${subcategories}" var="subcategory">
            <tr>
                <td>${subcategory.id}</td>
                <td>${subcategory.name}</td>
                <td>${subcategory.category.name}</td>
                <td>
                    <a href="/subcategory/edit/${subcategory.id}">Edit</a>
                    <a href="/subcategory/delete/${subcategory.id}">Delete</a>
                </td>
            </tr>
        </c:forEach>
    </table>
    <br>
    <a href="/subcategory/add">Add Subcategory</a>
</body>
</html>
  1. 配置视图解析器

在Spring Boot中,我们不需要手动配置视图解析器,它会根据约定自动配置。默认情况下,Spring Boot使用Thymeleaf作为模板引擎。

在pom.xml文件中添加Thymeleaf的依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

在application.properties文件中添加Thymeleaf的配置:

spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html

8. 运行应用程序

现在,我们可以运行应用程序并访问以下URL来测试分类管理功能:

  • 分类列表:http://localhost:8080/category/list

  • 添加分类:http://localhost:8080/category/add

  • 编辑分类:http://localhost:8080/category/edit/{id}

  • 删除分类:http://localhost:8080/category/delete/{id}

  • 二级分类列表:http://localhost:8080/subcategory/list

  • 添加二级分类:http://localhost:8080/subcategory/add

  • 编辑二级分类:http://localhost:8080/subcategory/edit/{id}

  • 删除二级分类:http://localhost:8080/subcategory/delete/{id}

通过访问这些URL,您应该能够使用分类管理功能。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

竹山全栈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值