SSH框架网上商城项目实战:Service与Action的抽取与基本CRUD操作

0 下载量 156 浏览量 更新于2024-09-01 收藏 153KB PDF 举报
"SSH框架网上商城项目的第二阶段,主要涉及基本的CRUD操作以及Service和Action组件的提取。" 在SSH(Struts2、Spring、Hibernate)框架下开发网上商城项目,这一部分主要讲解如何实现基础的数据操作以及如何组织业务逻辑层(Service)和控制层(Action)。首先,上一节已经完成了Struts2、Hibernate4.3和Spring4.2的整合工作,现在我们将继续完成更多功能。 1. Service层的抽取 Service层是业务逻辑的核心,负责处理业务规则和数据访问。在这个阶段,我们需要为Category服务(CategoryService)提供完整的CRUD(创建、读取、更新、删除)功能。以下是CategoryService接口和其实现类的代码: ```java // CategoryService接口 public interface CategoryService extends BaseService<Category> { public void save(Category category); // 插入 public void update(Category category); // 更新 public void delete(int id); // 删除 public Category get(int id); // 获取一个Category public List<Category> query(); // 获取全部Category } // CategoryService实现类 public class CategoryServiceImp extends BaseServiceImpl<Category> implements CategoryService { private SessionFactory sessionFactory; // Spring会注入 public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } protected Session getSession() { // 从当前线程获取session,如果没有则创建一个新的session return sessionFactory.getCurrentSession(); } // 对应接口中的方法实现 // ... } ``` 这里的BaseService是一个基类,通常包含了通用的CRUD方法,例如事务管理,使得我们可以专注于具体业务逻辑的实现。 2. CRUD操作 对于Category对象,我们需要实现以下操作: - `save` 方法用于向数据库插入新的Category对象。 - `update` 方法用于更新已存在的Category对象。 - `delete` 方法根据ID删除对应的Category。 - `get` 方法通过ID获取单个Category对象。 - `query` 方法返回所有Category对象的列表。 3. Action的抽取 Action层是控制层,它接收来自用户请求的数据,调用Service层的方法并返回相应的视图。在Struts2框架中,Action类定义了业务逻辑的执行路径。创建一个CategoryAction类,它将处理与Category相关的HTTP请求: ```java // CategoryAction类 public class CategoryAction extends ActionSupport { private CategoryService categoryService; private Category category; // 属性setter和getter public String add() { categoryService.save(category); return "success"; // 返回成功后跳转的页面 } public String update() { categoryService.update(category); return "success"; } public String delete() { categoryService.delete(category.getId()); return "success"; } public String details() { category = categoryService.get(category.getId()); return "details"; // 显示详情页 } public String list() { List<Category> categories = categoryService.query(); // 将结果设置到Action的属性中,以便在视图中展示 return "list"; // 显示列表页 } } ``` 每个方法对应一个用户请求,调用相应的Service方法并处理结果。例如,`add()` 方法用于添加新的Category,`update()` 更新已有的Category,`delete()` 删除Category,`details()` 显示Category详情,`list()` 显示所有Category的列表。 通过这样的设计,我们可以将数据访问和业务逻辑分离,使代码更易于维护和扩展。Service层专注于业务逻辑,而Action层则负责协调用户请求与业务逻辑之间的交互。这样的架构遵循了MVC(Model-View-Controller)设计模式,提高了代码的可重用性和可测试性。