博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring data mongodb基础篇
阅读量:5740 次
发布时间:2019-06-18

本文共 7409 字,大约阅读时间需要 24 分钟。

hot3.png

学习阶段可以安装一个windows版本的mongodb,尽快把mongodb服务跑起来,让程序连上。mongodb的安装、运行、基础命令的知识,可以参考

spring mongodb 依赖版本:spring版本是4.0.9.RELEASE

org.springframework.data
spring-data-mongodb
1.7.2.RELEASE

spring mongodb的配置

领域对象:model实体

package com.wss.lsl.pay.demo.model;import java.io.Serializable;import org.springframework.data.annotation.Id;import org.springframework.data.annotation.Transient;import org.springframework.data.mongodb.core.index.CompoundIndex;import org.springframework.data.mongodb.core.index.CompoundIndexes;import org.springframework.data.mongodb.core.index.Indexed;import org.springframework.data.mongodb.core.mapping.DBRef;import org.springframework.data.mongodb.core.mapping.Document;import org.springframework.data.mongodb.core.mapping.Field;import com.mysema.query.annotations.QueryEntity;import com.wss.lsl.pay.demo.common.annotation.CascadeSave;// 复合索引@CompoundIndexes({ @CompoundIndex(name = "name_1_age_1", def = "{'name': 1, 'age': 1}") })@Document(collection = "user")public class User implements Serializable {	/**	 * 	 */	private static final long serialVersionUID = 1L;	@Id	private String id;	private String name;	@Field("age") // 保存在数据库的别名	private int age;	@Indexed // 单字段索引	private Integer yearOfBirth;	@Transient // 不持久化在数据库	private String password;		// getter/setter}

dao写法

package com.wss.lsl.pay.demo.dao;import java.util.List;import org.springframework.data.mongodb.repository.MongoRepository;import org.springframework.data.mongodb.repository.Query;import org.springframework.data.querydsl.QueryDslPredicateExecutor;import com.wss.lsl.pay.demo.model.User;public interface UserRepository extends MongoRepository
, QueryDslPredicateExecutor
{ // 根据名字查询用户列表 List
findByName(String name); // 查询名字以什么开头的用户列表 List
findByNameStartingWith(String regexp); //查询名字以什么结尾的用户列表 List
findByNameEndingWith(String regexp); // 查询年龄区间的用户列表 // ageLt < age < ageGt List
findByAgeBetween(int ageLt, int ageGt); // 查询名字包含。全模糊查询 List
findByNameLike(String name); // 多条件组合查询 // 查询名字包含
// 结果集按age升序排 List
findByNameLikeOrderByAgeAsc(String name); // 注解方式查询。按名字查询用户 // ?0表示第一个参数 @Query("{'name': ?0}") List
findUsersByName(String name); // 根据用户名字的正则表达式查询$regex @Query("{'name':{$regex: ?0}}") List
findUsersByRegexpName(String regexp); // 根据年龄区间查询 @Query("{'age':{$gt:?0, $lt: ?1}}") List
findUsersByAgeBetween(int ageGT, int ageLT); }

单元测试

package com.wss.lsl.pay.demo.dao;import java.util.List;import org.junit.After;import org.junit.Assert;import org.junit.Before;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.domain.Page;import org.springframework.data.domain.PageRequest;import org.springframework.data.domain.Pageable;import org.springframework.data.domain.Sort.Direction;import org.springframework.data.mongodb.core.MongoTemplate;import org.springframework.data.mongodb.core.index.Index;import org.springframework.data.mongodb.core.query.Criteria;import org.springframework.data.mongodb.core.query.Query;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import com.mysema.query.types.Predicate;import com.wss.lsl.pay.demo.model.Card;import com.wss.lsl.pay.demo.model.QUser;import com.wss.lsl.pay.demo.model.User;@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations={"classpath:/META-INF/spring/applicationContext.xml"})public class UserRepositoryTest {	@Autowired	private UserRepository userRepository;	@Autowired	private MongoTemplate mongoTemplate;	@Before	public void setUp() {		userRepository.deleteAll(); // 清空数据,为测试用例准备前提条件	}	@After	public void after() {	}	private void saveUser(String name, int age) {		User user = new User(name, age);		userRepository.insert(user);	}	private User getLongNameUser() {		return new User("张三32323rtyuioghjklsadas范德", 20);	}	// 测试插入	@Test	public void testInsert() throws InterruptedException {		int count = 100;		for (int i = 0; i < count; i++) {			User user = getLongNameUser();			userRepository.insert(user);		}		// 校验插入的数据数量		long totalCount = userRepository.count();		Assert.assertEquals(count, totalCount);	}	// 测试查询	@Test	public void testQuery() {		User user = new User("张三", 20);		userRepository.insert(user);		user = new User("李四", 20);		userRepository.insert(user);		// page 从0开始		Pageable page = new PageRequest(0, 2, Direction.ASC, "name");		Page
list = userRepository.findAll(page); List
users = list.getContent(); User zhangsan = users.get(0); User lisi = users.get(1); Assert.assertEquals("张三", zhangsan.getName()); Assert.assertEquals("李四", lisi.getName()); // 按名字查询 Query query = new Query(); query.addCriteria(Criteria.where("name").is("张三")); users = mongoTemplate.find(query, User.class); Assert.assertEquals(1, users.size()); query = new Query(); query.addCriteria(Criteria.where("name").is("李四")); users = mongoTemplate.find(query, User.class); Assert.assertEquals(1, users.size()); } // 测试更新 @Test public void testUpdate() { long count = userRepository.count(); Assert.assertEquals(0, count); User user = new User("张三", 20); userRepository.save(user); // 没有先插入 // 校验 count = userRepository.count(); Assert.assertEquals(1, count); user = userRepository.findOne(user.getId()); Assert.assertEquals("张三", user.getName()); // 更新操作 user.setName("张三2"); userRepository.save(user); // 校验 count = userRepository.count(); Assert.assertEquals(1, count); user = userRepository.findOne(user.getId()); Assert.assertEquals("张三2", user.getName()); } // 测试删除操作 @Test public void testDelete() { User user = new User("张三", 20); userRepository.insert(user); user = new User("李四", 30); userRepository.insert(user); // 删除了“李四” mongoTemplate.remove(user, "user"); // 校验只有“张三” List
users = mongoTemplate.findAll(User.class); Assert.assertEquals(1, users.size()); Assert.assertEquals("张三", users.get(0).getName()); } // 测试between查询 @Test public void testBetween() { saveUser("张三", 20); saveUser("李四", 25); saveUser("王五", 31); List
users = userRepository.findByAgeBetween(20, 30); Assert.assertEquals(1, users.size()); Assert.assertEquals("李四", users.get(0).getName()); } // 测试like @Test public void testLike() { saveUser("三张", 20); saveUser("李五四三", 30); saveUser("王三五", 31); List
users = userRepository.findByNameLike("三"); Assert.assertEquals(3, users.size()); for (User user : users) { Assert.assertTrue(user.getName().contains("三")); } } // 测试排序:按年龄排序 @Test public void testSort() { saveUser("三张", 20); saveUser("王三五", 31); saveUser("李五四三", 30); saveUser("李五四三", 10); saveUser("李五四三", 30); List
users = userRepository.findByNameLikeOrderByAgeAsc("三"); Assert.assertEquals(5, users.size()); Assert.assertEquals(10, users.get(0).getAge()); Assert.assertEquals(20, users.get(1).getAge()); Assert.assertEquals(30, users.get(2).getAge()); Assert.assertEquals(30, users.get(3).getAge()); Assert.assertEquals(31, users.get(4).getAge()); } }

 

转载于:https://my.oschina.net/u/2007041/blog/674948

你可能感兴趣的文章
时间助理 时之助
查看>>
英国征召前黑客组建“网络兵团”
查看>>
Silverlight 2.5D RPG游戏“.NET技术”技巧与特效处理:(十二)魔法系统
查看>>
PHP 命令行模式实战之cli+mysql 模拟队列批量发送邮件(在Linux环境下PHP 异步执行脚本发送事件通知消息实际案例)...
查看>>
pyjamas build AJAX apps in Python (like Google did for Java)
查看>>
Java not support java EE1.3
查看>>
LAMP环境搭建1-mysql5.5
查看>>
spring boot view override
查看>>
我的友情链接
查看>>
centos5.9使用RPM包搭建lamp平台
查看>>
关于C#面向对象2
查看>>
Javascript String类的属性及方法
查看>>
[LeetCode] Merge Intervals
查看>>
SharePoint 读取 Site Columns 的数据并绑定到DropdownList
查看>>
使用 axios 详解
查看>>
第 68 章 Logical Volume Manager (LVM)
查看>>
IPA提交APPStore问题记录(一)
查看>>
有利于seo优化的网站地图不能取巧
查看>>
快照产品体验优化
查看>>
ASCII
查看>>