编程珠玑:对DAO层的一点修改
由于以前的Domain对象都是不需要序列化的,所以为了操作数据库查询的方便,直接采用继承BaseDomain的方式来完成。这样在传递动态参数的时候,只需要把参数放到Map总,就可以很好的在ibatis配置文件(map.xx来直接获取值)中使用。
这样导致的一个害处就是对象看起来有直接根本就不需要的属性,即使你添加关键字transient,不少程序员依然在set的时候会费解一些不必要的属 性。例如:在insert()设置属性的时候竟然能够setPageNo()。质疑这个很有道理,但是以前一直extends粗暴简单的来完成任务,没有 额外的系统设计问题,所以就得过且过,没有继续抽象。
目前,Domain对象需要额外提供序列化的功能和为API服务,简单粗暴的方式不能继续适应系统要求,所以需要继续抽象。在CRUD的模型中,逐个分析需求变化导致的问题。
- insert() , update() , delete() 都可以直接传入对象,不需要额外的值,即使有这样的条件,也建议不动态传值到ibatis中;
- find() , list() 需要动态出入参数,同事find和list传入的参数值有所不同;list和find参数存在继承关系;
按照需求,设计抽象有3点:
- FindAapter() 提供动态参数的设置;
- ListAaapter() 提供分页的参数的设置,继承FindAapter() 接口;
- 用泛型动态传递Domain对象,让相关返回规范化。
UML关系图如下:
编程珠玑:对DAO层的一点修改相关推荐
- service中间调用dao层方法时,出现Mapper method ‘dao.xxx‘ has an unsupported return type错误,但是sql执行修改数据成功,并没有回滚
原因:这个是因为dao层的sql执行成功后,返回的类型出现问题. 代码: service层:public Map<String, Object> updateActiveId(String ...
- 三层架构编程、DAO层、Entity层、Service层、Controller层
什么是三层架构编程: 本质上所有的项目(应用程序)都是需要和用户交互,然后产生数据,对数据进行处理,最后将数据存储到硬盘这么个过程 在编程中,可以将这个过程分一下层次,最初只分两层,用户层和数据层,但 ...
- Service 层和 Dao 层有必要为每个类都加上接口吗?
以下文章来源方志朋的博客,回复"666"获面试宝典 作者:架构思维 toutiao.com/i6882356844245975563 前几天刷头条又刷到了「Service层和Da ...
- 在 Java Web 项目中,Service 层和 Dao 层真的有必要每个类都加上接口吗
作者 l 会点代码的大叔(CodeDaShu) 很多程序员在刚开始工作的时候,接触到的项目都是这样做的:项目的代码被分成 Controller.Service.Dao 层,一个接口对应一个实现类,然后 ...
- [转]JAVA中Action层, Service层 ,modle层 和 Dao层的功能区分
首先这是现在最基本的分层方式,结合了SSH架构.modle层就是对应的数据库表的实体类.Dao层是使用了Hibernate连接数据库.操作数据库(增删改查).Service层:引用对应的Dao数据库操 ...
- spring dao层注解_Spring– DAO和服务层
spring dao层注解 欢迎来到Spring教程的第三部分. 在这一部分中,我们将继续编写Timesheet应用程序,这次我们将实现DAO层,业务服务并编写一些测试. 在上一部分中,我们定义了Ge ...
- 一个项目中说系统分为表现层、控制层、逻辑层、DAO层和最终数据库五层架构...
表现层就是看到的东西,比如你现在看到的当前页面控制层就将你的请求从页面传到后台代码逻辑层就是处理你的请求的代码DAO层就是将数据存到数据库中的代码数据库就是数据库了,存东西用的DAO层就是将访问数据库 ...
- java系统项目分为哪五大层次?控制层_业务_一个项目中说系统分为表现层、控制层、逻辑层、DAO层和最终数据库五层架构-转...
表现层就是看到的东西,比如你现在看到的当前页面 控制层就将你的请求从页面传到后台代码 逻辑层就是处理你的请求的代码 DAO层就是将数据存到数据库中的代码 数据库就是数据库了,存东西用的 ,DAO层就是 ...
- 《编程珠玑(续)(修订版)》—第2章2.1节Awk中的关联数组
本节书摘来自异步社区<编程珠玑(续)(修订版)>一书中的第2章,第2.1节Awk中的关联数组,作者[美]Jon Bentley,更多章节内容可以访问云栖社区"异步社区" ...
最新文章
- 设计模式之C#实现---- ProtoType
- 新浪微博瘫痪,有人开心有人哭
- 为什么Java大神,都在看Spring Boot和Spring Cloud的书?
- Android移动开发之【Android实战项目】DAY2-使用Fragment实现底部菜单栏
- mvc大对象json传输报错
- 编译linux3内核,与busybox,用qemu模拟运行
- Android自动填充短信验证码
- java 进程崩溃_java程序崩溃自启脚本
- AI 换脸?除了 ZAO,用 Python 一样轻松搞定
- java 正则提取邮箱_如何用正则表达式提取一个网站里面的所有邮箱地址?
- 冒泡排序、选择排序、二分查找排序
- super()的作用
- Xcode中导入文件报错
- 把数据对象转成字符串_R语言处理环境监测数据(2):时间数据处理
- memcache源码编译安装
- ddrelease64 黑苹果_GitHub - wangtufly/Precision5510-High-Sierra: DELL Precision5510 10.13.X 黑苹果教程...
- STM32F103如何使用串口下载程序
- 怎么破解Windows账户密码
- ie浏览器表单提交被清空问题
- 学习Java的你知道什么是程序思维?
热门文章
- jQuery 一次定时器_干货 | 小论定时器玩法(时间轮询法)
- Java项目:日历万年历(java+swing)
- Java项目:网上电商系统(java+SSM+mysql+maven+tomcat)
- ie8加载js太慢_js ie8 慢
- HashSet中的add()方法( 一 )(详尽版)
- 微信小程序在showToast中换行并且隐藏icon
- 如何用 OS X 的 Xcode 写C语言程序
- Volume是如何工作的
- Windows Server 2012关闭Server Manager开机自启动
- Python函数式编程-map/reduce