Javaee Dao层抽取详解:提高代码复用与效率
33 浏览量
更新于2024-09-01
收藏 75KB PDF 举报
"本文将深入解析Javaee Dao层的抽取过程,旨在提高代码复用性和可维护性。首先,我们来看在项目开发中,特别是在处理大量相似的增删改查操作时,如何通过抽离BaseDao来简化代码结构。在讲解之前,我们先回顾一下提取前的两个关键类:LinkManDao接口和其对应的LinkManDaoImpl实现。
LinkManDao接口定义了如下的CRUD操作方法:
1. `findCount(DetachedCriteria detachedCriteria)`: 用于查询LinkMan对象的数量,通过DetachedCriteria进行条件过滤。
2. `findByPage(DetachedCriteria detachedCriteria, Integer startIndex, Integer pageSize)`: 分页查询LinkMan对象,根据起始位置和页面大小获取数据。
3. `save(LinkMan linkMan)`: 保存一个新的LinkMan对象到数据库。
4. `findById(Long lkm_id)`: 根据ID获取单个LinkMan对象。
5. `update(LinkMan linkMan)`: 更新已有LinkMan对象的属性。
6. `delete(LinkMan linkMan)`: 删除指定的LinkMan对象。
在LinkManDaoImpl类中,这些方法的具体实现主要依赖于HibernateTemplate,如`findByCriteria`方法用于执行SQL查询。
提取BaseDao层的目的在于减少重复的数据库操作代码,提高代码的模块化程度。我们将共性的数据库操作抽象到BaseDao接口,例如:
```java
public interface BaseDao<T> {
int save(T entity);
T findById(Object id);
void update(T entity);
void delete(T entity);
int countByCriteria(Criteria criteria);
List<T> findByPage(Criteria criteria, int startIndex, int pageSize);
}
```
在这个BaseDao接口中,我们定义了一些通用的方法,如`save`、`findById`、`update`、`delete`以及基于Criteria的查询方法。然后,LinkManDao可以继承这个BaseDao,并根据具体业务需求重写或者扩展必要的方法。
例如,LinkManDao可以通过以下方式实现:
```java
public interface LinkManDao extends BaseDao<LinkMan> {
Integer findCount(DetachedCriteria detachedCriteria);
}
```
在实际的LinkManDaoImpl中,我们可以这样实现:
```java
@Repository
public class LinkManDaoImpl extends BaseDaoImpl<LinkMan> implements LinkManDao {
@Autowired
private SessionFactory sessionFactory;
// 重写或扩展BaseDao中的方法,利用Hibernate的Criteria API
@Override
public Integer findCount(DetachedCriteria detachedCriteria) {
Criteria criteria = createDetachedCriteriaFromDetachedCriteria(detachedCriteria);
return criteria.setProjection(Projections.rowCount()).uniqueResult().intValue();
}
private Criteria createDetachedCriteriaFromDetachedCriteria(DetachedCriteria detachedCriteria) {
Criteria criteria = sessionFactory.createCriteria(LinkMan.class);
criteria.createAlias("commonField", "cf", JoinType.LEFT_OUTER_JOIN); // 示例:关联其他表
criteria.add(detachedCriteria);
return criteria;
}
}
```
通过这种方式,我们把大部分数据库操作的逻辑抽象到了BaseDao,使得LinkManDao更专注于业务逻辑,提高了代码的可读性和维护性。同时,如果未来有其他类似的实体需要处理相同类型的数据库操作,可以直接继承BaseDao,无需重复编写大量相似的代码。"
2012-10-17 上传
2022-08-08 上传
点击了解资源详情
点击了解资源详情
2023-05-13 上传
2023-05-13 上传
2009-03-06 上传
点击了解资源详情
点击了解资源详情
weixin_38651450
- 粉丝: 1
- 资源: 921
最新资源
- 探索数据转换实验平台在设备装置中的应用
- 使用git-log-to-tikz.py将Git日志转换为TIKZ图形
- 小栗子源码2.9.3版本发布
- 使用Tinder-Hack-Client实现Tinder API交互
- Android Studio新模板:个性化Material Design导航抽屉
- React API分页模块:数据获取与页面管理
- C语言实现顺序表的动态分配方法
- 光催化分解水产氢固溶体催化剂制备技术揭秘
- VS2013环境下tinyxml库的32位与64位编译指南
- 网易云歌词情感分析系统实现与架构
- React应用展示GitHub用户详细信息及项目分析
- LayUI2.1.6帮助文档API功能详解
- 全栈开发实现的chatgpt应用可打包小程序/H5/App
- C++实现顺序表的动态内存分配技术
- Java制作水果格斗游戏:策略与随机性的结合
- 基于若依框架的后台管理系统开发实例解析