一款面向 Java 和 Kotlin 的革命性的 ORM,主要特性如下:
1. 查询操作针对任意复杂的对象树,而非简单对象。甚至可以对自关联属性进行递归查询。
2. 保存操作针对任意复杂的对象树,而非简单对象。
3. 缓存操作针对任意复杂的对象树,而非简单对象。并保证数据库和缓存之间的一致性。
4. 内部机制避免使用反射,获得了极致的性能。
5. 基于不可变数据对象。通过移植immer,获得直观地对层次很深的不可变对象进行“修改”的能力。
6. 强类型SQL DSL,在编译时发现问题,而非运行时。
7. Java和Kotlin双API支持,前者保证所有团队可用,后者优化开发体验。
Jimmer,一个面向Java和Kotlin的革命性ORM,终于彻底完成了! 现在,所有的预期设计目标全部达到。 B站视频(38分钟):https://www.bilibili.com/video/BV1kd4y1A7K3 适用范围:满足如下特点的项目 OLTP 以关系型数据库为持久数据 以NoSQL为缓存数据(可选) 都可以使用Jimmer来开发,同时实现开发速度快、维护性好、功能强大、性能优越
现在,有很多ORM框架可供选择,比如:JPA、myBatis、JOOQ、Exposed、Ktorm。 它们够用吗? 或许,一个实现层面更轻量,但功能层面却足够强大的革命性ORM能颠覆人们对ORM的传统认知。于是我创作这个ORM 项目地址:https://github.com/babyfish-ct/jimmer 文档(中英双语)地址:https://babyfish-ct.github.io/ji
1. 本文的讨论前提 OLTP类型项目很大一部分操作是都针对数据库原始数据,这时软件系统中的对象结构和数据库的中数据结构大体一致,是本文讨论的场景。 而因业务计算而引入的计算指标相关的数据类型,和数据库的原始结构并不相同,并非本文的讨论范场景。 2. 现有技术流派的缺陷 现在,用户访问关系型数据库的框架很多,总体上分为两个派别 传统ORM派,以JPA, Exposed, Ktorm为代表。 DTO
在创世纪章节中我们简单介绍了Go语言的演化基因族谱,对其中来自于贝尔实验室的特有并发编程基因做了重点介绍,最后引出了Go语言版的“Hello, World”程序。其实“Hello, World”程序是展示各种语言特性的最好的例子,是通向该语言的一个窗口。这一节我们将沿着各个编程语言演化的时间轴,简单回顾下“Hello, World”程序是如何逐步演化到目前的Go语言形式、最终完成它的革命使命的。
变革 ECMAScript 1 ECMAScript 的最初定义,包含了以下内容: 基本类型 字符串 数字 布尔 null undefined 对象类型 对象 函数 数组 ECMAScript 3 ECMAScript 5.1 ECMAScript 2015 (ES6) ECMAScript 2016 (ES7) 新增内容: Array.prototype.includes()
好了,前面的章节解释了使用Kotlin代码完美地工作。但是与普通的Java库和Android SDK会发生什么呢?在Java中,所有对象可以被定义为null。所以我们不得不处理大量潜在的在现实中不可能是null的null变量。这意味着我们的代码最后可能会有几百个!!操作符,这绝对不是一个好的主意。 当我们去处理Android SDK时,你可能看见所有Java方法的参数被标记为单个的!。比如,Jav
问题内容: Java面向方面的编程的最佳工具是什么? 该工具的要求当然是IDE支持,表达能力和适当的文档。 问题答案: JBossAOP和AspectJ是AOP的两个常用的成熟框架。另一个流行的选择是Spring AOP,但它缺少其他两个功能。 JBossAOP和AspectJ都具有相似的功能,一个很大的不同是AspectJ依赖于Java语言的扩展,而JBoss AOP则没有。 如果您的AOP要求
如何在Kotlin中创建一个具有私有getter(或只是没有)但具有公共setter的属性? 不能使用错误: 在我的例子中,原因是Java Interop:我希望我的Java代码能够调用,但不能调用。
我在为Android系统构建一个在iOS上运行良好的应用程序时遇到了问题。错误内容为: *错误:评估项目':app'时出现问题。 在org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler类型的对象上找不到参数[org.jetbrains.kotlin:kotlin-gradle-plugin:$kotl