首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

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

2012-06-27 
是否可以不创建没有任何自定义方法的Dao类?BuguMongo是一个轻量级的MongoDB Java开发框架,集成了DAO、Query

是否可以不创建没有任何自定义方法的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)*/@Entitypublic 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);
??

热点排行