在上篇 MongoDB常用操作练习 中,我们在命令提示符窗口使用简单的mongdb的方法操作数据库,实现增删改查及其他的功能。在本篇中,我们将mongodb与spring boot进行整合,也就是在java中使用mongodb。当然了,这个只是一个简单到不能再简单的demo,我只是为了练手。实际项目中应用肯定比这复杂多了。话不多说,上代码。

一、pom.xml

    在这里我集成的依赖有web,test,mongodb,devtools。其中devtools是热部署,它会自动的编译代码。如果不加入这个依赖,手动编译也是可以的,我主要是嫌手动编译麻烦就这样做了。

<?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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.19.BUILD-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent> <groupId>com.gougou</groupId>
<artifactId>springboot-demo02-mongo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-demo02-mongo</name>
<description>Demo project for Spring Boot</description> <properties>
<java.version>1.8</java.version>
</properties> <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> <!-- mongo -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency> <!-- 热部署 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency> </dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> <repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
</pluginRepository>
</pluginRepositories> </project>

二、application.properties

    这里我是修改了tomcat的端口号,如果你的8080端口没占用,可以注释掉这段代码。

# 配置tomcat的端口号
server.port=8081 # mongo(未设置密码)
spring.data.mongodb.uri=mongodb://localhost:27017/test # mongo(设置密码)
#spring.data.mongodb.uri=mongodb://user:password@localhost:27017/mydb

三、实体类Student

  这里在实体类的id属性上你可以选择性的加上“@Id”注解,由于在不加此注解时,mongodb会自动生成“_id”,而加上此注解,不但需要手动指定主键,而且插入效率远远低于不加注解的情况。所以在这里我没有使用注解。

package com.gougou.student;

public class Student {

    private String id;

    private String name;

    private Integer age;

    private Boolean gender;

    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 Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} public Boolean getGender() {
return gender;
} public void setGender(Boolean gender) {
this.gender = gender;
} @Override
public String toString() {
return "Student{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", age=" + age +
", gender=" + gender +
'}';
} public Student(){
} public Student(String name, Integer age, Boolean gender) {
this.name = name;
this.age = age;
this.gender = gender;
} }

四、仓库StudentRepository

  写一个接口,继承MongoRepository,这个接口有了基本的CURD的功能。如果你想自定义一些查询,比如根据name来查询,或者根据age来查询,只需要定义一个方法即可。注意name严格按照存入的mongodb的字段对应。在典型的Java的应用程序,写这样一个接口的方法,需要自己实现,但是在springboot中,你只需要按照格式写一个接口名和对应的参数就可以了,因为springboot已经帮你实现了。

package com.gougou.student;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query; import java.util.List; public interface StudentRepository extends MongoRepository<Student,String> { /**
* 根据实体属性进行精确查询:find + By + 属性名(首字母大写)
*/
List<Student> findByName(String name); List<Student> findByAge(Integer age); List<Student> findByGender(Boolean gender); /**
* 根据实体属性进行模糊查询:find + By + 属性名(首字母大写) + Like
*/
List<Student> findByNameLike(String name); /**
* 根据实体属性进行模糊查询+分页:find + By + 属性名(首字母大写) + Like
*/
Page<Student> findByNameLike(String name, PageRequest pageRequest); /**
* 查询所有数据,同时指定返回的键。
*
* 不能使用仓库中自带的findAll()方法了。我们可以查询所有id不为空的数据,同时指定返回的键。
* 当我们需要根据一个key且该key不为空进行查询,方法名的定义规则为:find + By + 属性名(首字母大写) + NotNull。
*
* 指定返回的键:也就是说当我们进行带分页的模糊查询时,不想返回数据库中的所有字段,只是返回一部分字段,若想指定返回的键,我们需要在
* PersonRepository中添加方法,同时使用注解@Query。其中value是查询的条件,?0这个是占位符,对应着方法中参数中的第一个参数,如果对应的是
* 第二个参数则为?1。fields是我们指定的返回字段,其中id是自动返回的,不用我们指定
*/
@Query(value = "{'_id':{'$ne':null}}",fields = "{'name':1}")
Page<Student> findByIdNotNull(Pageable pageable); }

五、service实现类StudentServiceImpl

package com.gougou.student;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service; import java.util.List; @Service
public class StudentServiceImpl implements StudentService { @Autowired
private StudentRepository studentRepository; /**
* @function 插入单条数据
* @param student
*/
@Override
public void insert(Student student) {
studentRepository.insert(student);
} /**
* @function 批量插入数据
*/
@Override
public void insertByList(List<Student> studentList) {
studentRepository.insert(studentList);
} /**
* @function 无条件计数
* @return
*/
@Override
public int count() {
return (int)studentRepository.count();
} /**
* @function 无条件查询所有的数据
* @return
*/
@Override
public List<Student> queryAll() {
return studentRepository.findAll();
} /**
* @function 无条件查询分页
* @return
*/
@Override
public Page<Student> queryByPage(int page, int rows) {
PageRequest pageRequest = new PageRequest(page,rows);
return studentRepository.findAll(pageRequest);
} /**
* 根据实体属性进行精确查询
*/
@Override
public List<Student> queryByName(String name) {
return studentRepository.findByName(name);
} @Override
public List<Student> queryByAge(Integer age) {
return studentRepository.findByAge(age);
} @Override
public List<Student> queryByGender(Boolean gender) {
return studentRepository.findByGender(gender);
} /**
* 根据实体属性进行模糊查询
*/
@Override
public List<Student> queryByNameLike(String name) {
return studentRepository.findByNameLike(name);
} /**
* 根据实体属性进行模糊查询并分页
* @return
*/
@Override
public Page<Student> queryByNameLikeAndPage(int page,int rows,String name) {
PageRequest pageRequest = new PageRequest(page,rows);
return studentRepository.findByNameLike(name,pageRequest);
} }

六、servie接口StudentService

package com.gougou.student;

import org.springframework.data.domain.Page;

import java.util.List;

public interface StudentService {

    /**
* @function 插入单条数据
* @param student
*/
void insert(Student student); /**
* @function 批量插入数据
*/
void insertByList(List<Student> studentList); /**
* @function 无条件计数
* @return
*/
int count(); /**
* @function 无条件查询所有的数据
* @return
*/
List<Student> queryAll(); /**
* @function 无条件查询分页
* @return
*/
Page<Student> queryByPage(int page,int rows); /**
* 根据实体属性进行精确查询
*/
List<Student> queryByName(String name);
List<Student> queryByAge(Integer age);
List<Student> queryByGender(Boolean gender); /**
* 根据实体属性进行模糊查询
*/
List<Student> queryByNameLike(String name); /**
* 根据实体属性进行【模糊+分页】查询
*/
Page<Student> queryByNameLikeAndPage(int page,int rows,String name); }

七、StudentController

package com.gougou.student;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList;
import java.util.List; @RestController
@RequestMapping(value = "student")
public class StudentController { @Autowired
private StudentService studentService; /**
* 插入一条数据
* @return
*/
@RequestMapping(value = "insert")
public int insert(){
Student student = new Student("张三",25,true);
studentService.insert(student);
return 1;
} /**
* 插入一条数据
* @return
*/
@RequestMapping(value = "insertByList")
public int insertByList(){
List<Student> students = new ArrayList<>(10); Student student = null;
for (int i = 0;i<10;i++){
student = new Student("李斯"+i,i+15,i%2==0?true:false);
students.add(student);
}
studentService.insertByList(students);
return 1;
} /**
* 无条件的数据统计
*/
@RequestMapping(value="count")
public int count(){
return studentService.count();
} /**
* @function 无条件查询所有的数据
* @return
*/
@RequestMapping(value="queryAll")
public List<Student> queryAll(){
return studentService.queryAll();
} /**
* @function 无条件查询分页
* @return
*/
@RequestMapping(value="queryByPage")
public Page<Student> queryByPage(Integer page, Integer rows){
if(page == null || page <0){
page = 0;
}
if(rows == null || rows < 0){
rows = 5;
}
return studentService.queryByPage(page,rows);
} /**
* 根据实体属性进行精确查询
*/
@RequestMapping(value = "queryByName")
public List<Student> queryByName(String name){
return studentService.queryByName(name);
} @RequestMapping(value = "queryByAge")
public List<Student> queryByAge(Integer age){
return studentService.queryByAge(age);
} @RequestMapping(value = "queryByGender")
public List<Student> queryByGender(Boolean gender){
return studentService.queryByGender(gender);
} /**
* 根据实体属性进行模糊查询
*/
@RequestMapping(value = "queryByNameLike")
public List<Student> queryByNameLike(String name){
return studentService.queryByNameLike(name);
} /**
* 模糊查询加分页
*/
@RequestMapping(value = "queryByNameLikeAndPage")
public Page<Student> queryByNameLikeAndPage(Integer page,Integer rows,String name){
if(page == null || page <0){
page = 0;
}
if(rows == null || rows < 0){
rows = 5;
}
return studentService.queryByNameLikeAndPage(page,rows,name);
} }

MongoDB系列:三、springboot整合mongoDB的简单demo的更多相关文章

  1. Springboot整合MongoDB的Docker开发,其它应用也类似

    1 前言 Docker是容器开发的事实标准,而Springboot是Java微服务常用框架,二者必然是会走到一起的.本文将讲解如何开发Springboot项目,把它做成Docker镜像,并运行起来. ...

  2. Springboot 整合 MongoDB

    Springboot 整合 MongoDB 这节我们将整合 Spring Boot 与 Mongo DB 实现增删改查的功能,并且实现序列递增. Mongo DB 的基本介绍和增删改查的用法可以参考我 ...

  3. SpringBoot 整合 MongoDB 实战介绍

    一.介绍 在前面的文章中,我们详细的介绍了 MongoDB 的配置和使用,如果你对 MongoDB 还不是很了解,也没关系,在 MongoDB 中有三个比较重要的名词:数据库.集合.文档! 数据库(D ...

  4. java操作mongodb & springboot整合mongodb

    简单的研究原生API操作MongoDB以及封装的工具类操作,最后也会研究整合spring之后作为dao层的完整的操作. 1.原生的API操作 pom.xml <!-- https://mvnre ...

  5. SpringBoot整合mongoDB

    MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 这一片文章介绍一个springboot整合mongodb,如果你了解整合mysql之类的 ...

  6. 8、SpringBoot整合之SpringBoot整合MongoDB

    SpringBoot整合MongoDB 一.创建项目,选择依赖 仅选择Spring Web.Spring Data MongoDB即可 二.引入相关依赖(非必要) 这里只是为了实体类的创建方便而引入l ...

  7. SpringBoot 整合mongoDB并自定义连接池

    SpringBoot 整合mongoDB并自定义连接池 得力于SpringBoot的特性,整合mongoDB是很容易的,我们整合mongoDB的目的就是想用它给我们提供的mongoTemplate,它 ...

  8. springBoot整合MyBatise及简单应用

    springBoot整合MyBatise及简单应用 我采用的是 工具IDEA 框架是springBoot+maven+Mybatise 第一步: pom.xml 引入相关jar包 <?xml v ...

  9. 从无到有Springboot整合Spring-data-jpa实现简单应用

    本文介绍Springboot整合Spring-data-jpa实现简单应用 Spring-data-jpa是什么?这不由得我们思考一番,其实通俗来说Spring-data-jpa默认使用hiberna ...

  10. Springboot整合ElasticSearch进行简单的测试及用Kibana进行查看

    一.前言 搜索引擎还是在电商项目.百度.还有技术博客中广泛应用,使用最多的还是ElasticSearch,Solr在大数据量下检索性能不如ElasticSearch.今天和大家一起搭建一下,小编是看完 ...

随机推荐

  1. .NET Core微服务之基于App.Metrics+InfluxDB+Grafana实现统一性能监控

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.关于App.Metrics+InfluxDB+Grafana 1.1 App.Metrics App.Metrics是一款开源的支持. ...

  2. 【java线程池】

    一.概述 1.线程池的优点 ①降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗: ②提高系统响应速度,当有任务到达时,无需等待新线程的创建便能立即执行: ③方便线程并发数的管控,线 ...

  3. Java进阶篇设计模式之二 ----- 工厂模式

    前言 在上一篇中我们学习了单例模式,介绍了单例模式创建的几种方法以及最优的方法.本篇则介绍设计模式中的工厂模式,主要分为简单工厂模式.工厂方法和抽象工厂模式. 简单工厂模式 简单工厂模式是属于创建型模 ...

  4. 使用 ASP.NET Core MVC 创建 Web API(二)

    使用 ASP.NET Core MVC 创建 Web API 使用 ASP.NET Core MVC 创建 Web API(一) 六.添加数据库上下文 数据库上下文是使用Entity Framewor ...

  5. 一套代码小程序&Web&Native运行的探索02

    接上文:一套代码小程序&Web&Native运行的探索01,本文都是一些探索性为目的的研究学习,在最终版输出前,内中的内容可能会有点乱 参考: https://github.com/f ...

  6. 如何大幅提升web前端性能之看tengine在大公司架构实践

    在一个项目还是单体架构的时候,所有的js,css,image都会在一个web网站上,看起来并没有什么问题,比如下面这样: 但是当web网站流量起来的时候,这个单体架构必须要进行横向扩展,而在原来的架构 ...

  7. MVC中使用Ninject依赖注入

    在.NET MVC中使用Ninject注入,主要分为以下几步: 使用NuGet包添加Ninject引用,我添加的是目前最新版本3.34 在App_Start文件夹下,创建NinjectControll ...

  8. 数据库艰难求生之路(基础:创建数据库表格)part1

     创建表格 1.创建表格之identity create table TableName( id ,), col_1 ), col_2 ) ) 这是一个简单的表格创建,identity这个是指在创建表 ...

  9. PHP面向对象和面向过程

    编程界不论是PHP.Python都有这么两种编程思想,oop面向对象.pop面向过程,这两种在功能上没有多大区别,但是在代码编写上却有很大区别.今天就记录一下面向对象和面向过程的优点.缺点.定义.实现 ...

  10. Java中数组的插入,删除,扩张

    Java中数组是不可变的,但是可以通过本地的arraycop来进行数组的插入,删除,扩张.实际上数组是没变的,只是把原来的数组拷贝到了另一个数组,看起来像是改变了. 语法: System.arrayc ...