public interface BaseDAO {
void save(T instance);
void update(T instance);
void delete(T instance);
T get(String id);
List<T> findAll();
List<T> findByExample(T instance);
int bulkUpdate(String hql);
int bulkUpdate(String hql, Object value);
int bulkUpdate(String hql, Object[] value);
List<T> find(String queryString);
List<T> find(String queryString, Object obj);
List<T> find(String queryString, Object[] obj);
List<T> findByNamedParam(String queryString, String paramName, Object value);
List<T> findByNamedParam(String queryString, String[] paramNames, Object[] values);
List<T> findByNamedQuery(String queryName);
List<T> findByNamedQuery(String queryName, Object value);
List<T> findByNamedQuery(String queryName, Object[] values);
List<T> findByProperty(String property, Object value);
List<T> findByPagination(final T t, final int firstResult, final int maxResult);
int countByPagination(final T t);
}
实现类:
import java.sql.*;
import java.util.List;
import org.hibernate.*;
import org.hibernate.criterion.*;
import org.springframework.orm.hibernate3.*;
import org.springframework.orm.hibernate3.support.*;
import com.vo.T;
public abstract class BaseDAOImpl extends HibernateDaoSupport implements BaseDAO{
protected abstract Class type(); //反射方法调用类
// 保存
public void save(T instance) {
getHibernateTemplate().save(instance);
}
// 更新
public void update(T instance) {
getHibernateTemplate().update(instance);
}
// 删除
public void delete(T instance) {
getHibernateTemplate().delete(instance);
}
// 根据ID查询
@SuppressWarnings("unchecked")
public T get(String id) {
return (T) getHibernateTemplate().get(type(), id);
}
// 查询所有
@SuppressWarnings("unchecked")
public List<T> findAll() {
return getHibernateTemplate().loadAll(type());
}
// 根据例子查询
@SuppressWarnings("unchecked")
public List<T> findByExample(T instance) {
return getHibernateTemplate().findByExample(instance);
}
// 根据HQL语句进行update操作等
public int bulkUpdate(String hql) {
return getHibernateTemplate().bulkUpdate(hql);
}
// 根据HQL语句进行update操作等
public int bulkUpdate(String hql, Object value) {
return getHibernateTemplate().bulkUpdate(hql, value);
}
// 根据HQL语句进行update操作等
public int bulkUpdate(String hql, Object[] value) {
return getHibernateTemplate().bulkUpdate(hql, value);
}
// 根据HQL语句进行查询
@SuppressWarnings("unchecked")
public List<T> find(String queryString) {
return getHibernateTemplate().find(queryString);
}
// 根据HQL语句进行查询
@SuppressWarnings("unchecked")
public List<T> find(String queryString, Object obj) {
return getHibernateTemplate().find(queryString, obj);
}
// 根据HQL语句进行查询
@SuppressWarnings("unchecked")
public List<T> find(String queryString, Object[] obj) {
return getHibernateTemplate().find(queryString, obj);
}
/**
* 使用命名查询进行查询
*
* @param queryString
* HQL
* @param paramName
* 参数名
* @param value
* 参数值
* @return
*/
@SuppressWarnings("unchecked")
public List<T> findByNamedParam(String queryString, String paramName, Object value) {
return this.getHibernateTemplate().findByNamedParam(queryString, paramName, value);
}
/**
* 使用命名查询进行查询 多个参数
*
* @param queryString
* HQL
* @param paramNames
* 参数名的数组
* @param values
* 参数值的数组
* @return
*/
@SuppressWarnings("unchecked")
public List<T> findByNamedParam(String queryString, String[] paramNames, Object[] values) {
return this.getHibernateTemplate().findByNamedParam(queryString, paramNames, values);
}
/**
* 使用HIBERNATE映射文件中的定义的HQL语句进行查询
*
* @param queryName
* 文件中定义的HQL语句的名字
* @return
*/
@SuppressWarnings("unchecked")
public List<T> findByNamedQuery(String queryName) {
return getHibernateTemplate().findByNamedQuery(queryName);
}
/**
*
* @param queryName
* @param value
* @return
*/
@SuppressWarnings("unchecked")
public List<T> findByNamedQuery(String queryName, Object value) {
return getHibernateTemplate().findByNamedQuery(queryName, value);
}
/**
*
* @param queryName
* @param values
* @return
*/
@SuppressWarnings("unchecked")
public List<T> findByNamedQuery(String queryName, Object[] values) {
return getHibernateTemplate().findByNamedQuery(queryName, values);
}
/**
* 根据属性查询
*
* @param property
* @param value
* @return
*/
@SuppressWarnings("unchecked")
public List<T> findByProperty(String property, Object value) {
return this.getHibernateTemplate().findByCriteria(
DetachedCriteria.forClass(type()).add(Restrictions.eq(property, value)));
}
/**
* 分页查询
* 注:不能满足要求子类重写该方法
* @param t
* @param firstResult
* @param maxResult
* @return 返回分页查询的数据
*/
@SuppressWarnings("unchecked")
public List<T> findByPagination(final T t, final int firstResult, final int maxResult) {
return getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException, SQLException {
Criteria criteria = session.createCriteria(type());
criteria.add(Example.create(t).enableLike(MatchMode.ANYWHERE));
criteria.setFirstResult(firstResult);
criteria.setMaxResults(maxResult);
return criteria.list();
}
});
}
/**
* 分页统计查询
*
* @param t
* @return 一共有多少条数据
*/
@SuppressWarnings("unchecked")
public int countByPagination(final T t) {
return (Integer) getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException, SQLException {
Criteria criteria = session.createCriteria(type());
criteria.setProjection(Projections.rowCount());
criteria.add(Example.create(t).enableLike(MatchMode.ANYWHERE));
return criteria.uniqueResult();
}
});
}
}
反射类:
public class ClassInfoDAO{
@SuppressWarnings("unchecked")
protected Class type() {
return User.class;
}
}
分享到:
相关推荐
一个非常好的文档来介绍DDD分层架构参考代码目录结构,接口层,应用层,领域层和基础层等!
12.2.2. 在Spring的application context中创建 SessionFactory 12.2.3. HibernateTemplate 12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. ...
精通spring 源代码 对JavaEE5及Spring2.5进行了综述。包括Java EE5,步入Spring2.5,获得Spring2.5发布版和源码。启动Spring2.5使能项目 详细介绍Spring2.5核心技术。包括控制反转容器,面向切面编程 对DA0层...
1. word文档记录了Struts2+Hibernate3+Spring2.5整合详细步骤,附有操作步骤的图示参考,并给出了各个步骤的注意事项; 2. 源代码实例包括一个完整模块的增删改查操作,可直接运行,可以在此基础上直接进行自己系统...
你可以使用 IoC容器,在其上使用Struts,但是你也可以选择使用 Hibernate 整合代码或者 JDBC 抽象层。 我们将Spring设计为非侵入式的(并且以后也是如此),这意味着应用基本上不需要依赖框架本身 (或者肯定是最小...
你可以使用 IoC容器,在其上使用Struts,但是你也可以选择使用 Hibernate 整合代码或者 JDBC 抽象层。 我们将Spring设计为非侵入式的(并且以后也是如此),这意味着应用基本上不需要依赖框架本身 (或者肯定是最小...
3. MyBatis框架:MyBatis是一个持久层框架,用于与数据库进行交互。它提供了一种将数据库操作与Java对象映射起来的方式,避免了手动编写繁琐的SQL语句,并提供了事务管理和缓存等功能,简化了数据库访问的过程
Spring-generator 是基于 javafx8 开发的图形界面 Spring 代码生成器,使用 Apache FreeMarker 作为代码文件的模板,用户可以一键将数据库中的表生成为任意风格的 .java 代码文件(比如经典的三层模型)。 Spring-...
而在持久层的设计中则是采用基于现有持久层框架的实现模式,实现了对产生Session实例的封装,对常用数据库操作的封装。这样设计减少了耦合性且避免了生成大量的临时对象。 该系统框架能达到良好的可拓展性和维护性。...
MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan ...
此外,还使用了MyBatis作为持久层框架,实现了对数据库的灵活操作。通过引入Redis缓存技术,有效提升了系统的响应速度和并发处理能力。 毕设源代码部分,包含了系统的所有功能模块的实现代码。代码结构清晰、易于...
- 持久层框架:Mybatis-plus_3.3.2 - 安全框架:Apache Shiro 1.5.3,Jwt_3.10.3 - 数据库连接池:阿里巴巴Druid 1.1.17 - 缓存框架:redis? - 日志打印:logback - 其他:Swagger-ui,quartz, lombok(简化...
同时,项目还集成了MyBatis作为持久层框架,简化了数据库操作。通过Spring Security保证了系统的安全性,包括用户身份验证和授权。 说明文档则对项目的每个模块进行了详细的解释,包括模块的功能、接口定义、数据...
本资源包是一个基于Spring Boot开发的在线考试系统的毕业设计项目,包括完整的源代码、详细的说明文档以及论文,旨在帮助学习者深入理解和掌握Spring Boot框架在实际项目中的应用。 该系统功能全面,涵盖了用户管理...
- 持久层框架:MyBatis v3.4.2 - 数据库:MySQL v8.0.21 - JSON解析库:FastJson v1.2.70 - 测试框架:JUnit - 加密:BCrypt加密 ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请...
数据库方面,选用了MySQL作为存储数据的后端,通过JPA或MyBatis等持久层框架进行数据操作。前端则采用了响应式设计,保证了在不同设备上的良好显示效果。 毕业论文详细阐述了系统的需求分析、系统设计、系统实现...
集成调试器允许开发者逐行执行代码,设置断点、查看变量值、跟踪调用堆栈等,帮助定位并修复代码中的错误。 测试框架和工具则协助开发者编写和运行单元测试、集成测试及性能测试,确保软件质量。 版本控制与协作...
该高校党务系统采用了当前主流的Spring Boot框架进行开发,结合了一系列先进的技术与工具,如Spring Security进行权限控制、MyBatis作为持久层框架、MySQL作为数据库管理系统等,确保了系统的稳定性、安全性与高效性...
包含了web开发中常用的功能,如:缓存(redis)、日志、事务、JPA、shiro、安全、常用工具类、swagger2在线接口文档、跨域支持等,可以基于该项目快速进行公司内部的项目开发。 开发工具在软件开发生命周期中扮演...
- 持久层框架使用Spring Data JPA/JDBC - 数据源默认使用HikariCP - 使用SpringFox生成API文档 - 提供Swagger-UI可测试API界面 - 提供独立的HTML静态文档生成模块 - logback分别打印-info与-error双日志 - ...