1. 程式人生 > >SpringBoot 整合 MongoDB 之 MongoTemplate 實現 CRUD、分頁介面

SpringBoot 整合 MongoDB 之 MongoTemplate 實現 CRUD、分頁介面

###一、前言
最近 ITAEM 團隊的一個前端女生使用了 node+MongoDB 做了一個視訊網站,效果相當不錯,這勾起了筆者塵封已久的 MongoDB 記憶,於是結合目前最為流行的後臺框架 SpringBoot,做了一個一般專案常用後臺的介面 CRUD 操作

###二、程式碼
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>

###三、效果

這裡寫圖片描述

可以大膽地進行測試,介面均測試過,都是沒有問題的