`
xbwen
  • 浏览: 18791 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

是否可以不创建没有任何自定义方法的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);
  
分享到:
评论

相关推荐

    MyEclipse自定义模板生成dao

    有些Javaweb框架,自己的dao需要直接继承BaseDao,在这个类中已经实现了各种dao的方法,而原始的MyEclipse 生成dao并不能满足这个需求,需要通过自定义模板

    泛型dao 泛型dao 泛型dao

    } 告诉对哪个类操作,如不需要自定义扩展方法就作有一个构造方法。 泛型Service:GenericService.java 与泛型dao没有区别 Service :PersonService.java 直接继承。 泛型serviceimpl与serviceimpl实现和dao层...

    day01_eesy_03mybatis_dao.zip

    第四步:创建Dao接口的代理对象 第五步:执行dao中的方法 第六步:释放资源 注意事项: 不要忘记在映射配置中告知mybatis要封装到哪个实体类中 配置的方法:指定实体类的全限定类名 mybatis基于注解的...

    虚拟数据层 Struts2、Hibernate、Spring整合的泛型DAO Version 2010.9.27

    } 告诉对哪个类操作,如不需要自定义扩展方法就作有一个构造方法。 泛型Service:GenericService.java 与泛型dao没有区别 Service :PersonService.java 直接继承。 泛型serviceimpl与serviceimpl实现和dao层...

    自定义实体类生成工具

    自定义的代码生成工具,可以根据数据库表来自动生成实体类,dao层,用于Hibernate和SpringDataJPA,支持lombok注解@Data和普通方式。单独使用需要jdbc连接包和Hibernate-jpa包。 使用方法 public static void main...

    Visual C++编程技巧精选500例.pdf

    001 如何创建消息框? 002 如何设置消息框标题? 003 如何使用资源串创建消息框? 004 如何使用资源串动态显示消息框内容? 005 如何使消息框显示问号图标? 006 如何使消息框显示“是/否”按钮? 007 如何使消息框显示...

    day01_eesy_01mybatis.zip

    第四步:创建Dao接口的代理对象 第五步:执行dao中的方法 第六步:释放资源 注意事项: 不要忘记在映射配置中告知mybatis要封装到哪个实体类中 配置的方法:指定实体类的全限定类名 mybatis基于注解的...

    简单的自定义mybatis

    简单自定义myBatis: myBatis(使用代理Dao实现) 完成了两个事情:1,创建动态代理对象,通过SQLSession对象调用getMapper() 2,通过代理对象去调用对应的操作数据库的方法(如selectList方法等)

    day01_eesy_02mybatis_annotation.zip

    第四步:创建Dao接口的代理对象 第五步:执行dao中的方法 第六步:释放资源 注意事项: 不要忘记在映射配置中告知mybatis要封装到哪个实体类中 配置的方法:指定实体类的全限定类名 mybatis基于注解的...

    java面试题

    答:final用于声明属性方法和类,分别表示:属性不可变,方法不可覆盖,类不可继承。 finally是异常处理语句的一部分,表示总是执行。 finalize是Object的一个方法,在垃圾收集器执行的时候会调用被回收对象的此...

    底层的技术-----反射技术

    底层的技术-----反射技术 String类的是一种特殊的引用类型,... Service Dao 实体(domain/javaBean/po/vo/pojo)—只用来存值,没有逻辑 设计一个工具,代替我们自己创建对象的过程 传递一个字符串帮我们创建一个对

    HibernateCallback使用方法

    3. 最后,在 DAO 组件中可以使用 HibernateCallback 实例执行自定义操作。 HibernateCallback 的使用可以提供以下几个优点: 1. 灵活的持久层访问:HibernateCallback 允许开发者在持久层访问时执行自定义操作,...

    VSFlexGrid 8.0正式版

    VSFlexGrid Pro是MSFlexGrid的升级,提供全部的特征,用于创建灵活、强壮的前端数据库应用程序。用许多新的方法显示、编辑、格式化...您还可以适用非绑定模式,或连接您的grid到一个变量数组,或创建一个自定义数据源。

    asp表格控件,可使用于VB.VC

    VSFlexGrid Pro是MSFlexGrid的升级,提供全部的特征,用于创建灵活、强壮的前端数据库应用程序。用许多新的方法显示、编辑、格式化...您还可以适用非绑定模式,或连接您的grid到一个变量数组,或创建一个自定义数据源。

    Java异常介绍及Spring Boot统一异常处理

    Spring Boot 提供了统一的异常处理机制,通过使用 @ControllerAdvice 和 @ExceptionHandler 注解,可以实现对控制器层、Service 层、Dao 层以及 Spring 系统内定义的部分异常的统一处理。 在 Spring Boot 中,可以...

    JAVA程序开发大全---上半部分

    13.4.2 反向工程生成JPA 实体类和Spring DAO类 242 13.4.3 创建测试类 243 13.5 本章小结 243 第14章 Web Service的开发及应用 244 14.1 Web Service概述 244 14.2 使用MyEclipse创建Web Service项目 245 14.2.1 ...

    CMEU代码生成器

    生成实体类(可以自定义:get/set,有参无参构造方法,自定义类型与属性,序列化等); 生成dao层接口(查询全部信息,通过ID查询信息,插入全部属性,插入不为空的属性,通过ID更新全部属性,通过ID更新不为空的属性,通过...

    VC++ 专家指导.doc

    但是,当我选该项时,在状态栏上没有出现任何提示信息。为什么? 70 (91) 我怎样才能在应用程序的缺省系统菜单中加上一些东西? 70 (92) 我建立了一个对话框。但是当我显示该对话框时,第一个编辑框总是不能获得...

    Spring选择题(含答案).doc

    静态方法:静态方法不能用于依赖注入,因为静态方法不能访问非静态成员变量。 4. 在 Spring 中,applicationContext.xml 文件可以配置 Bean 的作用域,例如,prototype 作用域表示每次请求 Bean 时都会创建新的...

Global site tag (gtag.js) - Google Analytics