`
xbwen
  • 浏览: 19036 次
  • 性别: 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

    在自定义模板中,你可以添加类似`${base_dao}`的变量,表示BaseDao类。 4. **保存并应用**:完成模板编辑后,记得保存并应用更改。这样,当你下次在MyEclipse中新建DAO类时,自定义模板就会生效,生成符合你需求的...

    自定义Dao,反射实现

    自定义Dao时,我们通常会为每个数据表创建一个对应的DAO类,这个类包含了增删查改(CRUD)操作的方法。这些方法可能包括`insert()`, `delete()`, `update()` 和 `query()` 等。例如,对于一个名为`User`的实体类,...

    泛型dao 泛型dao 泛型dao

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

    整合maven+mybatis+generator生成java自定义model实体类,dao接口和mapper映射文件

    5. 中文注解的使用:在自定义插件中,可以使用Java的`@Retention(RetentionPolicy.RUNTIME)`和`@Target(ElementType.FIELD)`等元注解来创建自定义注解,然后在生成的实体类字段上应用这些注解,以实现特定的业务需求...

    创建和修改自定义的数据库(5KB)...

    在VB中,可以使用DAO(Data Access Objects)或ADO(ActiveX Data Objects)来创建数据库对象并操作它们。例如,使用DAO的`Database.CreateTableDef`方法或ADO的`Connection.Execute`语句创建表。 3. 修改数据库: ...

    自己用的DAO实现类

    - **贫血模型与富模型**:DAO实现类可以基于贫血模型(只包含属性,没有业务逻辑)或富模型(不仅有属性,还包含业务逻辑)来设计。贫血模型更符合面向对象的原则,但可能导致业务逻辑过于分散;富模型则可能导致...

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

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

    vc生成hibernate的dao类

    在描述中提到的“根据自定义的模板生成java代码”,意味着开发者可能使用了某种代码生成工具,如JCodeGenerator、MyEclipse等,这些工具支持自定义模板,可以根据模板配置来自动生成符合项目需求的DAO类。...

    C#特性标签实现通用Dao层

    在我们的案例中,我们可以定义一个自定义特性来标注那些需要进行数据库操作的实体类和方法。 例如,可以创建一个名为`[DatabaseEntity]`的特性来标记数据库实体类: ```csharp [AttributeUsage(AttributeTargets....

    创建和修改自定义的数据库(20KB)

    首先,让我们理解“创建自定义数据库”的概念。自定义数据库意味着根据特定需求设计和构建数据库,这通常涉及到选择合适的数据库管理系统(DBMS),定义数据结构(如表、字段和关系),并可能编写SQL语句或使用图形...

    IBATISDAO库类操作

    `IBATISDAO`库类是基于IBATIS框架设计的一组用于简化数据库操作的类,它封装了与数据库交互的基本方法,让开发者能够更加高效地进行CRUD(创建、读取、更新、删除)操作。 **1. IBATIS框架基础** IBATIS的核心概念...

    mybatis 自动生成实体类dao

    配置文件中可以设置生成的实体类是否包含序列化方法、是否生成BLOB列的方法等选项。 四、运行MBG 完成配置文件后,可以通过Maven插件或命令行来运行MBG。在Maven项目中,可以在pom.xml文件中添加MBG的依赖和执行...

    在VC++中建立自定义数据库类

    创建自定义数据库类通常包括以下步骤: 1. **定义类**: - 首先,在Visual Studio的工作空间中,通过ClassWizard创建一个无基类的C++类,比如命名为CdataBaseOperate。 - 在类类型(Classtype)中选择Generic...

    基于Annotation并对DAO层封装具有分页功能的S2SH整合实例

    在DAO层的封装中,我们需要创建一个通用的DAO接口,如`BaseDAO<T>`,然后为每种实体类创建具体的DAO实现。使用Spring的`@Repository` Annotation标记DAO实现,使其能够被Spring管理。在这个接口中,我们可以定义一个...

    DAO

    BaseDao可能是所有特定DAO类的父类,子类可以继承它并覆盖或添加自己的方法以满足特定的业务需求。 2. **DaoException.java** - 这个文件可能定义了一个自定义的异常类,用于捕获和处理DAO操作过程中可能出现的错误...

    根据表结构自动生成bean类和mybatis dao类

    在软件开发过程中,尤其是涉及到与数据库交互的Java项目,手动编写Bean类和MyBatis的DAO(Data Access Object)类是一项繁琐的任务。标题所提到的"根据表结构自动生成bean类和mybatis dao类"是一种自动化工具或技术...

    Hibernate封装dao层

    例如,`BaseDao<T>`,其中T代表实体类类型,这样就可以在不改变基本结构的情况下,为不同的实体类创建DAO。 6. **查询方法**: - 使用HQL(Hibernate Query Language)或Criteria API编写查询,可以方便地执行复杂...

    DAO模式实现增加删除修改操作

    我们可以创建一个`UserDAO`接口,包含`addUser(User user)`, `deleteUserById(int id)`, `updateUser(User user)`, `getUserById(int id)`方法。在`UserDAOImpl`实现类中,对应地编写JDBC代码来实现这些方法。 通过...

    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层...

Global site tag (gtag.js) - Google Analytics