mongoHelper

spring-data-mongodb 增强工具包
授权协议 Apache
开发语言 Java
所属分类 数据库相关、 数据库调整和优化
软件类型 开源软件
地区 国产
投 递 者 邵和硕
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

spring-data-mongodb 增强工具包,简化 CRUD 操作,提供类 jpa 的数据库操作。

传统关系型数据库及围绕它们构建的 orm 在项目开发中有很多难用的痛点,而 mongodb 这种文档性数据库的出现,完美地解决了 sql 数据库在项目开发中的诸多痛点,在 mongodb 4.0 以后支持了事务,已经可以完美地用于工程项目。spring-data-mongodb 已经对 mongodb 的操作做了一部分封装,但依然不够,Query Criteria Sort 的操作依然有比较大的局限性,而且对于习惯 sql 操作的人来说,理解其使用法则依然稍显别扭。

mongoHelper 对 spring-data-mongodb 又进行了进一步封装,使其更易于使用,并添加了很多易于项目管理的功能。

使用说明

1. 基本操作

本orm会在容器中注入一个对象MongoHelper,这个对象拥有诸多单表查询功能,如下

  • 按id删除:deleteById(String, Class<?>)
  • 按条件删除:deleteByQuery(Criteria, Class<?>)
  • 查询所有:findAll(Class)
  • 查询数量:findCount(Class<?>)
  • 根据id查询:findById(String, Class)
  • 根据条件查询:findListByQuery(Criteria, Class<?>)
  • 根据条件查询并分页:findPage(Criteria, Page, Class<?>)
  • 插入:insert(Object)
  • 插入或更新:insertOrUpdate(Object)
  • 根据id更新:updateById(Object)
  • 根据id更新全部字段:updateAllColumnById(Object)
  • 根据条件更新第一项:updateFirst(Criteria, Update, Class<?>)
  • 根据条件更新所有项:updateMulti(Criteria, Update, Class<?>)
  • 累加某一个字段的数量, 原子操作:addCountById(String id, String property, Long count, Class<?> clazz)

这个mongoHelper能够完成所有查询任务,插入和更新操作能够自动判断pojo的类型操作对应表,查询操作根据传入的Class进行对应表操作,本orm所有数据库操作都基于mongoHelper的功能,不用像mybatis一样,每个表都要建立一套Mapper,xml,Service,model,大大减少数据层的代码量。可以将mongoHelper直接注入到controller层,简单的操作直接调用mongoHelper进行操作,不需要调用service层。

而复杂的操作及事务处理需要service层,将mongoHelper注入service,并使用service层的@Transactional注解就能使用springBoot管理的事务功能。本orm能够自动判断当前数据库操作是否处于事务中,处于事务中的话,所有查询和插入操作都会使用primary库偏好。非事务的话,查询优先走SecondaryPreferred库偏好,这样能够充分利用mongodb集群的负载均衡能力,提高数据库性能。

2. 复杂查询功能

本orm的查询功能都在MongoHelper的findByQuery,findPage方法中,封装条件的对象使用spring-data-mongodb的Criteria或Query,spring-data-mongodb的查询对象Criteria封装比较死板且不宜用,不太适合像sql一样根据条件拼接,本orm提供了CriteriaAndWrapper与CriteriaOrWrapper。类似于sql中的and连接与or连接,能够组装为近似sql的查询条件。

// 根据输入条件进行查询
public List<User> search(String word, Integer type) {
	CriteriaAndWrapper criteriaAndWrapper = new CriteriaAndWrapper();

	if (StrUtil.isNotEmpty(word)) {
		criteriaAndWrapper.and(new CriteriaOrWrapper().like("name", word).like("phone", word));
	}
	if (type != null) {
		criteriaAndWrapper.eq("type", type);
	}
		
	List<User> userList = mongoHelper.findListByQuery(criteriaAndWrapper, User.class);

	return userList ;
}

以上代码组装了类似于select * from user where (name like '%xxx%' or phone like '%xxx%') and type = xxx的查询语句,简单易懂。当然如果习惯使用Criteria进行查询也可以直接使用Criteria。

3. 分页查询,

本orm提供一个Page类,包含count总记录数,limit每页记录数,curr起始页(从1开始),records结果列表四个属性,只要将包含curr和limit数据的Page对象传入findPage,即可查询出records,count的数据并自动返回到Page对象中。这里三个属性参考了layui的分页参数,可直接无缝对接layui的分页控件。

public Page search(Page page, String word, Integer type) {
        CriteriaAndWrapper criteriaAndWrapper = new CriteriaAndWrapper();

	if (StrUtil.isNotEmpty(word)) {
		criteriaAndWrapper.and(new CriteriaOrWrapper().like("name", word).like("phone", word));
	}
	if (type != null) {
		criteriaAndWrapper.eq("type", type);
	}
	Sort sort = Sort.by(Direction.DESC, "creatTime");	
	page = mongoHelper.findPage(criteriaAndWrapper, sort, page, User.class);

	return page;
}

4. 表映射对象

spring.data.mongodb.package所指向的包下,存放数据库表所对应的pojo类,项目启动时本orm会扫描该包下所有@Document注解的类并建立相应表、索引、字段默认值,这个@Document注解是spring-data-mongodb定义的,另外本项目新增了一个属性注解@InitValue,用于提供字段初始值,和mysql的默认值类似,注意mongodb本身字段是没有默认值的,这里是项目本身用代码实现默认值的功能。如要建立索引,使用@Indexed标记属性建立相应索引,也是spring-data-mongodb定义的。

@Document
public class User extends BaseModel {
	@InitValue("0")
	Integer type; // 类型 0客户 1经销商
	@Indexed
	String name;
	String phone;

        public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
        public Integer getType() {
		return type;
	}

	public void setType(Integer type) {
		this.type = type;
	}
}

另外本orm提供了一个基础model,包含id(用@Id注解),createTime,updateTime三个必备属性,createTime和updateTime在插入和更新时会自动填充时间戳,其他pojo类可继承此BaseModel,简化代码编写。

@Document
public class BaseModel implements Serializable{
	@Id
	String id;
	Long createTime;
	Long updateTime;
		
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public Long getCreateTime() {
		return createTime;
	}
	public void setCreateTime(Long createTime) {
		this.createTime = createTime;
	}
	public Long getUpdateTime() {
		return updateTime;
	}
	public void setUpdateTime(Long updateTime) {
		this.updateTime = updateTime;
	}
}

5.数据库导入导出工具

本orm提供一个数据库导入导出工具ImportExportUtil注入到容器中,拥有exportDb和importDb两个方法,可按照pojo类导入导出相应表结构和数据,可使用定时任务定期备份数据库。

6.打印查询语句

spring-data-mongodb默认的打印语句方式为修改配置文件logging.level.root: debug。但这里打印出来的语句基本不可读,也不能像sql一样直接复制出来到数据库中进行执行,处于集群模式下还每隔数秒发送一次检测当前数据库isMaster的命令,很干扰debug。本orm重写了查询语句的打印功能,只要配置spring.data.mongodb.print:true就能打印出如下的语句:

db.admin.find({
    "$and": [
        {
            "name": {
                "$regex": "^.*ad.*$",
                "$options": "i"
            }
        }
    ]
}).projection({
    "name": 1
}).sort({
    "id": -1
});

可直接复制到mongodb客户端中进行执行,非常方便调试。

  • public class MongoHelper { private static IMongoDatabase GetDb(string constr, string dbName) { var db = new MongoClient(constr).GetDatabase(dbName); return

  • 做项目时需要用到MongoDb,以下代码略做参考,转自:http://www.cnblogs.com/yanc/archive/2011/06/28/2091975.html 我只摘了一个方法,其他没有测试... using System; using System.Collections.Generic; using System.Linq; using System.Text; using M

  • using System; using System.Collections.Generic; using System.Text; using MongoDB.Driver; using MongoDB.Bson; using System.Configuration; namespace DBUtility { /// <summary> /// MongoDB 的数据库访问

  • using MongoDB.Bson; using MongoDB.Driver; using MongoDB.Driver.Builders; using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Text.RegularExpress

  • #!/usr/bin/env python3 # -*- coding: utf-8 -*- ''' Defines a MongoOperator class and allows you to manipulate the Mongodb Database.(insert, delete, update, select...) ''' from pymongo import MongoC

  • spring-data-mongodb 增强工具包,简化 CRUD 操作,提供类 jpa 的数据库操作。 传统关系型数据库及围绕它们构建的 orm 在项目开发中有很多难用的痛点,而 mongodb 这种文档性数据库的出现,完美地解决了 sql 数据库在项目开发中的诸多痛点,在 mongodb 4.0 以后支持了事务,已经可以完美地用于工程项目。spring-data-mongodb 已经对 mon

  • using System; using MongoDB.Bson; using MongoDB; using System.Web; using MongoDB.Driver; namespace YSF.ImageUtility { // //http://blog.csdn.net/dannywj1371/article/details/7440916 //https://github.co

  • ///* Mike Cheers */// ///* 2011-12-17 */// namespace MongoDBLib { using System; using MongoDB.Bson; using MongoDB.Driver; using MongoDB.Driver.Builders; using System.Collections;

  • MongoClientSettings mongoSettings = new MongoClientSettings(); TimeSpan t = new TimeSpan(100); mongoSettings.ConnectTimeout = t;//设置连接超时时长 mongoSettings.MaxConnectionPoolSize = 2000;//设置连接池最大连接数 Mongo

  •  添加引用:MongoDB.Driver using MongoDB.Bson; using MongoDB.Driver; using System; using System.Collections.Generic; using System.Configuration; using System.Linq; namespace YFMongoBD { public class Db

 相关资料
  • 铅笔工具已经过改进,便于更好地进行曲线拟合、路径自动关闭、绘制受控与不受控直线段。 铅笔工具 预设 双击“工具箱”中的“铅笔”工具图标,以打开“铅笔工具选项”对话框。“保真度”滑块具有四个预设可供选择。最左侧的滑块预设(精确)用于绘制最精确的路径。最右侧的滑块预设(平滑)用于创建最平滑的路径。选择最适合您绘图需要的预设。<b>(左图)</b> Illustrator CC (v17.x) <br/

  • “铅笔”工具已经恢复了 Illustrator 早期版本中的工具所具备的优良、精细的控制功能。 增强的“铅笔工具选项”对话框 增加了一个“保真度”预设 “保真度”滑块目前有 5 个预设。现在已增加了一个新的滑块预设(最准确的预设),可以帮助您绘制出最准确的可能路径。同时,这个新增加的预设已被添加到“平滑工具选项”对话框。 使用 Alt 键可以切换到平滑工具选项 选中此复选框后,使用“铅笔”工具或“

  • 主要内容:下载 RockMongo,安装 RockMongo,创建数据库,创建集合,创建文档,导出/导入数据RockMongo 是一个 MongoDB 管理工具,您可以使用它来管理 MongoDB 服务、数据库、集合、文档、索引等等。它为阅读、编写和创建文档提供了一种非常友好的方式,类似于使用 PHP 开发的 MySQL 管理工具 PHPMyAdmin。 下载 RockMongo 您可以从 https://gitee.com/mirrors/rockmongo 或 https://github.

  • 我正在逐个迭代字符串对象列表中的元素: 在这里,每次我调用list上的get()时,列表都会从其一端一直迭代到第i个元素——因此上面循环的复杂性是O(n^2)。 是a.)对于增强型for循环,与上面相同,还是b.)对于循环,将指针保持在最后一个指针所在的位置,因此下面循环的复杂性是O(n)? 如果上面的情况(b)——我想是这样的——在列表上使用迭代器有什么好处吗。这是简单的迭代--没有回头路 蒂亚

  • Spring Data MongoDB 可以提供 Java 开发人员在使用 MongoDB 时的效率。它使用了熟悉的 Spring 概念,例如用于核心 API 的模块类,轻量级仓库风格的数据访问。 Spring Data MongoDB 项目提供了集成 MongoDB 文档数据库。Spring Data MongoDB 的核心功能区是一个 POJO 中心模型,用于与 MongoDB DBColle

  • 现在我在增强现实中有一个需求,我假设检测活的对象(笔/标记),然后我播放一些交互内容。 朋友们,好心的建议我的SDK满足要求。 --穆拉利·克里希南

  • ZGC 或 Z 垃圾收集器是在 Java 11 中引入的,作为一种低延迟垃圾收集机制。ZGC 确保垃圾收集暂停时间不依赖于堆大小。无论堆大小是 2MB 还是 2GB,它都不会超过 10 毫秒。 但是 ZGC 在将未使用的堆内存返回给操作系统方面存在限制,例如 G1 和 Shenandoah 等其他 HotSpot VM GC。以下是使用 Java 13 完成的增强功能: ZGC 默认将未提交的内存