Permazen alternatives and similar libraries
Based on the "ORM" category.
Alternatively, view Permazen alternatives based on common mentions on social networks and blogs.
-
APIJSON
🏆 实时 零代码、全功能、强安全 ORM 库 🚀 后端接口和文档零代码,前端(客户端) 定制返回 JSON 的数据和结构 🏆 Real-Time coding-free, powerful and secure ORM 🚀 providing APIs and Docs without coding by Backend, and the returned JSON of API can be customized by Frontend(Client) users -
Afinal
Afinal是一个android的ioc,orm框架,内置了四大模块功能:FinalAcitivity,FinalBitmap,FinalDb,FinalHttp。通过finalActivity,我们可以通过注解的方式进行绑定ui和事件。通过finalBitmap,我们可以方便的加载bitmap图片,而无需考虑oom等问题。通过finalDB模块,我们一行代码就可以对android的sqlite数据库进行增删改查。通过FinalHttp模块,我们可以以ajax形式请求http数据。详情请通过以下网址查看。 -
Morphia
MongoDB object-document mapper in Java based on https://github.com/mongodb/mongo-java-driver -
Bean Searcher
🔥🔥🔥 A read-only ORM focusing on advanced query, naturally supports joined tables, and avoids DTO/VO conversion, making it possible to realize complex query in one line of code ! -
SQL-Toy
Java真正智慧的ORM框架,融合JPA功能和最佳的sql编写及查询模式、独创的缓存翻译、最优化的分页、并提供无限层级分组汇总、同比环比、行列转换、树形排序汇总、sql自适配不同数据库、分库分表、多租户、数据加解密、脱敏以及面向复杂业务和大规模数据分析等痛点、难点问题项目实践经验分享的一站式解决方案! -
MyBatis-Plus-Join
支持连表查询的mybatis-plus,mybatis-plus风格的连表操作提供wrapper.leftJoin(),wrapper.rightJoin()等操作 -
Bee
Bee is an AI, easy and high efficiency ORM framework,support JDBC,Cassandra,Mongodb,Sharding,Android,HarmonyOS. -
Easy-Query
java/kotlin high performance lightweight solution for jdbc query,support oltp and olap query,一款java下面支持强类型、轻量级、高性能的ORM,致力于解决jdbc查询,拥有对象模型筛选、隐式子查询、隐式join -
Eclipse JNoSQL
Eclipse JNoSQL is a framework which has the goal to help Java developers to create Jakarta EE applications with NoSQL. -
Eclipse Store
High-Performance Java-Native-Persistence. Store and load any Java Object Graph or Subgraphs partially, Relieved of Heavy-weight JPA. Microsecond Response Time. Ultra-High Throughput. Minimum of Latencies. Create Ultra-Fast In-Memory Database Applications & Microservices.
InfluxDB - Purpose built for real-time analytics at any scale.
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of Permazen or a related project?
README
Permazen is a better persistence layer for Java
Persistence is central to most applications. But there are many challenges involved in persistence programming that lie outside of the domain of simply storing the data.
Mainstream Java solutions such as JDBC, JPA and JDO were designed simply to give Java programmers access to existing database functionality. They address the "storage" problem, but leave many other important issues that are inherent to persistence programming poorly addressed, or not addressed at all.
Permazen is a completely different way of looking at persistence programming. Instead of starting from the storage technology side, it starts from the programming language side, asking the simple question, "What are the issues that are inherent to persistence programming, regardless of programming language or database storage technology, and how can they be addressed at the language level in the simplest, most correct, and most language-natural way?"
With Permazen, not only are many issues inherent to persistence programming solved more easily and naturally than before, but also many issues that traditional solutions don't address at all are solved, and some entirely new, useful functionality is added.
Permazen is:
- A Java persistence layer for SQL, key-value, or in-memory databases
- A rigorously defined, modular key/value API with adapters for multiple database technologies
- A way to make your application portable across different database technologies
- An object serialization framework
- An automated schema management framework
- A library for inverting Java references
- A library for automatic field change notification
- An embeddable Java command line interface (CLI)
Permazen was inspired by years of frustration with existing persistence solutions, in particular JPA. Compared to using JPA, building an application with Permazen is a refreshingly straightforward experience.
Ask these questions of your persistence solution:
- Configuration complexity Do we have to explicitly configure details of how data is mapped? Are we forced to (ab)use the programming language to address what are really database configuration issues?
- Query language concordance Does the code that performs queries look like regular Java code, or do we have to learn a new “query language”?
- Query performance transparency Is the performance of a query visible and obvious from looking at the code that performs it?
- Data type congruence Are database types equivalent to Java types across the entire domain of values? Are we guaranteed to always read back the same value we write?
- First class offline data Can it be precisely defined which data is copied out of a transaction? Does offline data have all the rights and privileges of “online” (i.e., transactional) data? Does this include the ability to query indexes, and a framework for handling schema differences? Can offline data be easily serialized/deserialized?
- Schema verification Is the schema assumed by the code cross-checked against the schema actually present in the database? Are we always guaranteed a consistent interpretation of stored data?
- Incremental schema evolution Can multiple schemas exist at the same time in the database, to support rolling upgrades? Can data be migrated incrementally, i.e., without stopping the world? Are we free from "whole database" migration operations that would limit scalability?
- Structural schema changes Are structural schema updates performed entirely automatically for us?
- Semantic schema changes Is there a convenient way to specify semantic schema updates, at the language level (not the database level)?
- Schema evolution type safety Is type safety and data type congruence guaranteed across arbitrary schema migrations?
- Transactional validation Does validation, including reference validation, occur only at the end of the transaction (as it should), or randomly and inconveniently in the middle?
- Cross-object validation Is it possible to define validation constraints that span multiple objects/records? Can we register for data-level notifications about changes in non-local objects?
- Custom types and indexes Is it possible to define custom data types, have them be indexed? Is it easy to define arbitrary custom indexes?
- Language-level data maintainability Can database maintenance tasks and queries be performed via a command line interface (CLI) using Java types, values, and expressions (including Java 8 streams and lambdas)? Are there convenient tools for manual and scripted use?
- Data store independence Are we restricted to using only a specific type of database technology, or can virtually any database technology be used by implementing a simple API, making it easy to change later if needed?
Permazen addresses all of these issues, this without sacrificing flexibility or scalability.
Permazen does this by treating the database as just a sorted key/value store, and implementing the following in Java:
- Encoding/decoding of field values
- Referential integrity; forward/reverse delete cascades
- Indexes (simple and composite)
- Query views
- Schema management
- Change notification
- Validation queues
- Command line interface
- GUI database editor
Permazen also adds several new features that traditional databases don't provide.
What's the Downside?
Permazen gains advantages by fundamentally changing the equation with respect to persistence programming. However, in some situations, not all of these changes result in improvements when compared to traditional SQL/JPA. Here are some things to consider.
You have to learn something new. Persistence programming with Permazen requires a different way of thinking. For example, a "DAO" layer is often no longer necessary, and you have to think harder about how to query your data efficiently (instead of crossing your fingers and hoping the database figures it out for you).
For an equivalent query, Permazen will perform more frequent, but smaller, database accesses. As a result, in situations where the code and the data are separated by a high latency network, Permazen will tend to be slower.
More flexible type hiearchies are possible, but it's also easy to make a mess. JPA has support for class inheritance and partial support for generics. Permazen supports interface inheritance (including Java's equivalent of "mix-ins") and fully supports generic types. The restrictions imposed by JPA tend to force model classes to stay simpler. With Permazen, implementing an interface (directly or indirectly) can mean that a model class inherits a bunch of new persistent fields.
Permazen Slides
For a quick overview, check out these slides from a JSimpleDB talk at a local Java user's group (Permazen was previously named JSimpleDB).
Permazen Paper
For a deeper understanding of the motivation and design decisions behind Permazen, read Permazen: Language-Driven Persistence for Java.
Abstract:
Most software applications require durable persistence of data. From a programmer’s point of view, persistence has its own set of inherent issues, e.g., how to manage schema changes, yet such issues are rarely addressed in the programming language itself. Instead, how we program for persistence has traditionally been driven by the storage technology side, resulting in incomplete and/or technology-specific support for managing those issues.
In Java, the mainstream solution for basic persistence is the Java Persistence API (JPA). While popular, it also measures poorly on how well it addresses many of these inherent issues. We identify several examples, and generalize them into criteria for evaluating how well any solution serves the programmer’s persistence needs, in any language. We introduce Permazen, a persistence layer for ordered key/value stores that, by integrating the data encoding, query, and indexing functions, provides a more complete, type-safe, and language-driven framework for managing persistence in Java, and addresses all of the issues we identify.
Installing Permazen
Permazen is available from Maven Central:
<dependency>
<groupId>io.permazen</groupId>
<artifactId>permazen-main</artifactId>
</dependency>
or from the Ivy RoundUp ivy repository:
<dependency org="io.permazen" name="permazen"/>
You should also add the key/value store module(s) for whatever key/value store(s) you want to use, e.g.:
<dependency>
<groupId>io.permazen</groupId>
<artifactId>permazen-kv-sqlite</artifactId>
</dependency>
There is a demo distribution ZIP file that lets you play with the Permazen command line and GUI, using a simple database of the solar system.
Documentation
Documentation and links:
- Introduction
- Getting Started
- FAQ
- API Javadocs
- Bullet-point JPA Comparison
- Key/value pair database layout
- Permazen Users discussion group
- Auto-generated Maven Site