spring-boot整合mongodb的案例
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的案例的更多相关文章
- Spring boot整合Mongodb
最近的项目用了Mongodb,网上的用法大多都是七零八落的没有一个统一性,自己大概整理了下,项目中的相关配置就不叙述了,由于spring boot的快捷开发方式,所以spring boot项目中要使用 ...
- spring boot 整合MongoDB
参考 https://www.cnblogs.com/nbfujx/p/7999171.html
- spring boot整合quartz定时任务案例
1.运行环境 开发工具:intellij idea JDK版本:1.8 项目管理工具:Maven 4.0.0 2.GITHUB地址 https://github.com/nbfujx/springBo ...
- 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代码 ...
- Spring Kafka和Spring Boot整合实现消息发送与消费简单案例
本文主要分享下Spring Boot和Spring Kafka如何配置整合,实现发送和接收来自Spring Kafka的消息. 先前我已经分享了Kafka的基本介绍与集群环境搭建方法.关于Kafka的 ...
- Spring Kafka整合Spring Boot创建生产者客户端案例
每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code 创建一个kafka-producer-master的maven工程.整个项目结构如下: ...
- Spring Boot 2.x 基础案例:整合Dubbo 2.7.3+Nacos1.1.3(配置中心)
本文原创首发于公众号:Java技术干货 1.概述 本文将Nacos作为配置中心,实现配置外部化,动态更新.这样做的优点:不需要重启应用,便可以动态更新应用里的配置信息.在如今流行的微服务应用下,将应用 ...
- Spring Boot 整合 Elasticsearch,实现 function score query 权重分查询
摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 预见未来最好的方式就是亲手创造未来 – <史蒂夫·乔布斯传> 』 运行环境: ...
- (转)Spring Boot (十四): Spring Boot 整合 Shiro-登录认证和权限管理
http://www.ityouknow.com/springboot/2017/06/26/spring-boot-shiro.html 这篇文章我们来学习如何使用 Spring Boot 集成 A ...
- Spring Boot(十四):spring boot整合shiro-登录认证和权限管理
Spring Boot(十四):spring boot整合shiro-登录认证和权限管理 使用Spring Boot集成Apache Shiro.安全应该是互联网公司的一道生命线,几乎任何的公司都会涉 ...
随机推荐
- windows下使用pycharm开发基于ansible api的python程序
Window下python安装ansible,基于ansible api开发python程序 在windows下使用pycharm开发基于ansible api的python程序时,发现ansible ...
- jenkins持续集成、插件以及凭据
Jenkins介绍 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能. Jenkins功能包括: ...
- SEC5 - MySQL 查询语句--------------进阶1:基础查询
# 进阶1:基础查询 /* 语法: select 查询列表 from 表名: 特点: 1.查询列表可以是:表中的字段.常量值.表达式.表达式.函数 2.查询的结果是一个虚拟的表格 如何执行:执行谁,请 ...
- 应用安全-Web安全-漏洞修复方案整理
通过HTTP头部字段防御措施整理 X-Frame-Options #反劫持 X-XSS-Protection #开启浏览器防XSS功能 Set X-Frame-Options CSP X-Conte ...
- JS中设置input的type="radio"默认选中
html: <input id="Radio1" type="radio" value="男" name="st_Sex&q ...
- Linux-第二篇常用命令
1.常用目录文件操作命令 cd:切换目录 格式:cd 目录 ls:显示文件和目录列表.可选参数: -l 列出文件的详细信息 -a 列出当前目录所有文件,包含隐藏文件 ll:查看目录接口,相当于是ls ...
- Struts2之动态方法调用
1.感叹号 前台页面 <%@ page language="java" contentType="text/html; charset=UTF-8" pa ...
- LOJ 2234/BZOJ 3629 聪明的燕姿(数论+DFS)
题面 传送门 分析 看到约数之和,我们首先想到约数和公式 若$ x=\prod_{i=1}^{n}p_i^{k_i} \(,则x的约数和为\) \prod_{i=1}^{n} \sum_{j=0}^{ ...
- python学习第十四天字典的del(),pop().popitem(),clear()删除方法
字典的每个键值 key=>value 数据类型,字典的key是唯一的,Value可以一样 names={'玖乐公司网址':‘www.96net.com.cn’,"电池网":' ...
- 微信小程序(14)--上传图片公用组件(父子传参)
这周整理了一下做微信小程序页面时遇到的一些问题,先说说常见的上传图片吧. 上传图片公用组件 首先要了解的是父子传参. 1.A组件为父组件,B组件为子组件,以下是A组件向B组件传参: 在A组件的json ...