说明: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: testpassword: 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的一些基本的内容,比如扫描的包等等*/@Beanpublic 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 {@Idprivate String id;private String name;private Integer age;@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")@Fieldprivate 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 {@Autowiredprivate 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 {@Autowiredprivate TeacherDao teacherDao;@Overridepublic Teacher get(String id) {Object o = teacherDao.findById(id);return teacherDao.findById(id).get();}@Overridepublic void add(Teacher t) {t.setId(UUID.randomUUID().toString().replace("-",""));t.setCreateDate(new Date());teacherDao.insert(t);}@Overridepublic 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);}//简单查询@Overridepublic 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);}//复杂查询@Autowiredprivate 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> {}
有时间就总结一点点。。。。。。。。