springboot集成mongodb

本文主要介绍了 springboot集成mongodb实现简单crud,模糊搜索,分页,排序,适合刚学习mongodb的同鞋快速上手。

1、开发环境

		springboot2.1.5、jdk8+、mongdb4.0、idea、maven、robo 3T -1.3、swagger2.5.0

2、 MongoDB安装

	推荐安装博客:https://blog.csdn.net/heshushun/article/details/77776706
	安装包网盘地址:链接:https://pan.baidu.com/s/1-PNMW_R26b1t7wEQKJZU7A   提取码:xf3q 

3、话不多说直接上代码

3.1、maven依赖配置

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.5.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example</groupId>
	<artifactId>springboot-mongodb</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>springboot-mongodb</name>
	<description>mongodb测试</description>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-mongodb</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.6</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger2</artifactId>
			<version>2.5.0</version>
		</dependency>
		<dependency>
			<groupId>io.springfox</groupId>
			<artifactId>springfox-swagger-ui</artifactId>
			<version>2.5.0</version>
		</dependency>

	</dependencies>

3.2、配置文件 yml

server:
  port: 8080
spring:
  application:
    name: spirngboot-mongodb
  data:
    mongodb:
      host: localhost   #同127.0.0.1
      port: 27017
      database: test    #指定操作的数据库

3.3、实体类

import lombok.Data;
import org.springframework.data.annotation.Id;
/**
 * @ClassName User
 * @Description TODO 用户实体
 * @Author shiya
 * @Date 2019/5/30 17:23
 * @Version 1.0
 */
@Data
public class User {
    /**
     * 用户id
     **/
    @Id
    private Long id;
    /**
     * 用户名
     **/
    private String username;
    /**
     * 用户年龄
     **/
    private Integer age;
}

3.4、controller

import com.example.demo.model.User;
import com.example.demo.service.UserServcie;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
/**
 * @ClassName UserController
 * @Description TODO
 * @Author shiya
 * @Date 2019/5/31 9:48
 * @Version 1.0
 */
@Api(description = "用户Api")
@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserServcie userServcie;

    @ApiOperation("查询所有用户列表")
    @GetMapping
    public List<User> findAll(@ApiParam(value = "页码",name = "page",defaultValue = "1")@RequestParam("page")Integer page,
                              @ApiParam(value = "记录数",name = "size",defaultValue = "10")@RequestParam("size")Integer size){
        return userServcie.list(page,size);
    }

    @ApiOperation("通过id查询")
    @GetMapping("/{id}")
    public User findOneById(@PathVariable Long id){
        return userServcie.getOneById(id);
    }
    @ApiOperation("通过名称模糊查询")
    @GetMapping("/like/{name}")
    public List<User> findOneByName(@PathVariable String name){
        return userServcie.getListLikeName(name);
    }
    @ApiOperation("添加")
    @PostMapping
    public User save(@RequestBody User user){
        return userServcie.save(user);
    }
    @ApiOperation("修改")
    @PutMapping
    public String update(@RequestBody User user){
        return userServcie.update(user);
    }
    @ApiOperation("删除")
    @DeleteMapping
    public Long del(@RequestBody User user){
        return userServcie.del(user);
    }
}

3.5、service

import com.example.demo.model.User;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
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.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.regex.Pattern;

/**
 * @ClassName UserServcie
 * @Description TODO 业务
 * @Author shiya
 * @Date 2019/5/30 17:31
 * @Version 1.0
 */
@Service
@Slf4j
public class UserServcie {
    @Autowired
    private MongoTemplate mongoTemplate;
    /**
     * @Author shiya
     * @Description TODO 添加用户
     * @Date 17:37 2019/5/30
     * @Param [user]
     * @return com.example.demo.model.User
     **/
    public User save (User user){
        log.info("添加用户:" + user);
        User save = mongoTemplate.save(user);
        log.info("添加成功用户:" + save);
        return save;
    }
    /**
     * @Author shiya
     * @Description TODO 用户列表
     * @Date 17:39 2019/5/30
     * @Param []
     * @return java.util.List<com.example.demo.model.User>
     **/
    public List<User> list(Integer page,Integer size){
        Query query = new Query();
        //分页
        query.skip((page - 1)/size);
        query.limit(size);
        //排序
        query.with(new Sort(new Sort.Order(Sort.Direction.ASC,"age")));
        List<User> all = mongoTemplate.find(query,User.class);
        log.info("用户列表:" + all);
        return all;
    }
    /**
     * @Author shiya
     * @Description TODO 通过id查询
     * @Date 17:47 2019/5/30
     * @Param [id]
     * @return com.example.demo.model.User
     **/
    public User getOneById(Long id){
        Query query = new Query(Criteria.where("_id").is(id));
        User one = mongoTemplate.findOne(query, User.class);
        log.info("用户:" + one);
        return one;
    }
    /**
     * @Author shiya
     * @Description TODO 根据用户名模糊查询
     * @Date 18:00 2019/5/30
     * @Param [name]
     * @return java.util.List<com.example.demo.model.User>
     **/
    public List<User> getListLikeName(String name){
        //完全匹配
//        Pattern pattern = Pattern.compile("^张$", Pattern.CASE_INSENSITIVE);
        //右匹配
//        Pattern pattern = Pattern.compile("^.*张$", Pattern.CASE_INSENSITIVE);
        //左匹配
//        Pattern pattern = Pattern.compile("^张.*$", Pattern.CASE_INSENSITIVE);
        //模糊匹配
        Pattern pattern= Pattern.compile("^.*"+name+".*$", Pattern.CASE_INSENSITIVE);
        Query query = new Query(Criteria.where("username").regex(pattern));
        List<User> users = mongoTemplate.find(query, User.class);
        log.info("模糊搜索的用户:" + users);
        return users;
    }
    /**
     * @Author shiya
     * @Description TODO 修改用户
     * @Date 9:14 2019/5/31
     * @Param [user]
     * @return java.lang.String
     **/
    public String update(User user){
        Query query = new Query(Criteria.where("_id").is(user.getId()));
        Update update = Update.update("username", user.getUsername()).set("age", user.getAge());
        //修改第一个符合条件的数据
        UpdateResult updateResult = mongoTemplate.updateFirst(query, update, User.class);
        //修改全部符合条件的,当set的key不存在会新建一个key,inc方法用于做累加操作,rename方法用于修改key的名称,unset方法用于删除key
//        mongoTemplate.updateMulti(query,update,User.class);
        //当没有符合条件的文档,就以这个条件和更新文档为基础创建一个新的文档,如果找到匹配的文档就正常的更新
//        mongoTemplate.upsert(query,update,User.class);
        log.info("=========> " + updateResult.getModifiedCount());
        return "success";
    }
    /**
     * @Author shiya
     * @Description TODO 删除
     * @Date 9:47 2019/5/31
     * @Param [user]
     * @return java.lang.Long
     **/
    public Long del(User user){
        DeleteResult remove = mongoTemplate.remove(user);
        log.info("删除影响的数量:" + remove.getDeletedCount());
        return remove.getDeletedCount();
    }
}

3.6、代码测试

在这里插入图片描述
添加用户
打开roto查看插入的用户数据
在这里插入图片描述

3.7、项目地址

码云:https://gitee.com/shiya2000/springboot_mongodb
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值