springboot整合mongodb操作工具类仿mybatis-plus风格(代码片段)

李泰山 李泰山     2022-12-03     556

关键词:

以下是仿照mybatis-plus风格操作 mongodb 的增删改查的工具类以及使用示例 

pom文件引入依赖

        <!-- mongodb -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
         <version> 1.2.70</version>
    </dependency>
        <!-- mybatis-plus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.2</version>
        </dependency>
MongoDBUtil 工具类代码


import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import com.mongodb.client.result.UpdateResult;
import org.springblade.core.tool.utils.SpringUtil;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.*;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;

import java.io.Serializable;
import java.lang.reflect.Field;
import java.util.Collection;
import java.util.List;
import java.util.Map;

public class MongoDBUtil 

    private static final Query EMPTY_QUERY = new BasicQuery("");
    private static final MongoTemplate template;

    static 
        template = SpringUtil.getBean(MongoTemplate.class);
    

    private static Query idEqQuery(Serializable id) 
        Criteria criteria = Criteria.where("id").is(id);
        return Query.query(criteria);
    

    private static Query idInQuery(Collection<? extends Serializable> idList) 
        Criteria criteria = Criteria.where("id").in(idList);
        return Query.query(criteria);
    

    private static Query eqQuery(Map<String, Object> data) 
        if (CollectionUtils.isEmpty(data)) 
            return EMPTY_QUERY;
         else 
            Criteria criteria = new Criteria();
            data.forEach((k, v) -> criteria.and(k).is(v));
            return Query.query(criteria);
        
    

    private static <T> Serializable getIdValue(T entity) 
        try 
            Field field = entity.getClass().getDeclaredField("id");
            field.setAccessible(true);
            return (Serializable) field.get(entity);
         catch (NoSuchFieldException | IllegalAccessException e) 
            e.printStackTrace();
        
        return null;
    

    private static <T> Update getUpdate(T entity) 
        Field[] fields = entity.getClass().getDeclaredFields();
        for (Field field : fields) 
            field.setAccessible(true);
            try 
                System.out.println(field.getName()+" "+field.get(entity));
             catch (IllegalAccessException e) 
                e.printStackTrace();
            
        
        return null;
    

    public static <T> void save(T entity) 
        template.save(entity);
    

    public static <T> void saveBatch(Collection<T> entityList) 
        template.insertAll(entityList);
    

    public static void removeById(Serializable id, Class<?> clazz) 
        template.remove(idEqQuery(id), clazz);
    

    public static void removeByMap(Map<String, Object> columnMap, Class<?> clazz) 
        template.remove(eqQuery(columnMap), clazz);
    

    public static void removeByIds(Collection<? extends Serializable> idList, Class<?> clazz) 
        template.remove(idInQuery(idList), clazz);
    

    public static void remove(Query query, Class<?> clazz) 
        template.remove(query, clazz);
    

    public static <T> boolean updateById(T entity) 
        Assert.notNull(entity, "entity must not be null!");
        JSONObject obj = (JSONObject) JSONObject.toJSON(entity);
        DBObject update = new BasicDBObject();
        update.put("$set", obj);
        UpdateResult result = template.updateFirst(idEqQuery(getIdValue(entity)), new BasicUpdate(update.toString()), entity.getClass());
        return result.getModifiedCount() == 1L;
    

    public static <T> void updateBatchById(Collection<T> entityList) 
        entityList.forEach(e -> updateById(e));
    

    public static void update(Query query, Update update, Class<?> clazz) 
        template.updateMulti(query, update, clazz);
    

    public static <T> void saveOrUpdate(T entity) 
        Assert.notNull(entity, "entity must not be null!");
        String key = JSONObject.toJSONString(entity);
        Update inc = new Update().inc(key, 1);
        template.upsert(idEqQuery(getIdValue(entity)), inc, entity.getClass());
    

    public static <T> void saveOrUpdateBatch(Collection<T> entityList) 
        entityList.forEach(MongoDBUtil::saveOrUpdate);
    

    public static <T> T getById(Serializable id, Class<T> clazz) 
        return template.findById(id, clazz);
    

    public static <T> T getOne(Query query, Class<T> clazz) 
        return template.findOne(query, clazz);
    

    public static <T> List<T> listByIds(Collection<? extends Serializable> idList, Class<T> clazz) 
        return template.find(idInQuery(idList), clazz);
    

    public static <T> List<T> listByMap(Map<String, Object> columnMap, Class<T> clazz) 
        return template.find(eqQuery(columnMap), clazz);
    

    public static <T> List<T> list(Class<T> clazz) 
        return template.findAll(clazz);
    

    public static <T> List<T> list(Query query, Class<T> clazz) 
        return template.find(query, clazz);
    

    public static <T> long count(Class<T> clazz) 
        return template.count(EMPTY_QUERY, clazz);
    

    public static <T> long count(Query query, Class<T> clazz) 
        return template.count(query, clazz);
    

    public static <T> IPage<T> page(IPage page, Class<T> clazz) 
        page.setTotal(count(clazz));
        Pageable pageable = PageRequest.of((int) (page.getCurrent()+1), (int) page.getSize());
        List<T> records = template.find(new Query().with(new Sort(Sort.Direction.DESC, "id")).with(pageable), clazz);
        page.setPages(page.getPages());
        page.setRecords(records);
        return page;
    

    public static <T> IPage<T> page(IPage page, Query query, Class<T> clazz) 
        page.setTotal(count(query, clazz));
        Pageable pageable = PageRequest.of((int) (page.getCurrent()+1), (int) page.getSize());
        List<T> records = template.find(query.with(pageable), clazz);
        page.setPages(page.getPages());
        page.setRecords(records);
        return page;
    


测试用例代码


import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.secure.annotation.NoToken;
import org.springblade.core.tool.api.R;
import org.springblade.workface.modules.automate.Inertialnavigation.entity.InertialNavigation;
import org.springblade.workface.util.MongoDBUtil;
import org.springframework.web.bind.annotation.*;

import java.util.List;


@RestController
@AllArgsConstructor
@RequestMapping("inertialNavigation")
@Api(value = "惯导数据mongo测试", tags = "惯导数据mongo测试")
@NoToken
public class InertialNavigationController 

    @PostMapping("/save")
    @ApiOperation(value = "新增")
    private R<Boolean> save(@RequestBody InertialNavigation dto)
        MongoDBUtil.save(dto);
       return R.status(true);
    

    @PostMapping("/update")
    @ApiOperation(value = "修改")
    private R<Boolean> update(@RequestBody InertialNavigation dto)
        return R.status(MongoDBUtil.updateById(dto));
    

    @PostMapping("/remove")
    @ApiOperation(value = "删除")
    private R<Boolean> remove(@RequestBody List<Long> ids)
        MongoDBUtil.removeByIds(ids,InertialNavigation.class);
        return R.status(true);
    

    @PostMapping("/list")
    @ApiOperation(value = "查询")
    private R<List<InertialNavigation>> list()
        return R.data(MongoDBUtil.list(InertialNavigation.class));
    

    @GetMapping("/get/id")
    @ApiOperation(value = "详情")
    private R<InertialNavigation> get(@PathVariable("id") Long id)
        return R.data(MongoDBUtil.getById(id, InertialNavigation.class));
    


    @PostMapping("/page")
    @ApiOperation(value = "分页")
    private R<IPage<InertialNavigation>> page(@RequestBody Query query)
        return  R.data(MongoDBUtil.page(Condition.getPage(query),InertialNavigation.class));
    




InertialNavigation 代码

import lombok.Data;

import java.math.BigDecimal;
import java.util.Date;

@Data
public class InertialNavigation 
    private Long id;
    /** 支架数量 */
    private Integer zjsl;

    private Integer receivedFrame;
    private Integer sentFrame;
    private String zjh;
    /** 采煤机当前所在液压支架号 */
    private String zgbh;
    private BigDecimal speedResource;
    private Integer pingFlag;
    private String workTime;
    private Date startDate;
    private Integer direction;

    private InertialNavigationData newestResource;




InertialNavigationData 代码

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.math.BigDecimal;
import java.util.Date;


/**
 *  惯导数据实体类
 *
 * @version 1.0
 * @since JDK1.8
 * @author tarzan
 * @date 2022年01月29日 14:42:04
 */
@Data
public class InertialNavigationData 

    /** 主键 */
    private Long id;

    /** 惯导id */
    private Long InertialNavigationId;
    /** 基准x坐标 */
    private BigDecimal baseX;
    /** 基准y坐标 */
    private BigDecimal baseY;
    /** 基准z坐标 */
    private BigDecimal baseZ;
    /** x坐标 */
    private BigDecimal x;
    /** y坐标 */
    private BigDecimal y;
    /** z坐标 */
    private BigDecimal z;
    /** 计算x坐标 */
    private BigDecimal computeX;
    /** 计算y坐标 */
    private BigDecimal computeY;
    /** 计算z坐标 */
    private BigDecimal computeZ;
    private String guandaoType;
    private String guandaoTypeName;
    private String guandaoStatus;
    private String guandaoStatusName;
    private String gpsEnable;
    private String totalIndex;
    private BigDecimal fuyang;
    private BigDecimal henggong;
    private BigDecimal hangxiang;
    private String lcjs;
    /** 时间 */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createDate;
    /** 时间 */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateDate;


springboot整合mongodb教程(代码片段)

前言本文介绍如何使用SpringBoot整合MongoDB数据库,然后使用小Demo演示Java代码对MongoDB进行操作。环境与配置Maven依赖:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter 查看详情

springboot整合mongodb实现批量更新数据

现需求:需要批量将1000个数据先查询在更新到mongodb(如果查询不到数据,则添加数据)1:工具类BathUpdateOptions1importorg.springframework.data.mongodb.core.query.Query;2importorg.springframework.data.mongodb.core.query.Update;34publicclassBath 查看详情

springboot整合mongodb连接池配置详解(代码片段)

...aven1.2Gradle二、配置文件三、MongoConfig配置类四、总结前言SpringBoot为方便整合MongoDB,提供了相应的启动器,即spring-boot-starter-data-mongodb。然后我们就可以用它提供的MongoTemplate类来操作数据库了。当然,SpringBoot也提供了... 查看详情

springboot整合mongodb实战

参考技术AMongoTemplate配置一般情况下,按照如下配置,springboot会进行自动装配,但是如果需要实现一些自定义的功能,例如密码加解密,类型转换等功能需要手写配置MongoTemplate。@EnableMongoRepositories()表示支持SpringJPA,即通过规范... 查看详情

redis05_springboot整合redisredistemplate操作各个基本类型工具类的抽取(代码片段)

文章目录①.SPRINGBOOT整合REDIS②.redisTemplate操作String类型③.redisTemplate操作list类型④.redisTemplate操作hash类型⑤.redisTemplate操作Set类型⑥.redisTemplate操作zSet类型⑦.redisTemplate其他操作⑧.关于工具类的抽取①.SPRINGBOOT整合REDIS①.引入data-... 查看详情

springboot整合mongodb及简单的操作(代码片段)

一,环境搭建1)引入依赖<parent><artifactId>spring-boot-parent</artifactId><groupId>org.springframework.boot</groupId><version>2.3.7.RELEASE</version></parent><dependencies><dependency><groupId>org.springframework.... 查看详情

springboot整合mongodb复杂查询和分页查询

参考技术A需要用到BulkOperations,参考官方文档https://docs.mongodb.com/manual/core/bulk-write-operations/备注:BulkOperations.BulkMode.UNORDERED和BulkOperations.BulkMode.ORDERED的区别:UNORDERED是平行处理,即使某条记录出错了,其余的也会继续处理;ORDERE... 查看详情

[java基础篇]springboot整合mongodb

[Java基础篇]SpringBoot整合MongoDB✨博主介绍前言MongoDBCAP定理(CAPtheorem)NoSQL的优点/缺点NoSQL数据库分类MongoDB整合SpringBoot在pom.xml添加坐标添加MyUser实体类MongoDB常用方法MongoDB添加方法MongoDB查询方法💫点击直接资料领取&#... 查看详情

springboot整合mongodb(代码片段)

SpringBoot整合MongoDB一、创建项目,选择依赖二、引入相关依赖三、如果是第一次使用MongoDB,首先先创建用户定义核心配置文件五、创建实体类创建dao层,这里的dao层有两种写法MongoTemplate基本使用一、普通查询操作Crite... 查看详情

springboot整合mongodb

...自己大概整理了下,项目中的相关配置就不叙述了,由于springboot的快捷开发方式,所以springboot项目中要使用Mongodb,只需要添加依赖和配置application.properties文件即可。整和方式一共有两种,一种是JPA的快捷方式,还有一种是实... 查看详情

springboot整合mongodb

参考博客:https://www.cnblogs.com/ityouknow/p/6828919.html,https://blog.csdn.net/stronglyh/article/details/81024588MongoDB简介MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是可以应用于各种规模的企业、各个行业以及各类应用程序的开源数... 查看详情

springboot整合mongodb(单机)

依赖:<!--https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-mongodb--><dependency><groupId>org.springframework.boot</groupId><artifactId>s 查看详情

企业级springboot教程springboot整合mongodb

准备工作安装MongoDBjdk1.8maven3.0idea环境依赖在pom文件引入spring-boot-starter-data-mongodb依赖:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongod 查看详情

springboot2系列教程(十八)|整合mongodb

...,请后台留言,反正我也不会听。前言如题,今天介绍下SpringBoot是如何整合MongoDB的。MongoDB简介MongoDB是由C++编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,它将数据存储为一个文档,数据结构由键值(key=... 查看详情

springboot学习笔记-3整合redis&mongodb

一.整合redis1.1建立实体类@Entity@Table(name="user")publicclassUserimplementsSerializable{@Id@GeneratedValue(strategy=GenerationType.AUTO)privateLongid;privateStringname;@DateTimeFormat(pattern="yyyy-MM-ddHH:m 查看详情

springboot整合mongodb(实现一个简单缓存)(代码片段)

...预备工作缓存查询缓存更新、删除缓存更新缓存删除前言SpringBoot是常用开发框架,而MongoDB也是最近越来越火的非关系型数据库,这里使用SpringBoot+MongoDB实现一个小案例,当然MongoDB实际做缓存的可能不多,但是... 查看详情

springboot整合mongodb的连接用户名和密码问题

1.这是mongodb没有设置用户名和密码的配置  test是数据名spring:data:mongodb:uri:mongodb://localhost:27017/test  2.这是mongodb设置了用户名和密码的配置  test是数据名在mongodb的test数据库创建用户和密码use testdb.createUser( ... 查看详情

mongodb与springboot整合(支持事务)(代码片段)

1.创建SpringBoot工程,选择Web、MonogDB依赖,pom如下:<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.4.RELEASE& 查看详情