spring-data-mongodb的MongoTemplate 使用小例子

1、首先使用Eclipse的git插件把spring提供的示例下载下来

 

https://github.com/SpringSource/spring-data-document-examples.git

 

下载之后导入maven工程



 

 

2、首先看我们的domain定义,也就是entity。

org.springframework.data.mongodb.examples.hello.domain.Person

 

 

package org.springframework.data.mongodb.examples.hello.domain;

import java.util.ArrayList;
import java.util.List;

import org.springframework.data.annotation.Id;
import org.springframework.data.document.mongodb.mapping.Document;

@Document
public class Person {

	@Id
	private String id;

	
	private String name;

	private int age;

	private List<Account> accounts = new ArrayList<Account>();

	public Person() {
	}

	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}

	public String getId() {
		return id;
	}

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

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public List<Account> getAccounts() {
		return accounts;
	}

	public void addAccount(Account account) {
		this.accounts.add(account);
	}

	public void setAccounts(List<Account> accounts) {
		this.accounts = accounts;
	}

 
	public String toString() {
		return "Person [id=" + id + ", name=" + name + ", age=" + age
				+ ", accounts=" + accounts + "]";
	}

}
 

dao层的类org.springframework.data.mongodb.examples.hello.HelloMongo

 

 

package org.springframework.data.mongodb.examples.hello;

import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Random;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.data.mongodb.examples.hello.domain.Account;
import org.springframework.data.mongodb.examples.hello.domain.Person;
import org.springframework.stereotype.Repository;

import com.mongodb.BasicDBObject;
import com.mongodb.BasicDBObjectBuilder;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.gridfs.GridFS;
import com.mongodb.gridfs.GridFSDBFile;
import com.mongodb.gridfs.GridFSInputFile;
/**
 * 
 *  @author xiaofancn
 *
 *	参考  http://static.springsource.org/spring-data/data-document/docs/1.0.0.M2/reference/html/
 *	参考  http://nosql.mypopescu.com/post/816470307/tutorial-mongodb-in-java
 *
 */
@Repository
public class HelloMongo {

	@Autowired
	MongoOperations mongoOperations;



	public void gridFSInput(String inputFilepath) {
		DB db = mongoOperations.getCollection(
				mongoOperations.getCollectionName(Person.class)).getDB();
		db.requestStart();
		File inputFile = new File(inputFilepath);
		GridFSInputFile gfsInput;
		try {
			gfsInput = new GridFS(db, "fs")
					.createFile(inputFile);
			gfsInput.setFilename("qq123456789logo");// 保存到数据库的文件名为qq123456789logo
			gfsInput.save();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		db.requestDone();

	}

	public void gridFSOutput(String outputFilepath) {
		DB db = mongoOperations.getCollection(
				mongoOperations.getCollectionName(Person.class)).getDB();
		
		GridFSDBFile gfsFile = new GridFS(db, "fs").findOne("qq123456789logo");// 查找文件名qq123456789logo输出保存
		try {
			gfsFile.writeTo(outputFilepath);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void insert(int count) {

		if (mongoOperations.collectionExists(Person.class)) {
			mongoOperations.dropCollection(Person.class);
		}

		mongoOperations.createCollection(Person.class);

		for (int i = 0; i < count; i++) {
			Person p = new Person("小樊", i);
			Account a = new Account("1234-59873-893-1", Account.Type.SAVINGS,
					123.45D);
			p.addAccount(a);
			mongoOperations.insert(p);
		}

	}

	public void delete(int age) {
		// 删除查询到的年龄
		mongoOperations.remove(new Query(new Criteria("age").is(age)),
				Person.class);

	}

	public void alert(int age) {
		// 根据age查询,更新查询到的age字段为随机数
		mongoOperations.updateMulti(new Query(new Criteria("age").is(age)),
				new Update().inc("age", new Random().nextInt()), Person.class);
	}

	public void alert(String name) {
		// 根据name查询,更新查询到的name字段为xiaofancn
		mongoOperations.updateMulti(new Query(new Criteria("name").in(name)),
				new Update().set("name", "xiaofancn"), Person.class);

	}

	public void query(int age) {
		// 根据age查询
		List<Person> persons = mongoOperations.find(new Query(new Criteria(
				"age").is(age)), Person.class);
		for (Person p : persons) {
			System.out.println(p.toString());
		}

		// ===========================jdbc原生的类
		DBCollection personColl = mongoOperations.getCollection(mongoOperations
				.getCollectionName(Person.class));
		BasicDBObject parameter = new BasicDBObject();
		parameter.put("age", age);
		DBCursor item = personColl.find(parameter);
		while (item.hasNext()) {
			System.out.println(item.next());
		}

	}

	/**
	 * 统计这个年龄的人数
	 * @param age
	 * @return
	 */
	public Long count(int age) {
		DBCollection personColl = mongoOperations.getCollection(mongoOperations
				.getCollectionName(Person.class));
		BasicDBObject parameter = new BasicDBObject();
		parameter.put("age", age);
		return personColl.count(parameter);

	}

	public void showAllOrederByAge(int startPage, DBObject sort,
			int countPerPage) {
		if (sort == null) {// 默认按照年龄的升序
			sort = BasicDBObjectBuilder.start().add("age", 1).get();
		}

		DBCollection personColl = mongoOperations.getCollection(mongoOperations
				.getCollectionName(Person.class));
		DBCursor item = personColl.find().sort(sort)
				.skip((startPage-1) * countPerPage).limit(countPerPage);

		while (item.hasNext()) {
			// Person p = item.next();错误
			DBObject parameter = item.next();
			System.out.println(parameter);
		}
	}

	public void showAll() {
		List<Person> list = mongoOperations.findAll(Person.class);
		for (Person p : list) {
			System.out.println(p);
		}
		// =================大批量的查询尽量使用原生的函数,也要对应原生的文档结构。
		DBObject sort = BasicDBObjectBuilder.start().add("age", -1).get();

		DBCollection personColl = mongoOperations.getCollection(mongoOperations
				.getCollectionName(Person.class));
		DBCursor item = personColl.find();// 查询前100条记录

		while (item.hasNext()) {
			// Person p = item.next();错误
			DBObject parameter = item.next();
			System.out.println(parameter);
		}
	}
}

 

// 参考 http://www.mongodb.org/display/DOCS/Updating#Updating-ModifierOperations
		// 对数组对象有效,数组对象后添加数据
		mongoOperations.updateMulti(new Query(new Criteria("age").is(0)),
		new Update().push("name", "小樊"), Person.class);
		//找到数据,加法属性 age = age +-10
		 mongoOperations
		 .updateMulti(new Query(new Criteria("age").is(0)), new Update().inc("age", -10), Person.class);
		//unset 重置属性值,数字为0,字符其他为null
		mongoOperations.updateMulti(new Query(new Criteria("age").is(0)),
		new Update().set("name", "小樊").set("age", -1), Person.class);
 

 

客户端org.springframework.data.mongodb.examples.hello.App

 

package org.springframework.data.mongodb.examples.hello;

import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Hello Mongo!
 */
public class App {
	public static void main(String[] args) {
		System.out.println("Bootstrapping HelloMongo");

		ConfigurableApplicationContext context = null;
		// use @Configuration using Java:
		context = new ClassPathXmlApplicationContext(
				"META-INF/spring/bootstrap.xml");

		// use XML application context:
		// context = new
		// ClassPathXmlApplicationContext("META-INF/spring/applicationContext.xml");

		HelloMongo hello = context.getBean(HelloMongo.class);
		
		hello.delete(39);
		hello.query(39);
		 
		//hello.showAll();
		System.out.println("DONE!");
	}
}

 

参考

http://static.springsource.org/spring-data/data-document/docs/1.0.0.M2/reference/html/

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Struts2、Hibernate、Spring整合的泛型DAO (本人评价: 代码开发效率提高30% 代码出错率减少70%) 对于大多数开发人员,系统中的每个 DAO 编写几乎相同的代码到目前为止已经成为一种习惯。虽然所有人都将这种重复标识为 “代码味道”,但我们大多数都已经学会忍受它。能不能不写重复的dao 呢 ? 泛型dao,顾名思义就是一个dao可以对多个实体对象进行持久化。当应用中需要使用到上十张表时,DAO的维护变得日益困难,主要表现在这几个方面: 1)dao类的繁多,很多设计都是一个entity对应一个dao (不同的只有类名和方法名) 2)dao接口需要维护的method庞大。 3)业务逻辑改变时,dao需要同时修改两个类文件(接口和实现类) 在本文中,我将为您展示如何避免再三地重复 DAO 代码。 在这里我建议项目最好使用一个共通的DAO,因为这样会为你省去非常多的类,而那些类里的逻辑往往差不多。当然是用共通的DAO你需要对结果转型,转成你需要的bean,但这也比写那么多DAO强多了,你可以放下包袱,只关注你的业务逻辑。 如果你真能只用一个dao解决,那么祝贺你,你得到了一个虚拟数据层(高度抽象的数据接口)。这是一个比dao更高级的存在。 欢迎大家指正 -_- 虚心求教 代码层次: bean-->dao-->service-->action 技术概述:1.继承 继承是利用现有的类创建新类的过程,现有的类称作基类(或父类),创建的新类称作派生类(子类)。继承其实就是自动地共享基类中成员属性和成员方法的机制。引入继承,实现了代码重用; 2.泛型 泛型类型的限定 3.反射 代码概述: bean :Person.java 这个人员类我就不说了 泛型dao接口 :GenericDao 泛型作为DAO的通用接口 CRUD方法 dao接口 : PersonDAO extends GenericDao 可以不写代码,方法已经在父类泛型dao里了,这里为了说明:可扩展添加 findByNameExact()方法 子类的附加方法。 泛型daoimpl :GenericDaoImpl implements GenericDao 必须提供的构造方法,以便创建实例的时候就知道具体实体的类型。 daoimpl :PersonDAOImpl extends GenericDaoImpl implements PersonDAO public PersonDAOImpl() { super(Person.class); } 告诉对哪个类操作,如不需要自定义扩展方法就作有一个构造方法。 泛型Service:GenericService.java 与泛型dao没有区别 Service :PersonService.java 直接继承。 泛型serviceimpl与serviceimpl实现和dao层实现一样。 Action : SavePersonAction直接调用PersonService。 下面是代码 为了演示减少代码量而且直观去掉些方法方便读者自己扩展写出适合自己的代码,这里我只抛砖引玉了。主要介绍这个技术。 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zylyueliang/archive/2010/09/17/5890043.aspx
是的,如果你使用 Spring Boot Starter Data MongoDB,那么在使用 MongoTemplate 之前,需要配置 MongoTemplate。在 Spring Boot 中,可以通过在配置类上添加注解 `@EnableMongoRepositories` 来启用 MongoDB 集成。 以下是一个简单的配置类示例,它定义了一个名为 mongoTemplateMongoTemplate bean: ``` @Configuration @EnableMongoRepositories(basePackages = "com.example.mongo.repositories") public class MongoConfig extends AbstractMongoClientConfiguration { @Value("${spring.data.mongodb.uri}") private String connectionString; @Value("${spring.data.mongodb.database}") private String dbName; @Override public MongoClient mongoClient() { ConnectionString connString = new ConnectionString(connectionString); MongoClientSettings settings = MongoClientSettings.builder() .applyConnectionString(connString) .build(); return MongoClients.create(settings); } @Override protected String getDatabaseName() { return dbName; } @Bean public MongoTemplate mongoTemplate() throws Exception { return new MongoTemplate(mongoClient(), getDatabaseName()); } } ``` 在这个例子中,我们使用 `@EnableMongoRepositories` 注解来启用 MongoDB 集成,并指定了存储库接口的基本包名称。在 `mongoClient()` 方法中,我们创建了一个 MongoDB 客户端并返回它。在 `mongoTemplate()` 方法中,我们创建了一个名为 mongoTemplateMongoTemplate bean。这个 bean 可以直接在你的代码中注入并使用。 注意,这里我们继承了 `AbstractMongoClientConfiguration` 类,这是因为它提供了一些默认的配置,例如自动配置了 MongoClient 和 MongoDatabaseFactory。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值