Javaee Dao层抽取详解:提高代码复用与效率
185 浏览量
更新于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 上传
2023-05-13 上传
2023-05-13 上传
2022-08-08 上传
2009-03-06 上传
点击了解资源详情
weixin_38651450
- 粉丝: 1
- 资源: 921
最新资源
- C语言数组操作:高度检查器编程实践
- 基于Swift开发的嘉定单车LBS iOS应用项目解析
- 钗头凤声乐表演的二度创作分析报告
- 分布式数据库特训营全套教程资料
- JavaScript开发者Robert Bindar的博客平台
- MATLAB投影寻踪代码教程及文件解压缩指南
- HTML5拖放实现的RPSLS游戏教程
- HT://Dig引擎接口,Ampoliros开源模块应用
- 全面探测服务器性能与PHP环境的iprober PHP探针v0.024
- 新版提醒应用v2:基于MongoDB的数据存储
- 《我的世界》东方大陆1.12.2材质包深度体验
- Hypercore Promisifier: JavaScript中的回调转换为Promise包装器
- 探索开源项目Artifice:Slyme脚本与技巧游戏
- Matlab机器人学习代码解析与笔记分享
- 查尔默斯大学计算物理作业HP2解析
- GitHub问题管理新工具:GIRA-crx插件介绍