springboot中Mongodb的封装使用(含基本的CRUD,条件查询,分页查询)

本文介绍了在SpringBoot项目中如何封装MongoDB操作,包括依赖引入、分页类定义、通用接口设计及实现,实现了基本的增删改查、条件查询和分页查询功能。通过实例展示了服务层的使用方法,提供了代码参考。
摘要由CSDN通过智能技术生成

前言

最近有项目需要用到mongodb,在经过突击学习后,基本了解Mongodb的API。
虽说springboot中有封装好的MongoTemplate、Query、Criteria等,但本着提高代码复用性、降低耦合原则,就想编写一个mongodb的工具类或是通用接口类。
本想偷懒,想直接通过百度解决mongodb工具类的问题,但都没有想要的。。。唉~~~
还是得自己造啊!完事后分享出来,供大家一起使用,望大佬在评论区,提供宝贵意见,小弟后续改进。

参考内容及目前进度

参考了mybatis-plus的设计理念,编写了一个通用接口类和一个通用实现类。
目前已完成基本的增删改查、条件查询、分页查询(由于时间和需求原因暂时未写模糊查询)

代码内容

话不多说,直接上代码。

依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
spring:
  data:
    mongodb:
    #验证用户数据库,未设置可忽略
      authentication-database: admin
      #使用的数据库名
      database: databaseName
      #mongodb地址,user和password对应用户数据库中的用户和密码,未设置可忽略,直接写ip:27017即可
      uri: mongodb://user:password@ip:27017

分页使用到的两个类

MyPage.java

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class MyPage implements Serializable {
   
	protected Integer pageNum;//当前页
	protected Integer pageSize;//页大小
}

MongoPage.java----是MyPage的子类

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class MongoPage<T> extends MyPage{
   
	private long total;//总记录数
	private List<T> list;//分页结果
	public MongoPage(Integer pageNum, Integer pageSize){
   
		this.pageNum=pageNum;
		this.pageSize=pageSize;
	}
	public void setMongoPage(long total,List<T> list){
   
		this.total=total;
		this.list=list;
	}
}

通用接口类

IMongoService.java 通用接口类–>后续需要添加或修改内容可在此添加

package edu.cn.service;


import edu.cn.vo.FuzzyPage;
import edu.cn.vo.MongoPage;
import edu.cn.vo.MyPage;

import java.io.Serializable;
import java.util.List;

/**
 * @author: 会飞的种花家
 * @date: 2021/5/29 21:21:08
 * @title mongodb服务接口类
 * @参数
 * @entity 实体对象
 * @collectionName 数据库中的集合名
 * @list   实体集合对象
 * @keys   键名数组
 * @values 键值数组
 * @fields 需要查询的列
 * @id     id值
 * @MyPage Page类,含有pageNum(当前页),pageSize(页大小)
 * @MongoPage MyPage的子类,多了total(总记录数)和list(实体集合)
 * @inputStr 模糊查询时输入的字符串
 */
public interface IMongoService<T> {
   

	/**
	 * 增
	 */
	boolean save(T entity);
	boolean save(T entity,String collectionName);
	boolean saveList(List<T> list);
	boolean saveList(List<T> list,String collectionName);

	/**
	 * 删
	 */
	boolean removeById(T entity);
	boolean removeById(T entity,String collectionName);
	/**
	 * 改,都是通过id
	 * @param keys 要修改的键名
	 * @param values 要修改的键值
	 * 相当于mysql中  update key1,key2,key3 set value1,value2,value3 where id=#{id} from collectionName
	 */
	boolean updateById(String[] keys,Object[] values,Serializable id,Class<?> clazz);
	boolean updateById(String[] keys,Object[] values,Serializable id,String collectionName);
	boolean updateById(String[] keys,Object[] values,Serializable id,Class<?> clazz,String collectionName);

	/**
	 * 查
	 * @finById 就是根据id查询单条记录
	 * @findByMap 相当于条件查询,查询出符合条件的所有内容
	 * @findAll 查询表中所有记录
	 * @fields 表示需要查询的字段---参考mysql中 select key1,key2,key3 from collectionName
	 */
	T findById(Serializable id,Class<?> clazz);
	T findById(Serializable id,Class<?> clazz,String collectionName);
	T findById(Serializable id,String[] fields,Class<?> clazz);
	T findById(Serializable id,String[] fields,Class<?> clazz,String collectionName);
	List<T> findByMap(String[] keys,Object[] values,Class<?> clazz);
	List<T> findByMap(String[] keys,Object[] values,Class<?> clazz,String collectionName);
	List<T> findByMap(String[] keys,Object[] values,String[] fields,Class<?> clazz);
	List<T> findByMap(String[] keys,Object[] values,String[] fields,Class<?> clazz,String collectionName);
    List<T> findAll(Class<?> clazz);
	List<T> findAll(Class<?> clazz,String collectionName);
	List<T> findAll(String[] fields,Class<?> clazz);
	List<T> findAll(String[] fields,Class<?> clazz,String collectionName);
	/**
	 * 分页---无总记录数,只查一次
	 */
	List<T> page(MyPage myPage, Class<?> clazz);
	List<T> page(MyPage myPage, Class<?> clazz,String collectionName);
	List<T> page(MyPage myPage, String[] fields,Class<?> clazz);
	List<T> page(MyPage myPage, String[] fields,Class<?> clazz,String collectionName);
	/**
	 * 分页--有总记录数,查两次
	 */
	MongoPage page(MongoPage mongoPage, Class<?> clazz);
	MongoPage page(MongoPage mongoPage, Class<?> clazz,String collectionName);
	MongoPage page(MongoPage mongoPage,String[] fields,Class<?> clazz);
	MongoPage page(MongoPage mongoPage,String[] fields, Class<?> clazz,String collectionName);


	/**
	 * 模糊查询---分页
	 */
	List<T> fuzzyPage(MyPage myPage,Class<?> clazz,String inputStr,String[] keys);
	List<T> fuzzyPage(MyPage myPage,Class<?> clazz,String collectionName,String inputStr,String[] keys);
	List<T> fuzzyPage(MyPage myPage,Class<?> clazz, String inputStr,String[] keys,String[] fields);
	List<T> fuzzyPage(MyPage myPage,Class<?> clazz,String collectionName,String inputStr,String[] keys, String[] fields);

	/**
	 * 模糊查询---分页--有总记录数,查两次
	 */
	MongoPage fuzzyPage(FuzzyPage fuzzyPage, Class<?> clazz, String[] keys);
	MongoPage fuzzyPage(FuzzyPage fuzzyPage, Class<?> clazz,String collectionName,String[] keys);
	MongoPage fuzzyPage(FuzzyPage fuzzyPage,Class<?> clazz,String[] keys,String[] fields);
	MongoPage fuzzyPage(FuzzyPage fuzzyPage, Class<?> clazz,String collectionName,String[] keys,String[] fields);
}

通用接口实现类

IMongoServiceImpl.java —>IMongoService的实现类

package edu.cn.service.impl;

import edu.cn.definite.MongoMethod;
import edu.cn.service.IMongoService;
import edu.cn.vo.FuzzyPage;
import edu.cn.vo.MongoPage;
import edu.cn.vo.MyPage;
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.Field;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;

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

@Service
public class IMongoServiceImpl<T> implements IMongoService<T> {
   
	@Autowired
	private MongoTemplate mongoTemplate;

	@Override
	public boolean save(T entity) {
   
		try{
   
			mongoTemplate.save(entity);
			mongoLogByConsole(MongoMethod.INSERT,entity.toString());
			return true;
		}catch (Exception e){
   
			e.printStackTrace();
			return false;
		}
	}

	@Override
	public boolean save(T entity, String collectionName) {
   
		try{
   
			mongoTemplate.save(entity,collectionName);
			mongoLogByConsole(MongoMethod.INSERT,entity.toString());
			return true;
		}catch (Exception e){
   
			e.printStackTrace();
			return false;
		}
	}

	@Override
	public boolean saveList(List<T> list) {
   
		try{
   
			mongoTemplate.insertAll(list);
			mongoLogByConsole(MongoMethod.INSERT,list.toString());
			return true;
		}catch (Exception e){
   
			e.printStackTrace();
			return false;
		}
	}

	@Override
	public boolean saveList(List<T> list, String collectionName) {
   
		try{
   
			mongoTemplate.insert(list,collectionName);
			mongoLogByConsole(MongoMethod.INSERT,list.toString());
			return true;
		}catch (Exception e){
   
			e.printStackTrace();
			return false;
		}
	}

	@Override
	public boolean removeById(T entity) {
   
		try{
   
			mongoTemplate.remove(entity);
			mongoLogByConsole(Mon
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值