1.简介

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

2.运行环境

开发工具:intellij idea

JDK版本:1.8

项目管理工具:Maven 4.0.0

3.Maven Plugin管理

 <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.goku</groupId>
<artifactId>spring-boot-mongodb</artifactId>
<version>1.0-SNAPSHOT</version> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
</parent> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build> </project>

4.application.properties编写

 spring.data.mongodb.uri= mongodb://localhost:27017/goku_db1

5.DemoApplication启动类编写

 package com.goku.demo;

 import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan; /**
* Created by nbfujx on 2017/11/20.
*/
// Spring Boot 应用的标识
@SpringBootApplication
@ServletComponentScan
public class DemoApplication { public static void main(String[] args) {
// 程序启动入口
// 启动嵌入式的 Tomcat 并初始化 Spring 环境及其各 Spring 组件
SpringApplication.run(DemoApplication.class,args);
}
}

6.User编写

package com.goku.demo.model;

import org.springframework.data.annotation.Id;

import java.io.Serializable;

/**
* Created by nbfujx on 2017-12-07.
*/
public class User implements Serializable { private static final long serialVersionUID = -1L; @Id
private Long id;
private String username;
private Integer age; public User(Long id, String username, Integer age) {
this.id = id;
this.username = username;
this.age = age;
} public Long getId() {
return id;
} public void setId(Long id) {
this.id = id;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} @Override
public String toString()
{
return "\"User:{\"id\":\""+id+"\",\"username\":\""+username+"\",\"age\":\""+age+"\"}\"";
}
}

7.UserRepository编写

与HibernateRepository类似,通过继承MongoRepository接口,我们可以非常方便地实现对一个对象的增删改查,要使用Repository的功能,先继承MongoRepository<T, TD>接口,其中T为仓库保存的bean类,TD为该bean的唯一标识的类型,一般为ObjectId。之后在service中注入该接口就可以使用,无需实现里面的方法,spring会根据定义的规则自动生成。

但是MongoRepository实现了的只是最基本的增删改查的功能,要想增加额外的查询方法,可以按照以下规则定义接口的方法。自定义查询方法,格式为“findBy+字段名+方法后缀”,方法传进的参数即字段的值,此外还支持分页查询,通过传进一个Pageable对象,返回Page集合。

下面是支持的查询类型,每三条数据分别对应:(方法后缀,方法例子,mongodb原生查询语句)

 package com.goku.demo.repository;

 import com.goku.demo.model.User;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query; import java.util.List; /**
* Created by nbfujx on 2017-12-08.
*/
public interface UserRepository extends MongoRepository<User, Long> { /**
* Like(模糊查询)
* {"username" : name} ( name as regex)
* */
List<User> findByUsernameLike(String username); /**
* Like(模糊查询)
* {"username" : name}
* */
List<User> findByUsername(String username); /**
* GreaterThan(大于)
* {"age" : {"$gt" : age}}
* */
List<User> findByAgeGreaterThan(int age);
/**
* LessThan(小于)
* {"age" : {"$lt" : age}}
* */
List<User> findByAgeLessThan(int age);
/**
* Between(在...之间)
* {{"age" : {"$gt" : from, "$lt" : to}}
* */
List<User> findByAgeBetween(int from, int to); /**
* IsNotNull, NotNull(是否非空)
* {"username" : {"$ne" : null}}
* */
List<User> findByUsernameNotNull(); /**
* IsNull, Null(是否为空)
* {"username" : null}
* */
List<User> findByUsernameNull(); /**
* Not(不包含)
* {"username" : {"$ne" : name}}
* */
List<User> findByUsernameNot(String name); /**
* Near(查询地理位置相近的)
* {"location" : {"$near" : [x,y]}}
* */
// findByLocationNear(Point point) /**
* Within(在地理位置范围内的)
* {"location" : {"$within" : {"$center" : [ [x, y], distance]}}}
* */
//findByLocationWithin(Circle circle) /**
* Within(在地理位置范围内的)
* {"location" : {"$within" : {"$box" : [ [x1, y1], x2, y2]}}}
* */
// findByLocationWithin(Box box) }

尽管以上查询功能已经很丰富,但如果还不能满足使用情况的话可以用一下方法---基于mongodb原本查询语句的查询方式。

     @Query("{\"username\":{\"$regex\":?0}, \"age\": ?1}")
Page<User> findByNameAndAgeRange(String name,int age,Pageable page); @Query(value="{\"username\":{\"$regex\":?0},\"age\":{\"$gte\":?1,\"$lte\": ?2}}")
Page<User> findByNameAndAgeRange2(String name,int ageFrom,int ageTo,Pageable page); @Query(value="{\"username\":{\"$regex\":?0},\"age\":{\"$gte\":?1,\"$lte\": ?2}}",fields="{\"username\" : 1, \"age\" : 1}")
Page<User> findByNameAndAgeRange3(String name,int ageFrom,int ageTo,Pageable page);

8.UserRepositoryTest测试编写

 package test.com.goku.repository;

 import com.goku.demo.DemoApplication;
import com.goku.demo.model.User;
import com.goku.demo.repository.UserRepository;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import java.util.List; /**
* Created by nbfujx on 2017-12-08.
*/
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = DemoApplication.class)
public class UserRepositoryTest { private final Logger logger = LoggerFactory.getLogger(getClass()); @Autowired
private UserRepository userRepository; @Before
public void setUp() {
//userRepository.deleteAll();
} @Test
public void test() throws Exception { // 创建10个User,并验证User总数
userRepository.save(new User(1L, "didi", 30));
userRepository.save(new User(2L, "mama", 40));
userRepository.save(new User(3L, "kaka", 50));
userRepository.save(new User(4L, "didi2", 30));
userRepository.save(new User(5L, "mama", 40));
userRepository.save(new User(6L, "kaka2", 50));
userRepository.save(new User(7L, "kaka", 50));
userRepository.save(new User(8L, "kao", 50));
userRepository.save(new User(9L, "ekakae", 50));
userRepository.save(new User(10L, "kaka5", 50));
userRepository.save(new User(11L, "", 50));
userRepository.save(new User(12L, null, 50));
this.logger.info(String.valueOf(userRepository.findAll().size())); // 删除一个User,再验证User总数
/*User u = userRepository.findOne(1L);
this.logger.info(u.toString());
userRepository.delete(u);
this.logger.info(String.valueOf(userRepository.findAll().size())); // 删除一个User,再验证User总数
u = userRepository.findByUsername("mama").get(0);
this.logger.info(u.toString());
userRepository.delete(u);
this.logger.info(String.valueOf(userRepository.findAll().size()));*/ } @Test
public void test2() throws Exception { // 删除一个User,再验证User总数
List<User> u1 = userRepository.findByUsernameLike("kaka");
this.logger.info(u1.toString());
List<User> u2 = userRepository.findByUsername("mama");
this.logger.info(u2.toString());
List<User> u3 = userRepository.findByAgeGreaterThan(40);
this.logger.info(u3.toString());
List<User> u4 = userRepository.findByAgeLessThan(40);
this.logger.info(u4.toString());
List<User> u5 = userRepository.findByAgeBetween(30,45);
this.logger.info(u5.toString());
List<User> u6 = userRepository.findByUsernameNotNull();
this.logger.info(u6.toString());
List<User> u7 = userRepository.findByUsernameNull();
this.logger.info(u7.toString());
List<User> u8 = userRepository.findByUsernameNot("kaka");
this.logger.info(u8.toString()); } @Test
public void test3() throws Exception { Pageable pageable = new PageRequest(0,10);
Page<User> u1 = userRepository.findByNameAndAgeRange("kaka",50,pageable);
this.logger.info(u1.toString());
Page<User> u2 = userRepository.findByNameAndAgeRange2("kaka",0,50,pageable);
this.logger.info(u2.toString());
Page<User> u3 = userRepository.findByNameAndAgeRange3("kaka",0,50,pageable);
this.logger.info(u3.toString()); }
}

9.GITHUB地址

https://github.com/nbfujx/springBoot-learn-demo/tree/master/spring-boot-mongodb

spring-boot整合mongodb的案例的更多相关文章

  1. Spring boot整合Mongodb

    最近的项目用了Mongodb,网上的用法大多都是七零八落的没有一个统一性,自己大概整理了下,项目中的相关配置就不叙述了,由于spring boot的快捷开发方式,所以spring boot项目中要使用 ...

  2. spring boot 整合MongoDB

    参考     https://www.cnblogs.com/nbfujx/p/7999171.html

  3. spring boot整合quartz定时任务案例

    1.运行环境 开发工具:intellij idea JDK版本:1.8 项目管理工具:Maven 4.0.0 2.GITHUB地址 https://github.com/nbfujx/springBo ...

  4. spring MVC 整合mongodb

    Spring Mongodb 目录 1 SPRING整合MONGODB 1 1.1 环境准备 1 1.2 包依赖 1 1.3 配置 2 2 案列 5 2.1 SPRING MVC整合MONGODB代码 ...

  5. Spring Kafka和Spring Boot整合实现消息发送与消费简单案例

    本文主要分享下Spring Boot和Spring Kafka如何配置整合,实现发送和接收来自Spring Kafka的消息. 先前我已经分享了Kafka的基本介绍与集群环境搭建方法.关于Kafka的 ...

  6. Spring Kafka整合Spring Boot创建生产者客户端案例

    每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 创建一个kafka-producer-master的maven工程.整个项目结构如下: ...

  7. Spring Boot 2.x 基础案例:整合Dubbo 2.7.3+Nacos1.1.3(配置中心)

    本文原创首发于公众号:Java技术干货 1.概述 本文将Nacos作为配置中心,实现配置外部化,动态更新.这样做的优点:不需要重启应用,便可以动态更新应用里的配置信息.在如今流行的微服务应用下,将应用 ...

  8. Spring Boot 整合 Elasticsearch,实现 function score query 权重分查询

    摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 预见未来最好的方式就是亲手创造未来 – <史蒂夫·乔布斯传> 』 运行环境: ...

  9. (转)Spring Boot (十四): Spring Boot 整合 Shiro-登录认证和权限管理

    http://www.ityouknow.com/springboot/2017/06/26/spring-boot-shiro.html 这篇文章我们来学习如何使用 Spring Boot 集成 A ...

  10. Spring Boot(十四):spring boot整合shiro-登录认证和权限管理

    Spring Boot(十四):spring boot整合shiro-登录认证和权限管理 使用Spring Boot集成Apache Shiro.安全应该是互联网公司的一道生命线,几乎任何的公司都会涉 ...

随机推荐

  1. ANTLR4 实验总结

    问题总结: 1.不同类型编程语言之间转换的意义. 仅仅的字符替换?结构 2.编程语言转换的困难. 优先级:++运算符 不同语言有各自的优越性(Scala转C遇到困难) 编程思想冲突. 3.单纯应用在数 ...

  2. java 虚方法。 后面new 那个类, 就调用哪个类的方法 ,而非定义类的方案。 关于父子 类的 呵呵

    java   虚方法.     后面new  那个类, 就调用哪个类的方法 ,而非定义类的方案.  关于父子 类的   呵呵 在多态的情况下,声明为父类类型的引用变量只能调用父类中的方法,但如果此变量 ...

  3. IQueryable不能使用异步方法的解决方案

    ---恢复内容开始--- 看见别人用Linq to Sql的Async好久了,我还没开始用,感觉太土了,跟不上潮流了,打开vs,就准备写个查询,然后发现我用一个IQueryable的对象,怎么都点不出 ...

  4. Learn Python the hard way, ex35 分支和函数

    #!/usr/bin/python #coding:utf-8 from sys import exit def gold_room(): print "this room is full ...

  5. PA动画使用教程

    1.动画复制与动画粘贴.动画删除 PA的动画复制.动画粘贴不会覆盖原有动画: PPT自带的动画刷会覆盖原有动画: 注意: 超级属性的动画复制.粘贴有bug,应使用自带的动画刷: PA动画的复制.粘贴只 ...

  6. window.location.href后携带参数

    JS文件中: window.location.href后可携带参数,但是不安全,虽然在技术上是可以实现的 1.传参:window.location.href = "RecordCare.as ...

  7. Robotframework使用自写库连接mysql数据库

    Robotframework使用自写库连接mysql数据库 新建库文件mysqltest.py 代码如下: # -*- coding: utf-8 -*- import MySQLdbimport o ...

  8. python datetime模块的strftime()

    strftime()   可以对datetime对象进行格式化,生成需要时间格式的时间 strptime()  可以对格式化后的时间再生成datetime对象 格式化时间时,如果不想要-来隔开,还可以 ...

  9. 《JAVA设计模式》之适配器模式(Adapter)

    在阎宏博士的<JAVA与模式>一书中开头是这样描述适配器(Adapter)模式的: 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能 ...

  10. exports、module.exports和export、export default到底是咋回事

    地址1:https://segmentfault.com/a/1190000010426778 地址2:https://blog.csdn.net/caixiaowang/article/detail ...