SpringBoot 整合 MongoDB 之 MongoTemplate 实现 CRUD、分页接口

一、前言

最近 ITAEM 团队的一个前端女生使用了 node+MongoDB 做了一个视频网站,效果相当不错,这勾起了笔者尘封已久的 MongoDB 记忆,于是结合目前最为流行的后台框架 SpringBoot,做了一个一般项目常用后台的接口 CRUD 操作

1、基础
MongoDB 的简单 增删改查
使用 mongoose 操作 MongoDB 数据库之 增删改查
2、参考
Spring Boot 中使用 MongoDB 增删改查
② 《SpringBoot2 精髓》李家智

二、代码

talk is cheap show me the code
1、代码结构

这里写图片描述

2、实体
package com.cun.entity;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;

/**
 * 实体层
 * @author linhongcun
 *
 */
@Document(collection="t_user")
public class User {

	@Id // 指定ID
	private String id;

	@Field("userName") // 指定域名,覆盖默认
	private String userName;

	@Field("password") // 指定域名,覆盖默认
	private String password;

	public String getId() {
		return id;
	}

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

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

}

3、控制层
package com.cun.controller;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria; //这个包最容易导错
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.cun.entity.User;

import springfox.documentation.swagger2.annotations.EnableSwagger2;

/**
 * 控制层
 * @author linhongcun
 *
 */
@RestController
@RequestMapping("/user")
@EnableSwagger2
public class UserController {

	@Autowired
	MongoTemplate mongoTemplate;

	/**
	 * 1、增
	 * @param user
	 * @return
	 */
	@PostMapping("/insert")
	public User insertUser(User user) {
		// 可以用 save 替代
		mongoTemplate.insert(user);
		return user;
	}

	/**
	 * 2、查
	 * @param id
	 * @return
	 */
	@GetMapping("/get/{id}")
	public User getUserById(@PathVariable String id) {
		return mongoTemplate.findById(id, User.class);
	}

	/**
	 * 3、删
	 * @param id
	 * @return
	 */
	@DeleteMapping("/delete/{id}")
	public User deleteUserById(@PathVariable String id) {
		User user = mongoTemplate.findById(id, User.class);
		mongoTemplate.remove(user);
		return user;
	}

	/**
	 * 4、改
	 * @param user
	 * @return
	 */
	@PutMapping("/update")
	public User updateUser(User user) {
		// save 可增可改!
		mongoTemplate.save(user);
		return user;
	}

	/**
	 * 5、全
	 * @return
	 */
	@GetMapping("/get/all")
	public List<User> getAllUsers() {
		return mongoTemplate.findAll(User.class);
	}

	/**
	 * 6、查 ++:属性、分页
	 * @param user
	 * @param page
	 * @param size
	 * @return
	 */
	@GetMapping("/select/{page}/{size}")
	public Map<String, Object> selectUserByProperty(User user, @PathVariable int page, @PathVariable int size) {

		// 条件
		Criteria criteria1 = Criteria.where("userName").is(user.getUserName());
		Criteria criteria2 = Criteria.where("password").is(user.getPassword());
		Query query = new Query();
		if (user.getUserName() != null) {
			query.addCriteria(criteria1);
		}
		if (user.getPassword() != null) {
			query.addCriteria(criteria2);
		}

		// 数量
		long total = mongoTemplate.count(query, User.class);

		// 分页
		query.skip((page - 1) * size).limit(size);

		List<User> data = mongoTemplate.find(query, User.class);
		Map<String, Object> map = new HashMap<String, Object>();

		map.put("data", data);
		map.put("total", total);

		return map;
	}

}

4、yml
server:
  context-path: /
  port: 80
spring:
  data:
    mongodb:
      uri: mongodb://120.79.197.131:27018/test  #编码自动为UTF-8,没有中文乱码!
5、pom

这里写图片描述

还有 Swagger 依赖

		<!-- swagger生成接口API -->
		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger2</artifactId>
			<version>2.7.0</version>
		</dependency>

		<!-- 接口API生成html文档 -->
		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger-ui</artifactId>
			<version>2.6.1</version>
		</dependency>

三、效果

Swagger测试页面:http://localhost/swagger-ui.html

这里写图片描述

可以大胆地进行测试,接口均测试过,都是没有问题的

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT小村

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值