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);
分享到:
相关推荐
有些Javaweb框架,自己的dao需要直接继承BaseDao,在这个类中已经实现了各种dao的方法,而原始的MyEclipse 生成dao并不能满足这个需求,需要通过自定义模板
} 告诉对哪个类操作,如不需要自定义扩展方法就作有一个构造方法。 泛型Service:GenericService.java 与泛型dao没有区别 Service :PersonService.java 直接继承。 泛型serviceimpl与serviceimpl实现和dao层...
第四步:创建Dao接口的代理对象 第五步:执行dao中的方法 第六步:释放资源 注意事项: 不要忘记在映射配置中告知mybatis要封装到哪个实体类中 配置的方法:指定实体类的全限定类名 mybatis基于注解的...
} 告诉对哪个类操作,如不需要自定义扩展方法就作有一个构造方法。 泛型Service:GenericService.java 与泛型dao没有区别 Service :PersonService.java 直接继承。 泛型serviceimpl与serviceimpl实现和dao层...
自定义的代码生成工具,可以根据数据库表来自动生成实体类,dao层,用于Hibernate和SpringDataJPA,支持lombok注解@Data和普通方式。单独使用需要jdbc连接包和Hibernate-jpa包。 使用方法 public static void main...
001 如何创建消息框? 002 如何设置消息框标题? 003 如何使用资源串创建消息框? 004 如何使用资源串动态显示消息框内容? 005 如何使消息框显示问号图标? 006 如何使消息框显示“是/否”按钮? 007 如何使消息框显示...
第四步:创建Dao接口的代理对象 第五步:执行dao中的方法 第六步:释放资源 注意事项: 不要忘记在映射配置中告知mybatis要封装到哪个实体类中 配置的方法:指定实体类的全限定类名 mybatis基于注解的...
简单自定义myBatis: myBatis(使用代理Dao实现) 完成了两个事情:1,创建动态代理对象,通过SQLSession对象调用getMapper() 2,通过代理对象去调用对应的操作数据库的方法(如selectList方法等)
第四步:创建Dao接口的代理对象 第五步:执行dao中的方法 第六步:释放资源 注意事项: 不要忘记在映射配置中告知mybatis要封装到哪个实体类中 配置的方法:指定实体类的全限定类名 mybatis基于注解的...
答:final用于声明属性方法和类,分别表示:属性不可变,方法不可覆盖,类不可继承。 finally是异常处理语句的一部分,表示总是执行。 finalize是Object的一个方法,在垃圾收集器执行的时候会调用被回收对象的此...
底层的技术-----反射技术 String类的是一种特殊的引用类型,... Service Dao 实体(domain/javaBean/po/vo/pojo)—只用来存值,没有逻辑 设计一个工具,代替我们自己创建对象的过程 传递一个字符串帮我们创建一个对
3. 最后,在 DAO 组件中可以使用 HibernateCallback 实例执行自定义操作。 HibernateCallback 的使用可以提供以下几个优点: 1. 灵活的持久层访问:HibernateCallback 允许开发者在持久层访问时执行自定义操作,...
VSFlexGrid Pro是MSFlexGrid的升级,提供全部的特征,用于创建灵活、强壮的前端数据库应用程序。用许多新的方法显示、编辑、格式化...您还可以适用非绑定模式,或连接您的grid到一个变量数组,或创建一个自定义数据源。
VSFlexGrid Pro是MSFlexGrid的升级,提供全部的特征,用于创建灵活、强壮的前端数据库应用程序。用许多新的方法显示、编辑、格式化...您还可以适用非绑定模式,或连接您的grid到一个变量数组,或创建一个自定义数据源。
Spring Boot 提供了统一的异常处理机制,通过使用 @ControllerAdvice 和 @ExceptionHandler 注解,可以实现对控制器层、Service 层、Dao 层以及 Spring 系统内定义的部分异常的统一处理。 在 Spring Boot 中,可以...
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 ...
生成实体类(可以自定义:get/set,有参无参构造方法,自定义类型与属性,序列化等); 生成dao层接口(查询全部信息,通过ID查询信息,插入全部属性,插入不为空的属性,通过ID更新全部属性,通过ID更新不为空的属性,通过...
但是,当我选该项时,在状态栏上没有出现任何提示信息。为什么? 70 (91) 我怎样才能在应用程序的缺省系统菜单中加上一些东西? 70 (92) 我建立了一个对话框。但是当我显示该对话框时,第一个编辑框总是不能获得...
静态方法:静态方法不能用于依赖注入,因为静态方法不能访问非静态成员变量。 4. 在 Spring 中,applicationContext.xml 文件可以配置 Bean 的作用域,例如,prototype 作用域表示每次请求 Bean 时都会创建新的...