JSP,SSH框架学习日志3,DAO层.pdf
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
在Java Web开发中,SSH(Struts2、Spring、Hibernate)框架被广泛使用,而DAO(Data Access Object)层是SSH架构中的一个重要组成部分,主要负责与数据库进行交互。本篇日志将探讨如何在SSH框架下高效地实现DAO层,并通过JSP页面展示数据。 DAO层的主要职责是对数据进行增删查改(CRUD)操作,它封装了对数据库的直接访问,使得业务逻辑层(Service Layer)与数据存储层解耦。在实际开发中,为了提高代码的可复用性和可维护性,通常会采用面向接口编程的方式,由Spring框架进行依赖注入。 在本例中,DAO层的设计采用了泛型和继承的方法。定义了一个公共接口`ICommonDAO`,它包含了一组通用的方法,如`save()`, `delete()`, `update()`, `findById()`, `findAll()`, `findByQuery()`以及分页查询的`queryForPage()`。这些方法涵盖了基本的数据操作需求。 `ICommonDAO`接口使用了泛型 `<T,ID extends Serializable>`,其中`T`代表DAO操作的对象类型,`ID`是对象的主键类型,需要继承自Serializable接口,这是Hibernate操作对象时常见的做法。例如: ```java public interface ICommonDAO<T,ID extends Serializable> { public void save(T transientInstance) throws Exception; // 其他方法... } ``` 接下来,实现这个接口的抽象类`CommonDAO`,它包含了对Hibernate SessionFactory的引用以及一个构造方法,用于获取具体的实体类类型。`CommonDAO`提供了`SessionFactory`的getter和setter方法,以及一个构造器,通过`ParameterizedType`获取实际的泛型类型。这样,不同的DAO实现类可以通过继承`CommonDAO`,并指定自己的实体类,从而重用大部分代码。 ```java public abstract class CommonDAO<T,ID extends Serializable> implements ICommonDAO<T, ID> { private SessionFactory sessionFactory; private Class<T> persistentClass; public CommonDAO() { this.persistentClass = (Class<T>) ((ParameterizedType) getClass() .getGenericSuperclass()).getActualTypeArguments()[0]; } // session factory 的 getter 和 setter } ``` 使用这种方式,每个表的DAO实现类只需关注自己的特殊操作,而共通的CRUD操作则由`CommonDAO`提供。这种设计提高了代码的可读性和可维护性,降低了重复代码的数量。例如,对于名为`User`的实体,我们可以创建一个`UserDAO`类,继承`CommonDAO`并指定`User`类作为泛型参数: ```java public class UserDAO extends CommonDAO<User, Long> { // 可以在这里添加特定于User表的操作 } ``` 在实际应用中,这些DAO实例通常会在Spring配置文件中定义,并通过@Autowired注解进行注入。这样,Service层可以根据需要获取到相应的DAO实例,执行数据库操作。 本篇日志介绍了如何在SSH框架下,通过泛型和继承实现DAO层的高效设计,降低了代码的冗余,提升了代码的复用性。这种设计模式不仅适用于Hibernate,也可以应用于其他ORM框架,如MyBatis,只要适当地调整实现方式。同时,通过JSP页面展示由DAO层获取的数据,可以构建出完整的数据展示层,实现动态网页的功能。
- 粉丝: 62
- 资源: 7万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助