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>
- 配置视图解析器
在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,您应该能够使用分类管理功能。