`

spring mongoDB集成

阅读更多

原文链接:http://charls-007.blog.163.com/blog/static/3545620820113303923636/

Java端要向mongoDB插入java对象时,我用了到morphia开源组件。官网:code.google.com/p/morphia

  只写了DAO层的java代码,能够满足常用的增、删、改、查、分页等操作。

 

db.properties配置文件:

  db.host=localhost  //主机地址
  db.port=27017      //端口(默认)
  app.db.name=app    //数据库名

 

Spring配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:context="http://www.springframework.org/schema/context"
 xmlns:p="http://www.springframework.org/schema/p"
 xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-3.0.xsd">

 <context:property-placeholder location="classpath:db.properties" />

 <bean id="mongo" class="com.mongodb.Mongo">
  <constructor-arg value="${db.host}"></constructor-arg>
  <constructor-arg value="${db.port}"></constructor-arg>
 </bean>
 <bean id="morphia" class="com.google.code.morphia.Morphia"></bean>
 
 <bean id="baseDao" class="com.my.dao.BaseDao">
  <constructor-arg ref="mongo"></constructor-arg>
  <constructor-arg ref="morphia"></constructor-arg>
  <constructor-arg value="${app.db.name}"></constructor-arg>
 </bean>
</beans>

 

DAO代码:

package com.my.dao;

import java.util.List;
import java.util.regex.Pattern;

import org.bson.types.ObjectId;

import com.google.code.morphia.Datastore;
import com.google.code.morphia.Morphia;
import com.google.code.morphia.dao.BasicDAO;
import com.google.code.morphia.query.Query;
import com.mongodb.Mongo;
import com.my.entity.BaseEntity;
import com.my.page.Page;

public class BaseDao extends BasicDAO<BaseEntity, ObjectId> {
 private Datastore dt;

 protected BaseDao(Mongo mongo, Morphia morphia, String dbName) {
  super(mongo, morphia, dbName);
  dt = morphia.createDatastore(mongo, dbName);
 }

 
 public void save(Object entity) {
  dt.save(entity);
 }

 
 @SuppressWarnings("unchecked")
 public List findAll(Class clazz) {
  return dt.find(clazz).asList();
 }

 
 @SuppressWarnings( { "unchecked" })
 public List findByNameFuzzyQuery(Class clazz, String title, Object value) {
  Query query = dt.createQuery(clazz);
  // Pattern pattern = Pattern.compile("^.*" + key +
  // ".*$",Pattern.CASE_INSENSITIVE);
  Pattern pattern = Pattern.compile(value.toString(),
    Pattern.CASE_INSENSITIVE);
  query.filter(title, pattern);
  return query.asList();
 }

 
 @SuppressWarnings("unchecked")
 public List findByName(Class clazz, String title, Object value) {
  Query query = dt.createQuery(clazz);
  query.filter(title, value);
  return query.asList();
 }

 
 @SuppressWarnings("unchecked")
 public List findById(Class clazz, Object id) {
  Query query = dt.createQuery(clazz);
  query.filter("_id", id);
  return query.asList();
 }

 
 @SuppressWarnings("unchecked")
 protected Query createNameQuery(Class clazz,String title, Object value) {
  return (Query) dt.createQuery(clazz).field(title).equal(value);
 }

 
 @SuppressWarnings("unchecked")
 protected Query createQuery(Class clazz){
  return dt.createQuery(clazz);
 }
 
 public void update(Object object) {
  dt.save(object);
 }

 
 @SuppressWarnings("unchecked")
 public void deleteAll(Class clazz) {
  Query query = this.createQuery(clazz);
  dt.delete(query);
 }

 
 @SuppressWarnings("unchecked")
 public void deleteByName(Class clazz, String title, Object value) {
  Query query = this.createNameQuery(clazz,title, value);
  dt.delete(query);
 }
 
 @SuppressWarnings("unchecked")
 public Query pagingQuery(Class clazz,Page page){
  Query q = this.createQuery(clazz);
  if(page != null){
   q.limit(page.getPageSize()).offset((page.getCurrentPageNo() - 1) * page.getPageSize());
   page.setTotal((int)q.countAll());
  }
  return q;
 }
}

分页用到的Page类:

package com.my.page;

public class Page {
 private int currentPageNo; //当前页数
 private int total;         //总页数
 private int pageSize;      //每页显示条数

 
 // 得到总页数
 public int getTotalPages() {
  if (total == 0)
   return 1;
  return (total + pageSize - 1) / pageSize;
 }

 // 得到第一页页号
 public int getFirstPageNo() {
  return 1;
 }

 // 得到最后一页页号
 public int getLastPageNo() {
  return getTotalPages();
 }

 // 得到上一页页号
 public int getPrePageNo() {
  if (currentPageNo == 1) {
   return 1;
  }
  return currentPageNo - 1;
 }

 // 得到下一页页号
 public int getNextPageNo() {
  if (currentPageNo == getTotalPages()) {
   return currentPageNo;
  }
  return currentPageNo + 1;
 }
 
 public int getCurrentPageNo() {
  return currentPageNo;
 }

 public void setCurrentPageNo(int currentPageNo) {
  this.currentPageNo = currentPageNo;
 }

 public int getTotal() {
  return total;
 }

 public void setTotal(int total) {
  this.total = total;
 }

 public int getPageSize() {
  return pageSize;
 }

 public void setPageSize(int pageSize) {
  this.pageSize = pageSize;
 }

实体类(javaBean):

package com.my.entity;

import java.io.Serializable;
import java.util.Date;

import org.bson.types.ObjectId;

import com.google.code.morphia.annotations.Entity;
import com.google.code.morphia.annotations.Id;

@Entity
//默认是要持久所有对象
public class BaseEntity implements Serializable{
 private static final long serialVersionUID = 1L;
 @Id
 private ObjectId id;
  // @Transient 这个表示不持久
 private String title;  //标题
 private String place;  //地点
 private Date createTime; //创建时间

 public ObjectId getId() {
  return id;
 }

 public void setId(ObjectId id) {
  this.id = id;
 }

 public String getTitle() {
  return title;
 }

 public void setTitle(String title) {
  this.title = title;
 }

 public String getPlace() {
  return place;
 }

 public void setPlace(String place) {
  this.place = place;
 }

 public Date getCreateTime() {
  return createTime;
 }

 public void setCreateTime(Date createTime) {
  this.createTime = createTime;
 }

}

Test类:

import java.util.Date;
import java.util.List;

import org.bson.types.ObjectId;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.google.code.morphia.query.Query;
import com.my.dao.BaseDao;
import com.my.entity.BaseEntity;
import com.my.page.Page;

public class Test {

 public static void main(String[] args) {
  ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
  BaseDao baseDao = (BaseDao) context.getBean("baseDao");
  
  System.out.println("-------------------");
  
  //添加
//  BaseEntity be = new BaseEntity();
//  be.setTitle("aha");
//  be.setPlace("成都");
//  be.setCreateTime(new Date());
//  try{
//   baseDao.save(be);
//   System.out.println("成功!!!!!!!!!!!!");
//  }catch (Exception e) {
//   e.printStackTrace();
//   System.out.println("失败-------------");
//  }
  
  //查询全部
//  List<BaseEntity> list = baseDao.findAll(BaseEntity.class);
//  for(BaseEntity be : list){
//   System.out.println(be.getTitle()+"  "+be.getPlace()+"  "+be.getCreateTime()+"  "+be.getId());
//  }
//  System.out.println("*****************");
  //模糊查询和非模糊查询
//  List<BaseEntity> list = baseDao.findByNameFuzzyQuery(BaseEntity.class, "title","a");
//  List<BaseEntity> list = baseDao.findByName(BaseEntity.class,"title", "hao");
//  
//  System.out.println(list.size());
//  
//  for(BaseEntity be : list){
//   System.out.println(be.getTitle()+"  "+be.getPlace());
//  }
  
  //根据ID查询
//  List<BaseEntity> list = baseDao.findById(BaseEntity.class, ObjectId.massageToObjectId("4d99992acf8755ee859cbcdb"));
//  for(BaseEntity be : list){
//   System.out.println(be.getId()+"  "+be.getTitle());
//  }
  
  //根据自定义进行修改
//  try{
//   List<BaseEntity> l = baseDao.findByName(BaseEntity.class, "title", "hehehe");
//   if(l.size() == 0){
//    System.out.println("名称不存在..........");
//   }else{
//    for(BaseEntity be : l){
//     be.setTitle("abc");
//     be.setPlace("北京");
//     baseDao.update(be);
//    }
//    
//    System.out.println("成功!!!!!!!!!!!!!!");
//   }
//  }catch (Exception e) {
//   System.out.println(e);
//  }
  
  //分页查询
//  Page p = new Page();
//  p.setCurrentPageNo(1);
//  p.setPageSize(3);
//  
//  Query<BaseEntity> l = baseDao.pagingQuery(BaseEntity.class, p);
//  for(BaseEntity be : l){
//   System.out.println(be.getTitle()+"  "+be.getPlace()+"  "+p.getTotal());
//  }

 

spring集成mongoDB 是不是很简单啊.

==========================================================

以下为另处收集:

Mongo是没有like查询的方式的 
要进行模糊匹配只能借助于正则表达式 

Java代码  收藏代码
  1.              Mongo m=new Mongo();  
  2.              DB db=m.getDB("UserDB");  
  3. DBCollection  collection=db.getCollection("userCollection");  
  4. BasicDBObject cond=new BasicDBObject();  
  5.   
  6.           
  7. if(province!=""){  
  8.     cond.put("province", province);  
  9. }  
  10. if(area!=""){  
  11.     cond.put("area", area);  
  12. }              
  13. if(keywords!=""){  
  14.     Pattern pattern=Pattern.compile("^.*"+keywords+".*$");            
  15.     cond.put("name", pattern);  
  16. }  
  17.            
  18.                
  19. DBCursor returns=collection.find(cond);   


还有一种是mongoDB 和Spring结合的 Spring-data的模式查询  代码如下 



      
Java代码  收藏代码
  1.           
  2.            
  3. public List<User> findUserTop9(String s) {  
  4.   
  5.          mongoTemplate.setDatabaseName("UserDB");  
  6.          mongoTemplate.setDefaultCollectionName("userColl");  
  7.   
  8.          List<User> users = mongoTemplate.find(new Query(new Criteria(    
  9.               "name").regex(".*?"+"张"+".*")).limit(9), User.class);  
  10.       
  11.          return  users;  
  12.     }  
分享到:
评论

相关推荐

    spring mongodb 中文文档

    MongoDB 是一个高性能、开源、无模式的分布式文档数据库,而Spring Data MongoDB 是Spring 框架的一部分,它为MongoDB 提供了强大的支持,简化了与MongoDB 的集成和操作。这篇文档将深入探讨Spring Data MongoDB 的...

    spring mongodb很好的例子

    `HelloSpringWithMongoDB-master`这个文件名可能是一个示例项目的源码库,旨在帮助开发者了解如何将Spring Data MongoDB集成到Spring MVC项目中。在这个示例中,可能会包含以下关键组件: 1. **配置文件**:设置...

    Jqgrid_Spring_MongoDB:Jqgrid Spring MongoDB 集成示例代码

    Jqgrid_Spring_MongoDB Jqgrid Spring MongoDB 集成示例代码 在此示例代码中,我将 mongodb 与 spring mvc 和 jqgrid 集成在一起。所有树技术都具有出色的性能。

    Spring集成Mongodb配置含jar包

    下面将详细介绍Spring集成MongoDB的相关知识点。 1. **Spring Data MongoDB**: Spring Data项目提供了一套统一的API,使得操作各种持久化存储变得简单。Spring Data MongoDB是该项目的一个模块,它允许开发者通过...

    springMongodb参考文档中文版

    - **MongoDB JMX配置**:提供了MongoDB与JMX集成的相关配置信息。 #### 17. MongoDB 3.0支持 - **使用Spring Data MongoDB和MongoDB 3.0**:介绍了如何在MongoDB 3.0环境中使用Spring Data MongoDB。 ### 总结 ...

    Spring Data MongoDB中文文档

    - 这些特性极大地丰富了与 MongoDB 交互的方式,使得 **Spring Data MongoDB** 成为了与 MongoDB 集成的理想选择。 总之,**Spring Data MongoDB** 是一个强大的工具,它不仅简化了与 MongoDB 数据库的交互,还提供...

    spring mongodb用到的jar包spring-date-mongodb1.4.2.zip

    MongoDB集成** Spring Data MongoDB提供了与MongoDB Java驱动程序的集成,包括连接池管理、会话管理以及异常转换。它封装了MongoDB的复杂性,让开发者能够专注于业务逻辑,而不是底层数据库操作。 **4. 使用示例**...

    MongoDB复制集及与Spring集成操作

    本文将详细介绍如何在Linux环境下设置MongoDB复制集,同时涵盖用户认证的配置以及MongoDB与Spring框架的集成。 首先,让我们了解MongoDB复制集。复制集是MongoDB中的一组MongoDB实例,它们之间保持着数据同步。当主...

    Spring集成MongoDB官方指定jar包:spring-data-mongodb-1.4.1.RELEASE.jar

    Spring集成MongoDB官方指定jar包:spring-data-mongodb-1.4.1.RELEASE.jar

    Spring+MongoDB整合 项目

    1. **数据访问层**:Spring Data MongoDB模块提供了与MongoDB的集成,包括MongoTemplate和MongoRepository接口,使得操作MongoDB就像操作传统JDBC一样简单。例如,可以通过定义Repository接口并继承MongoRepository...

    spring-data集成mongodb大数据量分页+自增id实现+MongodbPlugin集成

    skip随着数据量上去,分页性能极具下降,不推荐。这里使用spring-data-mongo实现的分页,并且实现了mongodb自增id(监听器方式)、也集成了轻量级插件MongodbPlugin,有需要的可以下载看看哦~

    Spring-Data-MongoDB3.2

    这个版本可能包含了性能优化、新的特性和修复的bug,确保了与MongoDB 3.2的无缝集成。 **3. MongoDB 3.2特性** MongoDB 3.2引入了许多重要的改进,包括: - **新查询语言:** 引入了聚合框架的改进,如`$lookup`...

    spring4集成mongodb休闲项目

    在本项目"spring4集成mongodb休闲项目"中,我们探讨了如何将Spring 4框架与MongoDB 3.4.4数据库进行有效整合,以构建一个功能完善的后端系统。这个项目非常适合初学者和开发者们作为参考,了解并实践Spring与NoSQL...

    springdata mongodb api文档

    同时,Spring Framework提供了对SpringData MongoDB的支持,可以实现依赖注入和与Spring框架的无缝集成。 当需要扩展SpringData的功能时,SpringData MongoDB也提供了一定的扩展机制,例如使用Query DSL扩展进行...

    spring 整合mongodb

    首先,Spring Data MongoDB是Spring框架的一个模块,它提供了与MongoDB集成的简单API和ORM(对象关系映射)功能。Spring Data MongoDB允许开发者通过Java方法定义来执行MongoDB的查询,减少了对原生MongoDB查询语法...

    Spring Mongodb Maven示例

    Spring MongoDB Maven 示例是一个集成Spring框架、MongoDB数据库和Maven构建工具的项目,旨在提供一个基础的、易于理解的学习平台,帮助开发者快速上手MongoDB在Spring应用中的使用。在这个项目中,你将看到如何配置...

    Spring-Mongodb例子

    Spring MongoDB模块使得在Spring应用中集成MongoDB变得简单。 首先,我们来了解Spring框架的核心概念。Spring是一个依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)的...

    spring mvc 集成mongoDB项目 例子

    在本项目中,我们将探讨如何将Spring MVC框架与MongoDB数据库进行集成,创建一个实际的应用实例。MongoDB是一个流行的开源、非关系型数据库系统,以其灵活性、可扩展性和高性能著称。而Spring MVC是Java开发Web应用...

    spring mongodb

    Spring MongoDB 是一个强大的框架,它将流行的MongoDB数据库与Java应用程序开发中的Spring框架无缝集成。这个框架使得在Spring应用中操作非关系型数据库(NoSQL)变得更加便捷和高效。MongoDB是一个高性能、开源、无...

Global site tag (gtag.js) - Google Analytics