`
lh44601
  • 浏览: 7382 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

自己写的项目开发框架(4)--开发DAO层

 
阅读更多
在上一篇已经介绍了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查询的。

分享到:
评论

相关推荐

    WEB开发-SSH三层框架

    在IT行业中,SSH(Struts2 + Spring + Hibernate)是一个非常经典的Java Web开发框架,用于构建高效、可扩展的企业级应用程序。这个“WEB开发-SSH三层框架”项目涵盖了这三个核心组件,以及相关的数据库文件和工程...

    使用jsp-servlet-service-dao四层结构完成用户信息的增删改查操作

    4. **DAO(Data Access Object)**:DAO层是数据访问层,直接与数据库进行交互。它的任务是执行SQL查询,将数据对象转换为数据库记录,反之亦然。 在本项目中,用户信息管理涉及以下功能: - **注册**:用户通过...

    Java数据库系统项目开发实践--物流管理系统

    7. **实体类与DAO层**:实体类代表数据库中的表,DAO(Data Access Object)层是处理数据库操作的接口和实现,它们是业务逻辑层和数据库之间的桥梁。 8. **会话管理与安全**:了解如何使用session来跟踪用户状态,...

    seasar框架S2Dao使用指南

    【S2Dao简介及特征】 S2Dao是Seasar2框架的一个重要组成部分,作为一个轻量级的持久化解决方案,它的主要特点是简化了Object-Relational ...对于需要快速开发和维护数据库应用的项目,S2Dao是一个高效且实用的选择。

    s2-dao-1.0.49.zip

    标题中的“s2-dao-1.0.49.zip”指的是Seasar2项目中的一个特定版本,DAO(Data Access Object)模块的压缩包。Seasar2是一个Java平台上的开源框架,它旨在简化企业级应用的开发过程,尤其是数据库相关的操作。DAO层...

    s2-dao-1.0.50.zip

    Seasar框架是一个在日本广泛使用的开源Java开发框架,它包含了多个组件,用于简化企业级应用程序的开发。S2-DAO是Seasar框架中的一个重要部分,全称为"Seasar2 Data Access Object",它提供了数据访问层的抽象,使得...

    mybatis的基本演示项目-mybatis-generic-dao-demo-generic

    "mybatis-generic-dao-demo-generic" 是一个基于MyBatis的通用DAO项目的示例,它展示了如何利用MyBatis的插件机制来实现数据访问对象(DAO)的通用化,从而提高开发效率。 在这个项目中,重点可能包括以下几个方面...

    mybatis的基本演示项目-mybatis-generic-dao-demo-basic

    【标题】"mybatis-generic-dao-demo-basic"是一个基于MyBatis框架的Spring整合示例项目,它展示了如何在实际开发中使用MyBatis作为持久层框架,配合Spring进行数据库操作。MyBatis是一个轻量级的ORM(对象关系映射)...

    基于Spring MVC/Spring的快速开发框架K-Duck-Core设计源码

    K-Duck-Core是一个开源、免费的Java快速开发框架,基于Spring MVC、Spring和Spring JdbcTemplate构建。该框架通过封装数据表为对象,自动处理数据访问层逻辑,减轻开发者编写DAO代码的负担,并要求使用SQL装配方式...

    web应用dao层的开发经验小结

    ORM(Object-Relational Mapping)框架如Hibernate、MyBatis等,简化了DAO层的开发,通过配置文件或注解将Java对象映射到数据库表,减少了手动编写SQL的工作量。 5. 事务管理 在DAO层,通常需要处理事务边界,...

    hibernate3.jar、ibatis-dao-2.jar、spring.jar、struts.jar、log4j-1.2.9.jar

    SSH和SSI是两种广泛使用的Java企业级开发框架组合,它们简化了开发过程,提高了代码的可维护性和可重用性。 1. **Spring.jar**:这是Spring框架的核心库,包含IoC(Inversion of Control,控制反转)和AOP(Aspect-...

    -web-Dao-Service-Controller--master.zip

    总结来说,-web-Dao-Service-Controller--master.zip中的框架是Java后端开发的一个基础实践,通过-ioc-、aop-和-mvc-的核心理念,它提供了一个清晰的层次结构,便于管理和扩展。学习和掌握这些概念对于提升Java后端...

    03---Controller-Service-Dao.zip

    在Java中,Hibernate或MyBatis等ORM(对象关系映射)框架常用于实现Dao层。Dao层的方法通常对应SQL查询,例如,使用HQL(Hibernate Query Language)或原生SQL。Dao层的作用在于隔离应用程序与底层数据存储,使得...

    Service层和DAO层解析

    Service层和DAO层是软件开发中常见的两种设计模式,主要用于分离业务逻辑和数据访问操作。在Java Web开发中,它们通常被应用于三层架构或MVC(Model-View-Controller)模型中。 DAO(Data Access Object)层是负责...

    intra-mart(coremount) 完整开发指南 PDF

    这得益于其内嵌的大量Java组件库(im-BizAPI),以及对JavaEE开发框架(im-JavaEEFramework)的支持,使得开发者可以专注于业务逻辑的实现,而无需过多关注底层技术细节。 #### 灵活的SOA系统整合基础 Intra-mart...

    基于Maven,Struts2, Spring,Hibernate全注释的开发框架

    存贮过程进行操作,目前还有待完善,可以不用hibernate-generic-dao - Generic DAO, 用Spring3.2.0和Hibernate4替换,就是一个非常好的Struts2+Spring3+Hibernate4基于annotation的零配置的开发框架 借鉴网友的经验...

    map-dao是数据库接口包

    map-dao,顾名思义,它是一个基于Map数据结构的数据库访问对象(DAO)框架。DAO层是业务逻辑和数据存储之间的桥梁,负责处理与数据库交互的细节,从而降低系统耦合度,提高代码可读性和维护性。map-dao通过提供简洁...

    SSH框架----初学基础

    Spring框架则是一个全面的企业级应用开发框架,提供了依赖注入(DI)和面向切面编程(AOP)等核心特性。在SSH中,Spring主要负责管理各个组件,包括Struts的动作类、Hibernate的数据访问对象(DAO)等,降低了组件...

    TomKingDAO-猫王DAO框架

    在当今的软件开发领域,数据库操作是不可或缺的一部分,而高效的DAO(Data Access Object)框架能够极大提升开发效率和代码质量。"TomKingDAO-猫王DAO框架"就是这样一个专为简化数据库交互而设计的工具,它以其独特...

    ssm(Spring-springMVC-Mybatis)通用Dao框架

    SSM(Spring-SpringMVC-Mybatis)通用Dao框架是一个常见的Java Web开发架构,它整合了Spring、SpringMVC和Mybatis三个强大的开源框架,为开发者提供了便捷的数据访问和业务逻辑处理能力。这个框架的使用可以显著提高...

Global site tag (gtag.js) - Google Analytics