在上一篇已经介绍了Persistence的全部功能,主要就是常用的数据库增删改查操作。既然持久类已完成接下来我们就需要通过它去完成我们的DAO层代码的开发了。
1.首先来看看我的DAO层代码:
1)基层的DAO接口:
/**
*
* @author hao.liu
*
* @param <T> 制定dao的基本操作是对应的哪个实体类
* @param <PK> 实体类的主键类型
*/
public interface IBaseDao<T,PK> {
public PK saveObj(T obj);
public void updateObj(T obj);
public void deleteObj(T obj);
public Object getEntityById(Serializable id);
public void deleteObjById(Serializable id);
public void deleteAll(Collection list);
public List queryList(HQLInfo hql);
public PageMapBean query(HQLInfo hql);
public PageMapBean query(HQLInfo hql,Page page);
}
接口提供常用的数据库操作方法。
2)基层的DAO接口的实现类:
/**
*
* @author hao.liu
*
* @param <T>
* @param <PK>
*/
public abstract class BaseDao<T,PK extends Serializable> implements IBaseDao<T, PK> {
//注入持久类
private Persistence persistence;
//实体类对应的类型
private Class<T> clazz;
public BaseDao(){
//获取实体类的运行时类型
clazz=(Class<T>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
@Override
public PK saveObj(T obj) {
// TODO Auto-generated method stub
return (PK)persistence.saveObj(obj);
}
@Override
public void updateObj(T obj) {
// TODO Auto-generated method stub
persistence.updateObj(obj);
}
@Override
public void deleteObj(T obj) {
// TODO Auto-generated method stub
persistence.deleteObj(obj);
}
@Override
public T getEntityById(Serializable id) {
return (T)persistence.getEntityById(clazz, id);
}
@Override
public void deleteObjById(Serializable id) {
// TODO Auto-generated method stub
persistence.deleteObjById(clazz, id);
}
@Override
public void deleteAll(Collection list) {
// TODO Auto-generated method stub
persistence.deleteAll(list);
}
@Override
public PageMapBean query(HQLInfo hql) {
// TODO Auto-generated method stub
return persistence.query(hql);
}
@Override
public PageMapBean query(HQLInfo hql,Page page) {
// TODO Auto-generated method stub
return persistence.query(hql,page);
}
public Persistence getPersistence() {
return persistence;
}
public void setPersistence(Persistence persistence) {
this.persistence = persistence;
}
@Override
public List queryList(HQLInfo hql) {
// TODO Auto-generated method stub
return persistence.queryList(hql);
}
}
实现类主要是通过persistence类的方法完成数据库的操作。
clazz=(Class<T>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];
上面方法时获取泛型的运行时类型。
为什么要写个接口呢?其实我们也是可以通过写一个DAO将persistence注入给DAO就可以实现数据操作了。但是这样的话每个DAO类中都会有一个增,删,改方法。我通过接口的形式就让我们开发的DAO去实现接口,这样基层DAO中的方法就不需要在DAO中写了。这样代码就重复利用。
2.现在看看基层DAO 在spring中的配置:
<bean id="baseDao" class="com.lh446.commons.dao.BaseDao" abstract="true">
<property name="persistence" ref="persistence"></property>
</bean>
注意到配置时候我们的baseDao是abstract,代码中的BaseDao也是abstract,原因是BaseDao中的默认构造函数需要获取泛型类型,spring在注入baseDao时并不知道泛型的实际类型,这样spring注入就失败了。我们将baseDao注入成abstract,通过它的子类来实例化。
3.实现我们的DAO子类:
public interface ICodeDao extends IBaseDao<Code, Integer> {
public HQLInfo queryCode(CodeDto dto);
}
public class CodeDaoImpl extends BaseDao<Code, Integer> implements ICodeDao {
@Override
public HQLInfo queryCode(CodeDto dto) {
StringBuffer bf=new StringBuffer();
bf.append(" from Code a ");
bf.append(" where 1=1 ");
bf.append(" and a.codeName= :codeName");
bf.append(" and a.codeValue= :codeValue");
bf.append(" and a.codeDisValue= :codeDisValue");
bf.append(" order by a.codeId desc ");
String sql=HQLInfoHelper.formatSQLStr(bf.toString());
String[] params=HQLInfoHelper.getParaNames(sql);
HQLInfo info=HQLInfoHelper.getHQLInfo(sql, params, dto);
return info;
}
<bean id="codeDao" class="com.lh446.authority.dao.impl.CodeDaoImpl" parent="baseDao">
</bean>
这样我们的自己的DAO就能有基层DAO的所有方法了。
下一篇我们将讲解持久类中是如何实现Hibernate和jdbc查询的。
分享到:
相关推荐
在IT行业中,SSH(Struts2 + Spring + Hibernate)是一个非常经典的Java Web开发框架,用于构建高效、可扩展的企业级应用程序。这个“WEB开发-SSH三层框架”项目涵盖了这三个核心组件,以及相关的数据库文件和工程...
4. **DAO(Data Access Object)**:DAO层是数据访问层,直接与数据库进行交互。它的任务是执行SQL查询,将数据对象转换为数据库记录,反之亦然。 在本项目中,用户信息管理涉及以下功能: - **注册**:用户通过...
7. **实体类与DAO层**:实体类代表数据库中的表,DAO(Data Access Object)层是处理数据库操作的接口和实现,它们是业务逻辑层和数据库之间的桥梁。 8. **会话管理与安全**:了解如何使用session来跟踪用户状态,...
【S2Dao简介及特征】 S2Dao是Seasar2框架的一个重要组成部分,作为一个轻量级的持久化解决方案,它的主要特点是简化了Object-Relational ...对于需要快速开发和维护数据库应用的项目,S2Dao是一个高效且实用的选择。
标题中的“s2-dao-1.0.49.zip”指的是Seasar2项目中的一个特定版本,DAO(Data Access Object)模块的压缩包。Seasar2是一个Java平台上的开源框架,它旨在简化企业级应用的开发过程,尤其是数据库相关的操作。DAO层...
Seasar框架是一个在日本广泛使用的开源Java开发框架,它包含了多个组件,用于简化企业级应用程序的开发。S2-DAO是Seasar框架中的一个重要部分,全称为"Seasar2 Data Access Object",它提供了数据访问层的抽象,使得...
"mybatis-generic-dao-demo-generic" 是一个基于MyBatis的通用DAO项目的示例,它展示了如何利用MyBatis的插件机制来实现数据访问对象(DAO)的通用化,从而提高开发效率。 在这个项目中,重点可能包括以下几个方面...
【标题】"mybatis-generic-dao-demo-basic"是一个基于MyBatis框架的Spring整合示例项目,它展示了如何在实际开发中使用MyBatis作为持久层框架,配合Spring进行数据库操作。MyBatis是一个轻量级的ORM(对象关系映射)...
K-Duck-Core是一个开源、免费的Java快速开发框架,基于Spring MVC、Spring和Spring JdbcTemplate构建。该框架通过封装数据表为对象,自动处理数据访问层逻辑,减轻开发者编写DAO代码的负担,并要求使用SQL装配方式...
ORM(Object-Relational Mapping)框架如Hibernate、MyBatis等,简化了DAO层的开发,通过配置文件或注解将Java对象映射到数据库表,减少了手动编写SQL的工作量。 5. 事务管理 在DAO层,通常需要处理事务边界,...
SSH和SSI是两种广泛使用的Java企业级开发框架组合,它们简化了开发过程,提高了代码的可维护性和可重用性。 1. **Spring.jar**:这是Spring框架的核心库,包含IoC(Inversion of Control,控制反转)和AOP(Aspect-...
总结来说,-web-Dao-Service-Controller--master.zip中的框架是Java后端开发的一个基础实践,通过-ioc-、aop-和-mvc-的核心理念,它提供了一个清晰的层次结构,便于管理和扩展。学习和掌握这些概念对于提升Java后端...
在Java中,Hibernate或MyBatis等ORM(对象关系映射)框架常用于实现Dao层。Dao层的方法通常对应SQL查询,例如,使用HQL(Hibernate Query Language)或原生SQL。Dao层的作用在于隔离应用程序与底层数据存储,使得...
Service层和DAO层是软件开发中常见的两种设计模式,主要用于分离业务逻辑和数据访问操作。在Java Web开发中,它们通常被应用于三层架构或MVC(Model-View-Controller)模型中。 DAO(Data Access Object)层是负责...
这得益于其内嵌的大量Java组件库(im-BizAPI),以及对JavaEE开发框架(im-JavaEEFramework)的支持,使得开发者可以专注于业务逻辑的实现,而无需过多关注底层技术细节。 #### 灵活的SOA系统整合基础 Intra-mart...
存贮过程进行操作,目前还有待完善,可以不用hibernate-generic-dao - Generic DAO, 用Spring3.2.0和Hibernate4替换,就是一个非常好的Struts2+Spring3+Hibernate4基于annotation的零配置的开发框架 借鉴网友的经验...
map-dao,顾名思义,它是一个基于Map数据结构的数据库访问对象(DAO)框架。DAO层是业务逻辑和数据存储之间的桥梁,负责处理与数据库交互的细节,从而降低系统耦合度,提高代码可读性和维护性。map-dao通过提供简洁...
Spring框架则是一个全面的企业级应用开发框架,提供了依赖注入(DI)和面向切面编程(AOP)等核心特性。在SSH中,Spring主要负责管理各个组件,包括Struts的动作类、Hibernate的数据访问对象(DAO)等,降低了组件...
在当今的软件开发领域,数据库操作是不可或缺的一部分,而高效的DAO(Data Access Object)框架能够极大提升开发效率和代码质量。"TomKingDAO-猫王DAO框架"就是这样一个专为简化数据库交互而设计的工具,它以其独特...
SSM(Spring-SpringMVC-Mybatis)通用Dao框架是一个常见的Java Web开发架构,它整合了Spring、SpringMVC和Mybatis三个强大的开源框架,为开发者提供了便捷的数据访问和业务逻辑处理能力。这个框架的使用可以显著提高...