是否可以不创建没有任何自定义方法的Dao类?

BuguMongo是一个轻量级的MongoDB Java开发框架,集成了DAO、Query、Lucene、GridFS等功能。

使用BuguMongo进行开发,典型的做法是,定义一个Entity类的同时,相应的定义一个Dao类。以一个模拟的新闻发布系统为例:

定义实体类News.java:
package test.mongo.news;

import com.bugull.mongo.BuguEntity;
import com.bugull.mongo.annotations.Entity;
import com.bugull.mongo.annotations.Id;

/**
*
* @author Frank Wen(xbwen@hotmail.com)
*/
@Entity
public class News implements BuguEntity{
    @Id
    private String id;
    private String title;

    @Override
    public String getId() {
        return id;
    }

    @Override
    public void setId(String id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
    
}
 
定义Dao类NewsDao.java:
package test.mongo.news;

import com.bugull.mongo.BuguDao;

/**
*
* @author Frank Wen(xbwen@hotmail.com)
*/
public class NewsDao extends BuguDao{
    
    public NewsDao(){
        super(News.class);
    }
    
    public void doSomething(){
        //do something here
    }
    
}
 
然后调用该Dao的操作,例如在Struts的Action中:
package test.mongo.news;

/**
*
* @author Frank Wen(xbwen@hotmail.com)
*/
public class CreateNewsAction {
    
    private NewsDao newsDao;  //通过Spring注入该bean
    
    public String execute(){
        News news = new News();
        news.setTitle("新闻标题");
        newsDao.save(news);  //调用BuguDao中的save方法
        newsDao.doSomething();  //调用自定义的doSomething方法
        return "success";
    }

    public NewsDao getNewsDao() {
        return newsDao;
    }

    public void setNewsDao(NewsDao newsDao) {
        this.newsDao = newsDao;
    }
    
}
 
在有些情况下,自定义的Dao类,如NewsDao.java,只需要使用BuguDao中的方法就足够了,不需要另外自定义方法(如上面的doSomething),这时候,该Dao类会像下面这样,是一个“空”的Dao类:
public class NewsDao extends BuguDao{
    
    public NewsDao(){
        super(News.class);
    }
    
}
 
于是,就有朋友在群里问:创建这样的没有任何方法的Dao类,显得多余,能不能简单点,避免定义它呢?

回答是:可以。

可以使用BuguMongo框架中的DaoCache类来获得Dao实例。DaoCache使用了单例模式,它就像一个存放Dao实例的容器一样。代码示例如下:
package test.mongo.news;

import com.bugull.mongo.BuguDao;
import com.bugull.mongo.cache.DaoCache;

/**
*
* @author Frank Wen(xbwen@hotmail.com)
*/
public class CreateNewsAction {
    
    public String execute(){
        News news = new News();
        news.setTitle("新闻标题");
        
        BuguDao dao = DaoCache.getInstance().get(News.class);
        dao.save(news);
        
        return "success";
    }
    
}
 
这样,不再需要定义NewsDao类,也不需要通过Spring注入该dao。

除了上面讲述的方法,甚至还可以new一个BuguDao,如下,但建议不要这么做。
BuguDao dao = new BuguDao(News.class);
dao.save(news);
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值