Springboot 整合mongodb 操作工具类仿mybatis

阅读: 评论:0

Springboot 整合mongodb 操作工具类仿mybatis

Springboot 整合mongodb 操作工具类仿mybatis

前言

为了简化java代码操作mongodb 数据库库,仿mybatis-plus风格封装了mongodb 工具类。

教程

以下是仿照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 adata.IPage;
db.BasicDBObject;
db.DBObject;
sult.UpdateResult;
import ool.utils.SpringUtil;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.db.core.MongoTemplate;
import org.db.core.query.*;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;import java.io.Serializable;
import flect.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 = Bean(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 = Class().getDeclaredField("id");field.setAccessible(true);return (Serializable) (entity);} catch (NoSuchFieldException | IllegalAccessException e) {e.printStackTrace();}return null;}private static <T> Update getUpdate(T entity) {Field[] fields = Class().getDeclaredFields();for (Field field : fields) {field.setAccessible(true);try {System.out.Name()+" "&#(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) {ve(idEqQuery(id), clazz);}public static void removeByMap(Map<String, Object> columnMap, Class<?> clazz) {ve(eqQuery(columnMap), clazz);}public static void removeByIds(Collection<? extends Serializable> idList, Class<?> clazz) {ve(idInQuery(idList), clazz);}public static void remove(Query query, Class<?> clazz) {ve(query, clazz);}public static <T> boolean updateById(T entity) {Null(entity, "entity must not be null!");JSONObject obj = (JSONObject) JSON(entity);DBObject update = new BasicDBObject();update.put("$set", obj);UpdateResult result = template.updateFirst(idEqQuery(getIdValue(entity)), new String()), Class());ModifiedCount() == 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) {Null(entity, "entity must not be null!");String key = JSONString(entity);Update inc = new Update().inc(key, 1);template.upsert(idEqQuery(getIdValue(entity)), inc, Class());}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) {unt(EMPTY_QUERY, clazz);}public static <T> long count(Query query, Class<T> clazz) {unt(query, clazz);}public static <T> IPage<T> page(IPage page, Class<T> clazz) {page.setTotal(count(clazz));Pageable pageable = PageRequest.of((int) (Current()+1), (int) Size());List<T> records = template.find(new Query().with(new Sort(Sort.Direction.DESC, "id")).with(pageable), clazz);page.Pages());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) (Current()+1), (int) Size());List<T> records = template.find(query.with(pageable), clazz);page.Pages());page.setRecords(records);return page;}}

测试用例代码


import adata.IPage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import p.support.Condition;
import p.support.Query;
import secure.annotation.NoToken;
import ool.api.R;
import org.dules.ity.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){veByIds(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.ById(id, InertialNavigation.class));}@PostMapping("/page")@ApiOperation(value = "分页")private R<IPage<InertialNavigation>> page(@RequestBody Query query){return  R.data(MongoDBUtil.Page(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;}

相关知识

MongoDB

MongoDB是一种开源的、面向文档的NoSQL数据库管理系统,它使用了由键值对组成的BSON(Binary JSON)格式来存储数据。MongoDB以其灵活性、可伸缩性和容错特性而闻名于世。

1. 数据模型: MongoDB采用文档数据库模型,即将数据存储在一个称为文档的结构化记录中。文档可以是JSON、BSON等格式,不需要遵循固定的模式,这使得MongoDB非常适合处理半结构化和多变的数据。文档的字段可以包含子文档、数组和其他复杂类型。

2. 查询语言和索引: MongoDB提供了强大的查询语言,支持各种操作符和函数,可以进行复杂的查询和聚合操作。同时,MongoDB内置了多种类型的索引(例如B树索引、地理空间索引等),以加快查询速度并优化性能。

3. 可扩展性和分布式架构: MongoDB具有良好的可扩展性,可以轻松地通过添加更多的节点来实现集群化,并自动分布数据到各个节点上。通过在多个节点上进行数据复制,还可以提高系统的可靠性和容错性。

4. 高性能: MongoDB支持以写入驱动和读取驱动的方式进行数据访问,可以根据应用程序的需求选择合适的读写策略。在写入方面,MongoDB支持快速的批量写操作,可以将大量的文档一次性插入或更新到数据库中。在读取方面,MongoDB的查询引擎使用了各种优化技术(如索引和查询计划优化),以提供高效的查询性能。

5. 安全性: MongoDB提供了多种安全机制来保护数据库的数据和访问权限。可以通过身份验证、访问控制、加密传输等方式来确保数据的机密性和完整性。此外,MongoDB还支持审计功能,记录所有与数据库相关的操作和事件。

6. 社区和生态系统: MongoDB拥有一个活跃的开源社区,提供了丰富的工具和第三方库,以及大量的文档和教程。这使得开发人员能够更轻松地学¥和使用MongoDB,并解决遇到的问题。

总结起来,MongoDB是一款适用于处理半结构化和多变的数据的强大数据库管理系统。它具有灵活性、可伸缩性、强大的查询语言和索引、高性能、安全性以及活跃的社区支持等特点,广泛应用于Web应用程序、大数据分析、实时分析等场景中。

spring-boot-starter-data-mongodb

spring-boot-starter-data-mongodb是Spring Boot提供的用于集成MongoDB数据库的起步依赖。它简化了在Spring Boot应用程序中使用MongoDB的配置和操作,提供了一系列预配置的类和方法,使得开发人员可以更轻松地进行MongoDB的数据访问和操作。以下是关于spring-boot-starter-data-mongodb的详细解释:

  1. 配置简化:spring-boot-starter-data-mongodb通过自动配置功能,减少了手动配置的工作量。只需在application.properties或l文件中添加相应的配置属性,即可完成与MongoDB的连接。

  2. MongoDB模板(MongoTemplate):该起步依赖提供了MongoTemplate类,用于执行各种MongoDB操作,如插入文档、更新文档、查询文档等。MongoTemplate封装了MongoDB原生驱动的操作,使得操作更加简洁和方便。

  3. Repository支持:spring-boot-starter-data-mongodb还集成了Spring Data MongoDB,可以通过接口方式定义Repository,并自动生成对应的实现类。这样,开发人员只需编写Repository接口,无需编写实现逻辑即可完成基本的CRUD操作。

  4. 实体映射:支持使用注解将Java实体类映射到MongoDB中的文档(Document),简化了实体与文档之间的转换和操作过程。

  5. 插件扩展:spring-boot-starter-data-mongodb为MongoDB提供了丰富的插件扩展机制,可以根据需要添加和使用各种插件,如查询注解、聚合操作等。

  6. 数据验证和转换:该起步依赖支持数据验证和转换功能,可以通过注解方式定义字段级别的验证规则,并提供了一系列内置的数据转换器,用于在文档和实体之间进行数据转换。

总结:

spring-boot-starter-data-mongodb是Spring Boot提供的用于集成MongoDB数据库的起步依赖。它使得在Spring Boot应用程序中使用MongoDB变得更加简单和高效,提供了预配置的类和方法,简化了MongoDB的数据访问和操作。通过学习和掌握spring-boot-starter-data-mongodb的特性和用法,开发人员可以更好地利用Spring Boot和MongoDB构建强大的应用程序。然而,深入理解和熟练应用spring-boot-starter-data-mongodb还需要进一步的学习和实践,请根据实际需求和情况不断探索和扩展您对其的认识和应用能力。

本文发布于:2024-01-29 18:57:07,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170652582917566.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:操作   工具   Springboot   mongodb   mybatis
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23