首先spring自带了mongodb的orm,spring data mongodb,但是这个框架非常难用,最令人抓狂的是每个文档都要带一个 _class 字段,因为这个是string的,所以占用不少空间,而且去除也比较麻烦。

在这里我推荐一下基于MongoDB官方提供的orm的轻量级封装的 zfoo orm 框架,只对官方提供的进行了简单的封装,还做了一些官方不支持的语法校验。

zfoo orm 开源地址

Ⅰ. 简介

  • 基于MongoDB的orm框架,提供POJO对象和MongoDB数据库之间的映射
  • zfoo&java&netty&mongodb&vue高性能学习交流群:876280300

Ⅱ. 注意事项

  • POJO对象的属性必须提供get和set方法,否则无法映射
  • 不支持泛型
  • 如果不想映射某属性,直接加上transient关键字
  • 目前支持基本数据属性(byte,short,int,long,float,double,boolean),字符串String,List,Set集合属性的映射,不支持Map
  • 数据库主键能用整数尽量用整数,因为MongoDB默认的主键是一个字符串,比较占空间
  • 数据库使用自研的orm框架,比如一个实体类UserEntity,映射到数据库中的集合为user,首字母小写,去掉Entity
  • 基于 caffeine 的高性能数据缓存
  • 语法校验,如对没有加上get和set的字段自动语法提示

Ⅲ. 使用方法

1. IAccessor接口,为数据访问接口

  • 插入数据到数据库,会以对象的id()方法的返回值作为主键
OrmContext.getAccessor().insert(obj)
  • 删除数据库中的数据,会以对象的id()方法的返回值作为查找关键字,删除以这个id()为主键的数据
OrmContext.getAccessor().delete(obj);
  • 修改数据库中的数据
OrmContext.getAccessor().update(obj);

2. IQuery接口,为数据复杂查询接口

3. 缓存使用方法

  • 例如有下列配置
<orm:config id="config" entity-package="com.zfoo.orm.**.entity"><orm:host database="test" user="" password=""><orm:address name="server0" url="127.0.0.1:27017"/></orm:host><!-- 缓存策略 --><orm:caches><orm:cache strategy="ten" size="10" expire-millisecond="600000"/><orm:cache strategy="hundred" size="100" expire-millisecond="600000"/><orm:cache strategy="thousand" size="1000" expire-millisecond="600000"/><orm:cache strategy="threeThousand" size="3000" expire-millisecond="600000"/><orm:cache strategy="tenThousand" size="10000" expire-millisecond="600000"/></orm:caches><!-- 持久化策略 --><orm:persisters><orm:persister strategy="cronDefault" type="cron" config="0,30 * * * * ?"/><orm:persister strategy="cron3s" type="cron" config="0/3 * * * * ?"/><orm:persister strategy="cron15s" type="cron" config="0/15 * * * * ?"/><orm:persister strategy="cron30s" type="cron" config="0/30 * * * * ?"/><orm:persister strategy="cron1m" type="cron" config="0 0/30 * * * ?"/><orm:persister strategy="time30s" type="time" config="30000"/></orm:persisters>
</orm:config>
  • 有下列注解
@EntityCaches(cacheStrategy = "tenThousand", persister = @Persister("time30s"))
public class UserEntity implements IEntity<Long> {
}
  • database表示操作哪个数据库
  • address表示数据库的地址,支持分片的配置
  • caches中的strategy表示一个缓存的策略,即将数据库中的数据先读入Orm中的EntityCaches缓存,如hundred这个策略表示,缓存数据库中1000条数据,10分钟过期
  • persisters中的strategy表示一个持久化的策略,如3s这个策略表示,将EntityCaches中的缓存数据每3s写入到数据库中一次,即使中途宕机,也只损失3秒的数据
  • EntityCaches这个注解表示将会被Orm管理,使用hundred策略,缓存的持久化策略为3s

Ⅳ. 教程

  • test下中包含了所有增删改查的教程,运行之前请先安装MongoDB

MongoDB的orm框架相关推荐

  1. Morphia - mongodb之ORM框架

    一.简介 二.注解 1.@Entity 2.@Id 3.@Indexed 4.@Embedded 5.@Transient和@Property 6.@Reference 三.示例 四.参考资料 Mor ...

  2. mongodb orm java_基于Java的ORM框架 Mongodb-ORM

    软件介绍 mongodb-orm简介Mongodb ORM是基于java的ORM框架,简化了SDK的使用,使代码变得更清晰.简单. 与Ibatis类似,将查询.执行语句封装在xml中,与代码隔离.简称 ...

  3. 为什么需要ORM 框架

    通过上面的操作,其实我们已经了解ORM 框架的基本实现原理.ORM 是指对象关系映射(Object Relation Mapping),映射的不仅仅只是对象值,还有对象与对象之间的关系.例如一对多.多 ...

  4. mongoose-面向对象操作mongodb的Nodejs框架

    介绍 无论是mysql还是mongodb,传统的与数据库交互的方式都是按照他们提供的API来写代码.它们提供的API往往不是很容易理解,而且难以记忆,如果传错了参数,写错一个符号都要查文档. ORM( ...

  5. 轻量级ORM框架 Bankinate

    [前言] 前面讲过ORM的前世今生,对ORM框架不了解的朋友可以参考博文:https://www.cnblogs.com/7tiny/p/9551754.html 今天,我们主要通过设计一款轻量级的O ...

  6. PetaPoco - 轻量级高性能的ORM框架(支持.NET Core)

    我们都知道ORM全称叫做Object Relationship Mapper,也就是可以用object来map我们的db. 而且市面上的orm框架有很多,有重量级的Entity Framework,有 ...

  7. python数据库框架_Python数据库及ORM框架对比选择

    使用Python进行MySQL的库主要有三个: Python-MySQL(更熟悉的名字可能是MySQLdb), PyMySQL SQLAlchemy. Python-MySQL: 资格最老,核心由C语 ...

  8. orm框架有哪些_java技术哪些是必学的?

    我们接触过java需要的小伙伴们都知道java是一门强大而又复杂的编程语言,现如今在互联网行业,java的身影随处可见,可能刚学习的小伙伴们会被java语言庞大的体系图吓到,不过知识毕竟是一个积累的过 ...

  9. ORM 框架中SQLALCHEMY一点点个人总结

    声明:工作原因涉及一点 What is ORM 答: object relation mapping 一种实现对象与数据库中的关系表映射的中间件.ORM 框架中最有名的是SQLALCHEMY 具体使用 ...

最新文章

  1. Python 技术篇-利用pdfkit库实现html格式文件转换PDF文档实例演示
  2. iOS之深入解析静态库和动态库
  3. HOW TO:在 Visual C++ .NET 中从 System::String* 转换为 Char*
  4. 华为云PB级数据库GaussDB(for Redis)解析第二期:Redis消息队列Stream的应用探讨
  5. 华为库存至少够缓冲一年;张朝阳质疑 5G 微波危害;苹果iOS 13不受支持机型曝光 | 极客头条...
  6. stripslashes和addslashes的使用方法
  7. SQL查询最近几年、几月的数据
  8. MacOS安装Photoshop2022提示错误代码107(Error Code: 107)(更新)
  9. 魔兽世界国服服务器稳定,《魔兽世界》国服大服务器功能实装启动
  10. Windows Defender怎么添加排除项?
  11. web app 中如何调用支付宝app 进行支付
  12. [Vue-Treeselect Warning] Unloaded branch node detected. “loadOptions“ prop is required to load its c
  13. OSGearth学习(一)
  14. 经典网络命令(搜集、概括)
  15. python 异常处理 库_python捕获数据库异常处理
  16. 理解 ARC 实现原理 -- 详细总结
  17. 曙光服务器通过ipmi安装系统,曙光服务器ipmi部署记录版.docx
  18. 科创板明日迎来第二批上市公司:晶晨股份和柏楚电子
  19. 二进制除以2相当于右移1位,遇到单数怎么处理,取整的原因是什么?可以想想最末位置后有小数点,小数点后的1,是0.5
  20. 五金配件行业ERP解决方案

热门文章

  1. J2EE 应用服务器技术
  2. html点击按钮复制一个样式,这10个按钮,把 CSS HOVER 的创意发挥到极致了
  3. IntelliJ IDEA 生成注册码源程序
  4. 解密一颗芯片设计的全生命周期算力需求
  5. python split拆分字符串_Python字符串split學習一(自定義字符串拆分)
  6. 人类想听懂动物的语言,AI 还需克服哪些困难
  7. css3 div阴影样式js特效
  8. isset()函数的作用和用法
  9. 让div居中的方式的几种方法
  10. CAD/CASS遮罩分图:带状图批量分幅,可依据闭合线批量分图,支持自定义图框,分图后可批量打印,可批量生成布局