说明: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> {
}
有时间就总结一点点。。。。。。。。