`
lym6520
  • 浏览: 705814 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

我给dao的瘦身方法请大虾拍砖!

    博客分类:
  • JAVA
阅读更多
上周上司提出要给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瘦身,希望大虾们拍拍砖!这样做到底好不好!
  • 大小: 14.8 KB
分享到:
评论
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>

感觉泛型挺麻烦的!
13 楼 yuantong 2009-07-09  
public class GenericDao<T, PK extends Serializable, DAOImpl extends 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层,直接调用注入对象进行持久化操作。类似于:
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对话

相关推荐

    经典 dao orm方法

    这是很经典的 dao orm 方法 魔乐技术2008的经典

    泛型dao 泛型dao 泛型dao

    dao接口 : PersonDAO extends GenericDao, Integer&gt; 可以不写代码,方法已经在父类泛型dao里了,这里为了说明:可扩展添加 findByNameExact()方法 子类的附加方法。 泛型daoimpl :GenericDaoImpl, ID extends ...

    S2SH中JSP页面调用dao的方法

    ### S2SH中JSP页面调用DAO的方法详解 #### 一、背景介绍 在Struts2 + Spring + Hibernate(简称S2SH)框架中,数据访问层(DAO层)通常与视图层(如JSP页面)进行解耦设计。这种设计模式有助于提高系统的可维护性和...

    不要重复 DAO !

    标题“不要重复 DAO!”指的是在软件开发中,尤其是在Java领域,如何避免数据访问对象(DAO)层的代码重复,以提高代码复用性和维护性。DAO模式是将业务逻辑与数据库操作分离的一种设计模式,它使得应用代码可以独立...

    javaEE DAO具体实现方法源码

    在Servlet或JSP页面中,处理用户的请求,调用服务类的方法,将结果返回给用户。例如,在Servlet中: ```java @WebServlet("/book") public class BookServlet extends HttpServlet { private BookService ...

    dao包封装包

    在Java开发中,DAO接口定义了各种数据库操作的方法,比如查询、插入、更新和删除数据。这些方法通常以抽象形式存在,不包含具体的SQL语句。例如,一个`UserDAO`接口可能包含如下方法: ```java public interface ...

    Don’t repeat the DAO!

    标题“Don’t repeat the DAO!”指的是在软件开发中避免重复创建数据访问对象(DAO)模式的实践。DAO模式是设计模式的一种,它提供了一种在应用程序代码与数据库交互时解耦的方法。这篇博客可能探讨了如何有效地利用...

    Dao Jet数据库引擎

    DAO(Data Access Objects)是与Jet引擎配套的数据访问接口,允许程序员通过对象和方法来操作数据库。 在描述中提到的问题,“无法对DAO/Jet db引擎进行初始化”,通常是由于某些原因导致DAO或Jet引擎的组件损坏、...

    Dao3.5数据库引擎

    DAO(Data Access Objects)是微软在早期开发的一种数据库访问技术,它是Microsoft Jet数据库引擎的一部分,主要用于与Access数据库的交互。DAO3.5是DAO的一个特定版本,它在Windows 95和Windows 98时代非常流行,但...

    系统配置文件 dao350和dao360

    解决这个问题的一种方法是将缺失的DAO文件(如“dao360.dll”)复制到系统的正确目录下。在Windows系统中,这通常是System32或者SysWOW64目录(对于64位系统)。将这些文件放置到正确位置后,系统就能找到所需的组件...

    DAO详解 详细讲述了DAO的使用

    DAO模式是一种设计模式,它提供了一种方法来封装对数据库的所有访问,避免了业务逻辑与数据访问代码的耦合。DAO接口定义了对数据的操作,而DAO实现类则负责具体的数据库交互,如SQL查询、事务处理等。 **2. DAO模式...

    Java Web实验六 采用 DAO 模式实现对数据库的访问方法, 利用 Servlet 实现 MVC 模式

    这样做的好处在于,业务逻辑层不必直接与数据库进行通信,而是通过调用DAO的方法,降低了代码的耦合度。在实验中,你需要创建一个具体的DAO实现类,该类将包含连接数据库、执行SQL语句、处理结果集等方法。例如,你...

    mongoTemplate工具类Dao层方法封装.zip

    这个资源包“mongoTemplate工具类Dao层方法封装.zip”显然提供了两种版本的MongoTemplate操作集合的代码示例,旨在帮助开发者更高效地进行数据访问层(Dao层)的开发。以下是关于MongoTemplate及它在 Dao 层中使用的...

    dao3.5数据库安装文件

    1. **数据库连接**:DAO提供了一种直接与数据库进行通信的方法,允许开发者创建连接、打开和关闭数据库,以及执行查询和事务处理。 2. **对象模型**:DAO 3.5包含一系列的对象,如Database、TableDef、QueryDef、...

    dao jet数据库引擎

    DAO接口的工作原理是通过提供一组对象和方法,使得程序员能够编写代码来创建、查询、更新和删除数据库中的记录。它与Jet数据库引擎一起,为开发者提供了一种简单的方式去操作数据库,而无需深入了解底层数据库的复杂...

    dao3.5数据库+引擎.zip

    DAO(Data Access Objects)是微软在早期开发的一种数据访问接口,主要用于访问Microsoft Jet数据库引擎,如Access数据库。DAO 3.5是DAO的一个版本,它在Windows操作系统中广泛使用,尤其是在16位和32位应用程序中。...

    J2EE之DAO设计模式

    暴露给客户端的DAO接口在低层数据源的实现发生改变时并不会随着改变,所以这种设计模式使得DAO可以适应不同的数据储存方式类型而不影响客户端和商业组件.最主要的, DAO还在组件和数据源之间扮演着协调者的角色. DAO...

    DAO设计模式 DAO 设计模式 JAVA设计模式

    4. **工厂类(可选)**:提供一个创建DAO实例的静态方法,便于管理和控制DAO对象的创建,也可以实现不同数据源的切换。 5. **事务管理**:在进行多条数据库操作时,通常需要进行事务管理。DAO层可以使用编程式事务...

    DAO3.6中文参考

    DAO(Data Access Objects)是微软在早期开发Access数据库应用程序时引入的一个对象模型,它提供了与数据库交互的方法和接口。DAO3.6是DAO的一个特定版本,主要用于与Access 97数据库进行通信。在这个版本中,DAO...

Global site tag (gtag.js) - Google Analytics