SSH框架网上商城项目实战:Service与Action的抽取与基本CRUD操作
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)设计模式,提高了代码的可重用性和可测试性。
146 浏览量
2017-07-01 上传
2020-09-02 上传
2016-12-16 上传
2020-09-02 上传
2020-09-02 上传
2020-10-22 上传
2015-01-15 上传
119 浏览量
weixin_38727825
- 粉丝: 3
- 资源: 900
最新资源
- 基于Python和Opencv的车牌识别系统实现
- 我的代码小部件库:统计、MySQL操作与树结构功能
- React初学者入门指南:快速构建并部署你的第一个应用
- Oddish:夜潜CSGO皮肤,智能爬虫技术解析
- 利用REST HaProxy实现haproxy.cfg配置的HTTP接口化
- LeetCode用例构造实践:CMake和GoogleTest的应用
- 快速搭建vulhub靶场:简化docker-compose与vulhub-master下载
- 天秤座术语表:glossariolibras项目安装与使用指南
- 从Vercel到Firebase的全栈Amazon克隆项目指南
- ANU PK大楼Studio 1的3D声效和Ambisonic技术体验
- C#实现的鼠标事件功能演示
- 掌握DP-10:LeetCode超级掉蛋与爆破气球
- C与SDL开发的游戏如何编译至WebAssembly平台
- CastorDOC开源应用程序:文档管理功能与Alfresco集成
- LeetCode用例构造与计算机科学基础:数据结构与设计模式
- 通过travis-nightly-builder实现自动化API与Rake任务构建