dao通用类

package com.accp.crm.dao;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

/**
*
* @author cliu
* @version 1.0
* @copyright (C) ACCP 2008
* @date 2008-12-15
* @desc 通用DAO类
*/
public interface IGenericDao<T, PK extends Serializable> {

// 保存并返回主键
public PK save(T instance);

// 保存或更新
public void saveOrUpdate(T instance);

// 删除
public void delete(T instance);

// 删除所有
public void deleteAll(Collection<T> instances);

// 根据ID查询
public T get(PK id);

// 查询所有
public List<T> findAll();

// 根据参数进行查询
public List<T> findByNamedParam(String queryString, String paramName,
Object value);

// 根据参数进行查询
public List<T> findByNamedParam(String queryString, String[] paramNames,
Object[] values);

// 根据样例查询
public List<T> findByExample(T instance);

// 根据HQL语句进行查询
public List<T> find(String queryString);

// 根据HQL语句进行查询
public List<T> find(String queryString, Object value);

// 根据HQL语句进行查询
public List<T> find(String queryString, Object[] values);

// 根据HQL语句进行update操作等
public int bulkUpdate(String hql);

// 根据HQL语句进行update操作等
public int bulkUpdate(String hql, Object value);

// 根据HQL语句进行update操作等
public int bulkUpdate(String hql, Object[] values);

// 判断是否包含
public boolean contains(T instance);

// 按样例进行总记录数统计
public int countByPagination(final T instance);

// 按样例进行分页查询
public List<T> findByPagination(final T instance, final int firstResult,
final int maxResult);

}
### DAO通用代码的设计 在Java中,DAO(数据访问对象)层通常通过设计通用的基来减少重复代码并提高可维护性。以下是基于Spring框架和Hibernate技术栈实现的一个典型子。 #### 使用泛型定义通用DAO接口 为了使DAO具有良好的扩展性和重用性,可以创建一个带有泛型参数的基础接口 `BaseDao<T, ID>`,其中`T`表示实体型,而`ID`则代表该实体对应的主键型: ```java public interface BaseDao<T, ID> { T findById(ID id); // 根据主键查找记录 List<T> findAll(); // 查找所有记录 void save(T entity); // 存储单个实体实 void deleteById(ID id); // 删除指定id对应的数据项 } ``` #### 实现基础功能的具体方法 接着,在具体实现上述抽象行为时可以选择继承自 Hibernate 提供的相关组件或者直接利用其 Session API 完成操作逻辑。这里给出一种可能的方式——借助 Spring Data JPA 的 Repository 功能简化开发流程[^1]: ```java import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface GenericJpaRepository<T, ID> extends JpaRepository<T, ID>, BaseDao<T, ID> {} ``` 此片段展示了如何通过声明式编程风格快速构建起满足基本CRUD需求的服务端点集合;与此同时由于采用了面向接口编程的思想模式因此也便于后期测试以及替换底层持久化机制而不影响高层应用结构稳定性[^2]. 另外如果项目并未采用 Spring Boot 自动配置特性,则需手动注册 Bean 并设置 EntityManagerFactory 等必要属性值以便于容器管理事务边界范围内的资源分配情况. 最后附上一段简单的单元测试验证新增加的功能模块是否正常工作: ```java @SpringBootTest class UserDaoTest { @Autowired private UserRepository userRepository; @BeforeEach public void setUp() throws Exception {} @AfterEach public void tearDown(){} @Test public void testSaveUser(){ User user=new User(); user.setName("John Doe"); userRepository.save(user); assertNotNull(user.getId()); } } ``` 以上即为有关 Java 中基于 Spring 和 Hibernate 技术体系下开展 DAO 层建设过程中涉及到的一些核心概念和技术要点说明[^3].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值