springboot整合mongodb

说明:springboot操作mongodb的简单增删改查

工程图:

话不多说,干代码

1.pom.xml

<?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>2.1.6.RELEASE</version>
        <relativePath/>
    </parent>

    <groupId>org.example</groupId>
    <artifactId>MongoDbOne</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <java.version>1.8</java.version>
        <springfox.version>2.8.0</springfox.version>
    </properties>

    <dependencies>
        <!--springboot jar包-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

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


        <!-- swagger -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.8.0</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.8.0</version>
        </dependency>


        <!--工具栏-->
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>

        <!-- 引入 lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.70</version>
            <scope>compile</scope>
        </dependency>




    </dependencies>

    <build>
        <finalName>MyGisWorkOne</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>1.5.9.RELEASE</version>
                <configuration>
                    <mainClass>com.dev.App</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->

            <plugins>

                <plugin>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>3.1.0</version>
                </plugin>
                <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.0.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.0</version>
                </plugin>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.22.1</version>
                </plugin>
                <plugin>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>3.2.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>2.5.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>2.8.2</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>

2.application.yml

server:
  port: 8090

#数据源
spring:
  data:
    mongodb:
      host: 192.168.18.147 #地址
      port: 27017 #端口号
      database: my_first_db #数据库名
      username: test
      password: test


3.App

package com.dev;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication
public class App {

    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }

}

4.SwaggerConfig

package com.dev.config;


import com.dev.App;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;
import java.util.List;

/**
 * 文档配置
 *
 * @return {@link }
 * @throws
 * @author 李庆伟
 * @date 2021/7/19 17:15
 */
@ConditionalOnWebApplication
@Configuration
@EnableSwagger2
public class SwaggerConfig {

    /**
     * swagger2的配置文件,这里可以配置swagger2的一些基本的内容,比如扫描的包等等
     */
    @Bean
    public Docket createRestApi() {

        List<Parameter> pars = new ArrayList<>();
        ParameterBuilder token = new ParameterBuilder();
        /*token.name("Authorization").description("Authorization")
                .modelRef(new ModelRef("string"))
                .parameterType("header")
                .required(false).build();
        pars.add(token.build());

        ParameterBuilder languageCode = new ParameterBuilder();
        languageCode.name("languageCode").description("languageCode")
                .modelRef(new ModelRef("string"))
                .parameterType("header")
                .required(false).build();
        pars.add(languageCode.build());*/

        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.basePackage(App.class.getPackage().getName()))
                .build()
                .globalOperationParameters(pars)
                .apiInfo(apiInfo());

    }

    /**
     * //构建 api文档的详细信息函数
     * @return
     */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("SOD LRP Application Server RESTful API")
                .version("1.0")
                .build();
    }


}

5.Page

package com.dev.config.page;


import lombok.Data;

import java.util.List;

@Data
public class Page<T> {

    //当前页
    private Integer pageNum;

    //每页显示的条数
    private Integer pageSize;

    //总页数
    private Integer totalPage;

    //总条数
    private Long totalCount;

    //实体集合
    private List<T> pageList;

    //是否是首页
    private boolean isFirstPage = false;

    //是否是尾页
    private boolean isLastPage = false;

    //是否有上一页
    //private boolean hasPreviousPage = false;

    //是否有下一页
    //private boolean hasNextPage = false;

    public Page(){

    }

    public Page(Integer pageNum, Integer pageSize, Long totalCount, List<T> pageList) {
        this.pageNum = pageNum;
        this.pageSize = pageSize;
        this.totalCount = totalCount;
        this.pageList = pageList;

        // 计算totalPage总页数
        if (totalCount % pageSize == 0) {
            // 如果整除了,正好每页显示pageSize条数据,
            this.totalPage = Math.toIntExact(totalCount / pageSize);
        }else {
            // 如果不整除,需要另外添加一页来显示多余的数据
            this.totalPage = Math.toIntExact(totalCount / pageSize + 1);
        }
        if(pageNum != null && pageNum == 1){
            this.isFirstPage = true;
        }
        if(pageNum != null && pageNum == totalPage){
            this.isLastPage = true;
        }
    }



}

6.PageInfo

package com.dev.config.page;

import java.util.List;

public class PageInfo {


    //统一分页入口
    public static Page makePage(Integer pageNum, Integer pageSize, Long totalCount, List pageList) {
        if(pageNum == null || pageSize == null || totalCount == null){
            pageNum = 1;
            pageSize = 20;
            totalCount = 0L;
        }
        Page page = new Page(pageNum,pageSize,totalCount,pageList);
        return page;
    }
}

7.Teacher

package com.dev.model;


import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
import org.springframework.format.annotation.DateTimeFormat;

import java.util.Date;

@Data
@Document("t_teacher")
public class Teacher {

    @Id
    private String id;

    private String name;

    private Integer age;

    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @Field
    private Date createDate;
}

8.TeacherController

package com.dev.controller;


import com.dev.config.page.Page;
import com.dev.model.Teacher;
import com.dev.service.TeacherService;
import io.swagger.annotations.*;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

@RequestMapping("teacher")
@RestController
@Api(value = "教师管理", tags = "教师管理")
public class TeacherController {

    @Autowired
    private TeacherService teacherService;


    @GetMapping("show")
    @ApiOperation(value = "根据id教师信息", notes = "根据id教师信息", produces = "application/json")
    @ApiResponses({
            @ApiResponse(code = 0, message = "ok", response= Teacher.class),
    })
    public Teacher show(@ApiParam(required = true, value = "教师id") @RequestParam String id){
        Teacher map = teacherService.get(id);
        return map;
    }


    @PostMapping("add")
    @ApiOperation(value = "添加教师", notes = "添加教师", produces = "application/json")
    @ApiResponses({
            @ApiResponse(code = 0, message = "ok", response= Teacher.class),
    })
    public String add(Teacher t){
        teacherService.add(t);
        return "ok";
    }

    @PostMapping("update")
    @ApiOperation(value = "修改教师", notes = "修改教师", produces = "application/json")
    @ApiResponses({
            @ApiResponse(code = 0, message = "ok", response= Teacher.class),
    })
    public String update(Teacher t){
        teacherService.update(t);
        return "ok";
    }

    @PostMapping("findAll")
    @ApiOperation(value = "获取所有教师", notes = "获取所有教师", produces = "application/json")
    @ApiResponses({
            @ApiResponse(code = 0, message = "ok", response= Teacher.class),
    })
    public List<Teacher> findAll(){
        List<Teacher> list = teacherService.findAll();
        return list;
    }


    @SneakyThrows
    @PostMapping("findByPage")
    @ApiOperation(value = "分页查找", notes = "分页查找", produces = "application/json")
    public Page<Teacher> findByPage(){

        Date startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2024-05-29 10:10:15");
        Date endTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2024-05-31 06:56:16");

        Teacher teacherQuery = new Teacher();
        //teacherQuery.setName("i");
        //teacherQuery.setAge(54);
        Integer pageNo = 1;
        Integer pageSize = 2;
        Page<Teacher> page = teacherService.findByPage(pageNo,pageSize,startTime,endTime,teacherQuery);
        return page;
    }
}

9.TeacherService

package com.dev.service;

import com.dev.config.page.Page;
import com.dev.model.Teacher;

import java.util.Date;
import java.util.List;

public interface TeacherService {
    Teacher get(String id);

    void add(Teacher t);

    void update(Teacher t);

    List<Teacher> findAll();

    Page<Teacher> findByPage(Integer pageNo, Integer pageSize, Date startTime, Date endTime, Teacher teacherQuery);
}

10.TeacherServiceImpl

package com.dev.service.impl;

import com.dev.config.page.Page;
import com.dev.config.page.PageInfo;
import com.dev.dao.TeacherDao;
import com.dev.model.Teacher;
import com.dev.service.TeacherService;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.*;
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.stereotype.Service;

import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import java.util.regex.Pattern;

@Service
public class TeacherServiceImpl implements TeacherService {

    @Autowired
    private TeacherDao teacherDao;

    @Override
    public Teacher get(String id) {
        Object o = teacherDao.findById(id);
        return teacherDao.findById(id).get();
    }

    @Override
    public void add(Teacher t) {
        t.setId(UUID.randomUUID().toString().replace("-",""));
        t.setCreateDate(new Date());
        teacherDao.insert(t);
    }

    @Override
    public void update(Teacher t) {
        Teacher o = teacherDao.findById(t.getId()).get();
        if(o.getCreateDate() != null){
            t.setCreateDate(o.getCreateDate());
        }
        teacherDao.delete(o);
        teacherDao.insert(t);
    }

    //简单查询
    @Override
    public List<Teacher> findAll() {
        //return findAllBySort();//排序查询
        //return findAllByEequals();//条件完全匹配查询
        //return findAllByLikeQuery();//复杂查询
        return findAllByQuery();//复杂查询
    }



    //复杂查询
    List<Teacher> findAllByQuery(){
        ExampleMatcher matcher = ExampleMatcher.matching(); //  contains表示模糊匹配    exact精确匹配
                //.withMatcher("name", ExampleMatcher.GenericPropertyMatchers.contains())
                ///.withMatcher("age", ExampleMatcher.GenericPropertyMatchers.exact());
        String name = "a";
        /*if(StringUtils.isNotEmpty(name)){
            matcher.withMatcher("name", ExampleMatcher.GenericPropertyMatchers.contains()).withIgnoreCase(true);
        }*/
        if(StringUtils.isNotEmpty(name)){
            matcher.withMatcher("name", ExampleMatcher.GenericPropertyMatchers.contains()).withIgnoreCase(true);
        }
        Teacher teacher = new Teacher();
        //teacher.setName("a");
        teacher.setAge(8);

        Example<Teacher> example = Example.of(teacher,matcher);
        return teacherDao.findAll(example);
    }

    //条件模糊查询
    List<Teacher> findAllByLikeQuery(){
        Teacher teacher = new Teacher();
        teacher.setName("a");
        ExampleMatcher matcher=ExampleMatcher.matching()
                .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING)//设置字符串模糊查询规则
                .withIgnoreCase(true);//设置忽略大小写
        Example<Teacher> example = Example.of(teacher,matcher);
        return teacherDao.findAll(example);
    }

    //条件完全匹配查询
    List<Teacher> findAllByEequals(){
        Teacher teacher = new Teacher();
        teacher.setAge(80);
        //ExampleMatcher matcher = ExampleMatcher.matching().withIgnorePaths("age");
        //Example<Teacher> example = Example.of(teacher, matcher);
        Example<Teacher> example = Example.of(teacher);
        return teacherDao.findAll(example);
    }

    //排序查询
    List<Teacher> findAllBySort(){
        Sort sort = Sort.by(Arrays.asList(
                new Sort.Order(Sort.Direction.DESC,"age"),
                new Sort.Order(Sort.Direction.ASC,"createDate")
        ));
        return teacherDao.findAll(sort);
    }


    //复杂查询
    @Autowired
    private MongoTemplate mongoTemplate;


    public Page<Teacher> findByPage(Integer pageNum, Integer pageSize, Date startTime, Date endTime, Teacher teacherQuery){

        Query query = new Query();

        //模糊查询
        if (StringUtils.isNotEmpty(teacherQuery.getName())) {
            query.addCriteria(Criteria.where("name").regex(Pattern.compile("^.*"+teacherQuery.getName()+".*$")));
        }
        // SQL: name not like '张%'
        //Criteria.where("name").regex(Pattern.compile("^张.*$"));
        // SQL: interest like '%球%'
        //Criteria.where("interest").regex(Pattern.compile("^.*球.*$"));
        // SQL: address not like '浙江%'
        //Criteria.where("address").not().regex(Pattern.compile("^.*浙江.*$"));

        //完全匹配查询
        if (StringUtils.isNotEmpty(teacherQuery.getId())) {
            query.addCriteria(Criteria.where("id").is(teacherQuery.getId()));
        }

        //数字范围查找 //gte大于等于  gt大于  lte小等于  lt小于
        if (teacherQuery.getAge() != null){
            query.addCriteria(Criteria.where("age").gte(teacherQuery.getAge()).lte(80));
        }

        //时间范围查找
        if (startTime != null && endTime != null){
            query.addCriteria(Criteria.where("createDate").gte(startTime).lte(endTime));
        } else if (startTime != null ){
            query.addCriteria(Criteria.where("createDate").gte(startTime));
        } else if (endTime != null ){
            query.addCriteria(Criteria.where("createDate").lte(endTime));
        }
        /*
        if (studentReqVO.getSex() != null){
            query.addCriteria(Criteria.where("sex").is(studentReqVO.getSex()));
        }
        if (studentReqVO.getCreateTime() != null){
            query.addCriteria(Criteria.where("createTime").lte(studentReqVO.getCreateTime()));
        }*/
        Long total = mongoTemplate.count(query,Teacher.class);

        Sort sort = new Sort(Sort.Direction.DESC,"createDate");
        Pageable pageable = new PageRequest(pageNum-1,pageSize,sort);
        List<Teacher> list = mongoTemplate.find(query.with(pageable),Teacher.class);


        Page<Teacher> page = PageInfo.makePage(pageNum, pageSize, total, list);

        return page;
    }

}

11.TeacherDao

package com.dev.dao;

import com.dev.model.Teacher;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.repository.MongoRepository;

public interface TeacherDao extends MongoRepository<Teacher,String> {

}

有时间就总结一点点。。。。。。。。

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-06-14 15:54:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-14 15:54:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-14 15:54:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-14 15:54:01       20 阅读

热门阅读

  1. vue实现类似微信按住发送语音给后端

    2024-06-14 15:54:01       7 阅读
  2. 刻意练习:成为领域专家的秘诀

    2024-06-14 15:54:01       6 阅读
  3. 事件委托是什么

    2024-06-14 15:54:01       7 阅读
  4. Vue前端服务是什么:深入解析与实际应用

    2024-06-14 15:54:01       9 阅读
  5. canvas实现给照片添加水印

    2024-06-14 15:54:01       8 阅读
  6. 后端主流框架--Spring02

    2024-06-14 15:54:01       6 阅读
  7. Web前端开发必备:三大主流框架详细解析

    2024-06-14 15:54:01       9 阅读