通用 DAO 接口设计

C#通用DAO实现(一)自己开发中曾经编写的 多年了,想把自己的开发中的心得记录下来.今天我终于下笔了.............................这些技术虽然已经有了很多的替代品(上层的框架实现),但本质的东西是没有变化,记录下来,以备以后参考吧,也是对刚入门的程序员的一种帮助.前提:为了简化ADO.NET操作,地层采用了PetShop的SqlHelper的代码,当然,SqlHelper的这些代码还是比较简单的,关于Sq 阅读详情

数据访问对象 DAO(Data Access Object)本质是个名词,但我们更多语境中不是作名词用,需要的是一套通用的接口去使用,至于返回的对象是什么,可以是 Java Bean 或者 Map 键对值。

假设我们背后有一套数据访问机制,是 MyBatis、原生 JDBC 无所谓,只要能提供数据就可以了,那么目前需要设计一套标准的 DAO 接口,会是这样的。

我们的目的是尽量可能简单衔接底层的据访问机制,提供常见的 findById 、 findList 、 create 、 update 等的操作,而且还允许扩展。于是只要求用户继承 Java Interface 接口就好,不用写实现。

数据格式

这里说的数据格式,就是数据实体,至于是 PO/VO/BO/DTO/POJO 什么鬼的先别管——我们刻下讨论的是 Java Bean 还是 Map。

为简单起见,假设背后的数据访问机制返回的通通都是 Map。——为什么要用 Map 呢?一个是简单,另外一个在跨表查询的时候,Map 是比较适合的,因为一般一个 Bean 对应一张表,如果跨表,那跨表的字段该放哪里好呢?

DAO 基类接口 IDataServiceBase

提供常见的数据操作方法,统一返回 Map / List<Map> 数据格式。

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

import com.ajaxjs.framework.PageResult;

/**
 * DAO 基类接口
 * <p>
 * 子接口继承该接口后,不需要写实现
 *
 * @author Frank Cheung<sp42@qq.com>
 */
public interface IDataServiceBase {
 
	/**
	 * 查询单个记录。如果找不到则返回 null
	 *
	 * @param id 记录 id
	 * @return 单个记录的 Bean
	 */
	Map<String, Object> findByIdAsMap(Serializable id);

	/**
	 * 查询列表数据
	 *
	 * @return Map 格式的列表结果
	 */
	List<Map<String, Object>> findListAsListMap();

	/**
	 * 查询分页数据
	 *
	 * @param start 开始行数
	 * @param limit 读取行数
	 * @return 分页结果对象
	 */
	PageResult<Map<String, Object>> findPagedListAsMap(int start, int limit);

	/**
	 * 新建记录
	 *
	 * @param map Map 实体
	 * @return 新建记录之 id 序号
	 */
	Serializable create(Map<String, Object> map);

	/**
	 * 修改记录
	 *
	 * @param map Map 实,应包含 id 字段
	 * @return 影响的行数,理应 = 1
	 */
	Integer update(Map<String, Object> map);

	/**
	 * 单个删除
	 *
	 * @param beanOrMapOrId
	 * @return 是否删除成功
	 */
	Boolean delete(Object beanOrMapOrId);

	/**
	 * 设置 SQL WHERE 的查询条件参数
	 * 
	 * @param queryParams
	 * @return
	 */
	IDataServiceBase setQuery(Map<String, Object> queryParams);

	/**
	 * 设置 SQL WHERE 的查询条件参数。 不用
为什么dao层和service层要用接口? 先说dao,这玩意儿是做数据库读写的。再从抽象角度说,不同业务模块之间的共用,不一定是共用某段代码,也可能是共用某段逻辑框架,这时候就需要抽象一个接口层出来,再通过不同的注入逻辑实现。有各种理由可以支持这种工序的合理性,比如一般来说,上一层的一行代码会对应下一层的好多行代码,那先让写上层代码的人写一遍,解决高端层面的bug,会提高很多效率。没有良好接口设计能力的人,写出来的接口抽象不合理,等于没写,什么好处都得不到,只有坏处,这种情况下干脆别写。最简单的场景,写接口的是你,写实现的是你小弟。 阅读详情

相关推荐

C#特性标签实现通用Dao层

C#特性标签实现通用Dao层C#特性标签实现通用Dao层C#特性标签实现通用Dao层

电化学阻抗谱(EIS)在锂离子电池中的应用

摘要电化学阻抗谱(electrochemical impedance spectroscopy, EIS)是一种重要的电化学测试方法,在锂离子电池动力学反应机理研究及动力学参数测量等方面具有广泛的应用。在锂离子电池运行过程中,各反应步骤的动力学参数及时间常数不同,而EIS可以在较宽的频率范围内对体系施加小幅正弦激励信号,使得在特定频率下突出特定时间常数的电极过程,从而将复杂的电极过程分离,实现单一电极过程动力学的分析。通过对交流阻抗信息的研究,也可以为锂离子电池及其他电池的应用与管理、电化学过程设计及电极材

qiushireader的博客 2656

硬全桥副边钳位管Vds电压凸台揭秘——寄生参数引发的导通异常

本文深入分析了硬全桥副边钳位管Vds电压凸台现象,揭示了寄生参数如何引发导通异常。通过波形分析和工程实践,详细解析了走线电感的蓄能效应和体二极管的接力作用,并提供了PCB布局优化、元件选型和驱动电路调整等解决方案,帮助工程师有效应对这一常见问题。

weixin_30825581的博客 430

MCNP 减方差技巧(最全)

MCNP的减方差技巧,核心在于不显著增加计算时间的前提下,通过修改模拟过程来降低结果的统计误差。尤其适用于,这类问题中粒子很难到达探测器区域,直接模拟效率极低栅元重要性是常用的减方差技巧,该方法主要对计算模型的不同区域定义不同的重要性数值。当粒子从重要性低的区域废物重要性高的区域,产生更多粒子,增大统计量;当从重要性高的区域进入重要性低的区域,会进行,增快计算效率。n= 中子,N;光子,P;电子 Exi= 栅元i的重要性I=栅元总数项目IMP卡是必须的,除非使用了WWN卡如果粒子进入0。

chencheng1127的博客 929

JWT实战:5分钟搞定Spring Boot集成JWT认证(含完整代码示例)

本文详细介绍了如何在Spring Boot中快速集成JWT认证,提供完整的代码示例和配置指南。通过JWT实现无状态认证,解决分布式系统中的会话管理问题,提升系统扩展性和安全性。涵盖令牌生成、验证、Spring Security整合及生产级优化方案。

weixin_29327525的博客 456

Camera AF和FF

Camera按对焦功能可以分为FF(Fixed Focus)和AF(Auto Focus),即固定对焦和自动对焦。固定对焦顾名思义就是焦距是固定的,而自动对焦可以通过移动镜头位置来改变焦距从而实现自动对焦。以前摄像的功能机大多是固定对焦,现在的手机都带有自动对焦功能。 FF模组包括镜头(Lens),传感器(Sensor),红外滤色器(IR Filter),电路板(PCB),镜头支撑(Lens Holder),连接器(Connector)。 Fig 1. FF Module AF模组包括FF模组,音圈马达(V

Coppa的博客 1万+

挂载(Mount)是什么意思

挂载 = 把一个存储设备或文件系统“接入”到现有的目录树,使其内容能够被访问。

天赐好车的博客 289

手把手教你学Simulink--基于新能源与储能系统的场景实例:压缩空气储能(CAES)系统热力学建模

本文介绍了使用Simulink进行压缩空气储能(CAES)系统热力学建模的详细步骤。系统模型包含压缩机、储气装置、膨胀机、热交换器和控制器等核心模块,通过MATLAB函数计算各部件参数,并设置仿真条件。文章详细说明了从模型创建到性能评估的完整流程,包括压缩/膨胀过程的能量转换、温度压力变化等关键指标分析。该建模方法可验证设计方案的有效性,并为系统优化提供参考,适用于新能源与储能领域的研究与应用。

MHD0815的博客 9189

Flatten 层的深度理解与运用

Flatten 层的深度理解与运用

你要拥有一个你喜欢并且热爱的人生 7036

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: GitHub中Fork来的仓库如何进行双向更新
下一篇: 一点一点理解微服务
JavaMonsterr
博客等级 码龄4年 211粉丝 481原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值