- 浏览: 696096 次
- 性别:
- 来自: 福建
文章分类
最新评论
-
羽翼的心动:
同意2楼的说法,我们公司之前一个项目用过pageoffice, ...
poi导出excel文件工具类 -
贝塔ZQ:
poi实现导出excel文件,蛮麻烦的,用pageoffice ...
poi导出excel文件工具类 -
aishiqiang:
为什么我的项目配置好证书后,每次使用jenkinst自动构建包 ...
关于使用https协议,cas认证PKIX path building failed错误解决方法 -
zhongmin2012:
谢谢分享,正在想看
AST解析java源文件相关jar包 -
mybestroy1108:
感谢分享!受益良多!
Jboss7 JMS demo
上周上司提出要给dao瘦身(由业务层定义HQL语句,目前是将HQL语句定义在dao层),让我们想想有什么好的方法,通过周六、周日两天的思考,我提出了一个方案来,如下文:
1.定义一个通用dao,包含所有CURD的操作(因为HQL语句由业务层定义)
2.让所有实体(也可以使任意需要返回的对象)都继承至一个抽象类(“里氏代换原则”中说,任何基类可以出现的地方,子类一定可以出现。)
如图:
现在我们主要讨论下这两个方法:getReternObject和getReternObjectList,我们知道,这两个对象返回的对象是ReternObject和List<ReternObject>(这里ReternObject是一个抽象类),而返回的实际对象可能是EntityA、EntityB和EntityC的任意一个,根据“里氏代换原则”中说,任何基类可以出现的地方,子类一定可以出现。
我想说道这里大家应该很清楚我的用意了,比如说有一个这样的操作要获取EntityA,然后我们根据定义好的GeneralDao进行操作,通过业务层传入这样一条HQL语句:select a from EntityA where a.id = '01' ,这样我们就可以获得EntityA了,但好像很少人使用这样的方式来给dao瘦身,希望大虾们拍拍砖!这样做到底好不好!
我一直都喜欢把hql/sql语句定义在dao层的,但不直接写在代码里面,而是写在properties文件里,每个dao维护一个同名properties文件,自己觉得挺好的.
感觉泛型挺麻烦的!
1.定义一个通用dao,包含所有CURD的操作(因为HQL语句由业务层定义)
2.让所有实体(也可以使任意需要返回的对象)都继承至一个抽象类(“里氏代换原则”中说,任何基类可以出现的地方,子类一定可以出现。)
如图:
现在我们主要讨论下这两个方法:getReternObject和getReternObjectList,我们知道,这两个对象返回的对象是ReternObject和List<ReternObject>(这里ReternObject是一个抽象类),而返回的实际对象可能是EntityA、EntityB和EntityC的任意一个,根据“里氏代换原则”中说,任何基类可以出现的地方,子类一定可以出现。
我想说道这里大家应该很清楚我的用意了,比如说有一个这样的操作要获取EntityA,然后我们根据定义好的GeneralDao进行操作,通过业务层传入这样一条HQL语句:select a from EntityA where a.id = '01' ,这样我们就可以获得EntityA了,但好像很少人使用这样的方式来给dao瘦身,希望大虾们拍拍砖!这样做到底好不好!
评论
15 楼
tianmo2008
2009-10-24
lym6520 写道
上周上司提出要给dao瘦身(由业务层定义HQL语句,目前是将HQL语句定义在dao层),让我们想想有什么好的方法,通过周六、周日两天的思考,我提出了一个方案来,
我一直都喜欢把hql/sql语句定义在dao层的,但不直接写在代码里面,而是写在properties文件里,每个dao维护一个同名properties文件,自己觉得挺好的.
14 楼
lym6520
2009-07-10
yuantong 写道
public class GenericDao<T, PK extends Serializable, DAOImpl extends IGenericDao<T, PK>>
extends HibernateDaoSupport implements IGenericDao<T, PK>
extends HibernateDaoSupport implements IGenericDao<T, PK>
感觉泛型挺麻烦的!
13 楼
yuantong
2009-07-09
public class GenericDao<T, PK extends Serializable, DAOImpl extends IGenericDao<T, PK>>
extends HibernateDaoSupport implements IGenericDao<T, PK>
extends HibernateDaoSupport implements IGenericDao<T, PK>
12 楼
lym6520
2009-07-07
大虾都上哪了呢?
11 楼
lym6520
2009-07-07
...
10 楼
lym6520
2009-07-07
为什么你们都喜欢利用泛型呢?有没有更好的方法!我提出的这种方法是否可行?
9 楼
allwefantasy
2009-07-07
个人认为将所有的的持久化操作集合到一个类,通过依赖注入注入到action或者service层,直接调用注入对象进行持久化操作。类似于:
假设在action注入的名字为baseDAO.
那么我们保存一个对性的时候可以直接用baseDAO.save(object);
同理查询也可以用补丁参数+Critiria构造,比如
public abstract List findEntityProperty(final Class clzz,
final Order order, final int start, final int num,
final Criterion... criterions);
就能支持常见的查询
public class BaseImpl<T> implements IBaseDAO<T> { protected HibernateTemplate hibernateTemplate; public void setHibernateTemplate(HibernateTemplate hibernateTemplate) { this.hibernateTemplate = hibernateTemplate; } public void deleteEntity(T entity) { hibernateTemplate.delete(entity); } public void deleteEntity(Class clzz,Serializable id) { hibernateTemplate.delete(findEntity(clzz,id)); } public void saveEntity(T entity) { hibernateTemplate.save(entity); } }
假设在action注入的名字为baseDAO.
那么我们保存一个对性的时候可以直接用baseDAO.save(object);
同理查询也可以用补丁参数+Critiria构造,比如
public abstract List findEntityProperty(final Class clzz,
final Order order, final int start, final int num,
final Criterion... criterions);
就能支持常见的查询
8 楼
xyh
2009-07-07
Dao层应该简化,请看我的帖子:http://xyh.iteye.com/blog/412876
7 楼
lym6520
2009-07-06
所以我们才提出简化dao,想用一个dao来解决所有dao的操作!
6 楼
kjj
2009-07-06
用久了dao,反而感到繁琐,增加不必要的代码,不必要的操作,该是反思一下dao的作用到底是啥玩意呢!!
5 楼
lym6520
2009-07-06
我想dao可以看做是数据库的一个实例,是我们CURD操作的一个接口,services层通过dao层来访问数据库,这应该是面向对象的开发。
4 楼
kjj
2009-07-06
那里臃肿了,增加dao层主要目的是啥呢!!
3 楼
lym6520
2009-07-06
我现在用的构架是spring+hibernate的,总不可能把Dao层和services层混在一起吧!
2 楼
lym6520
2009-07-06
当是这样的话,你的services层不是很臃肿吗?
1 楼
kjj
2009-07-06
老实说,我已经把dao精简掉了,找不到他存在的必要性,直接action和service对话,必要的话,ajax直接绕过action和services对话
发表评论
-
linux 定时任务检查服务器是否正常
2014-02-28 22:21 4640通过curl命令判断url返回状态,以此来确定服务是否正常: ... -
poi导出excel文件工具类
2014-01-20 21:54 7207package m.utils.excel; imp ... -
课程设计--家庭财务管理系统
2012-04-14 16:58 1789记得第一次接触FLEX3是在毕业那一年,那时已经工作了大半年了 ... -
what's MINA?
2011-03-15 23:09 1332what's MINA? Apache MINA is a ... -
如何避免吧.svn文件编译到classes目录下
2011-01-25 09:47 0SVN是一个很好用的版本管理根据,但有一个很烦人的问题用ecl ... -
Java 异常处理及其应用
2010-10-26 12:46 1336Java 异常处理的忌讳引 ... -
AST解析java源文件相关jar包
2010-08-26 14:57 10438今天有个处理需要涉及到java源文件的解析,baidu、goo ... -
使用ejb3配置开发SessionBean
2010-08-25 17:06 0Session Bean除了可以使用注释来发布外,也可以使用相 ... -
oracle clob类型处理
2010-08-23 11:13 0oracle clob类型处理 update clob字段放 ... -
ibatis 事务回滚操作
2010-08-11 13:54 0public StateBean deleteTask(M ... -
设计模式 之 “适配器模式[Adapter Pattern]”
2010-07-15 08:58 1072适配器模式[Adapter Pattern]类图 适配器模 ... -
帮朋友写的个关键字搜索器
2010-07-14 10:33 1375上礼拜一朋友让我帮忙写个小软件,需求大概是这样的:一个 ... -
实现xml到JavaBean的转换
2010-05-15 22:08 1633今天心血来潮,想实现xml到JavaBean的实现,baidu ... -
使用apache mail发送邮件错误解决办法
2010-04-28 16:29 7892今天在写发送邮件的程序时发现了以下两个些错误,贴出来跟大家分享 ... -
jbpm4部署异常
2010-03-15 10:11 0java.lang.LinkageError: loader ... -
spring 单元测试:java.lang.SecurityException
2010-03-05 20:06 0spring 单元测试抛出: java.lang.Secur ... -
eclipse安装spket插件(javascript工具)
2009-12-18 15:29 0eclipse安装spket插件(javascript工具) ... -
使用java excel api 导出数据到excel
2009-12-11 16:06 0找到一个java操作excel的api,连接地址http:// ... -
java int转byte[]
2009-11-05 13:39 0/** * int转byte[] * @pa ... -
附件下载
2009-10-28 14:35 0/** * 下载 * @param reques ...
相关推荐
这是很经典的 dao orm 方法 魔乐技术2008的经典
dao接口 : PersonDAO extends GenericDao, Integer> 可以不写代码,方法已经在父类泛型dao里了,这里为了说明:可扩展添加 findByNameExact()方法 子类的附加方法。 泛型daoimpl :GenericDaoImpl, ID extends ...
优化Dao层查询方法 1 目标 目前ProductDao类有三个查询方法,selectAllProduct,selectProductDiscount和selectProductByName,这三个方法的查询语句,设置查询语句中占位符的语句有差别。处理查询结果的代码是完全...
mybatis spring 原始dao方法的整合 基础代码。 包括springjar包
dao封装包
sqlite数据库的dao方法
暴露给客户端的DAO接口在低层数据源的实现发生改变时并不会随着改变,所以这种设计模式使得DAO可以适应不同的数据储存方式类型而不影响客户端和商业组件.最主要的, DAO还在组件和数据源之间扮演着协调者的角色. DAO...
DAO设计模式DAO设计模式DAO设计模式DAO设计模式DAO设计模式DAO设计模式DAO设计模式DAO设计模式DAO设计模式DAO设计模式
dao层基类dao层基类dao层基类dao层基类dao层基类
javaee 用DAO实现的一个图书管理,增删查功能都具备,大家可以共同学习、做为期末大作业
Struts+DAO登陆Struts+DAO登陆Struts+DAO登陆Struts+DAO登陆Struts+DAO登陆Struts+DAO登陆Struts+DAO登陆
Orlc数据库连接类dao,方便,好省!
为什么我们要使用通用DAO接口呢,因为我们的数据库操作无非是增删改查,CRUD操作,我们不需要为每个实体去编写一个dao接口,对于相似的实体操作可以只编写一个通用接口,然后采用不同的实现! DAO已经成为持久层...
这是我从网上收集而来的,详细讲述了DAO的使用,我觉得对学习DAO编程很有帮助
DAO数据库安装文件。
mybatis开发Dao方法(原始方法teacher)
本文档资料适合JAVA软件开发高级人员使用!
C#特性标签实现通用Dao层C#特性标签实现通用Dao层C#特性标签实现通用Dao层
这是从VC6光盘提取的,遇到“无法对DAO/Jet db引擎进行初始化”问题的伙计们,可以下载此Dao Jet数据库引擎重新安装即可。