nimble-orm

基于 Spring jdbcTemplate 的 ORM
授权协议 GPL
开发语言 Java
所属分类 程序开发、 ORM/持久层框架
软件类型 开源软件
地区 国产
投 递 者 夹谷硕
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

这是一个基于 Spring JdbcTemplate 的小工具,帮助开发者简单地完成 Mysql 的增删改查。

使用 nimble-orm 的优势

  1. 为互联网频繁的表变动而生。 表名、字段名,仅在代码中出现一次。修改表名只需要改一处地方,修改字段名,仅需改字段注解一次及where子句中涉及的字段名。增加字段只需增加一个表成员。修改量相比MyBatis大大减少。

  2. 实用主义者,注重简单实用的接口。 分页接口、软删除标记位全面支持、数据库乐观锁CAS写法、事务手动回滚、支持SOA远程方式的跨数据库关联查询等。定义完DO之后,无需增加额外配置,调用接口即可。

  3. 贫血模型,纯粹的POJO。 不需要继承指定类或实现接口,纯粹的POJO,适合于各种序列化场景。喜欢Spring就会喜欢nimble-orm。

  4. 没有潜规则约定,一切注解配置,老项目迁移成本极低。 不会约定类成员变量和表字段名的关系,全部需要通过配置指定,老项目不规则的表名字段名,不会影响新代码的命名。强制指定配置,这种"麻烦"会收获到后续代码运维上的很多便利。欠下的技术债总是要还的,何不一开始就描述清楚点?而xml或其它文件格式写sql,导致几个文件来回切换的编码,一个修改另外一个忘记修改就出错的情况,不再出现了,代码内聚,让阅读和维护更简单。

Get Started 示例

      第一步,为每个数据库表建立一个字段一一对应的DO,纯粹的POJO,无需继承类或实现接口。

     第二步,用上注解标明对应的表和字段。看起来像这样,有挺多ORM是这样的形式,但相信我,nimble-orm的接口很简单很不同。

// 这个一个标准的POJO,除了注解,没有引入任何nimble-orm的东西,不要求继承或实现任何东西。
@Table("t_student")
public class StudentDO extends IdableSoftDeleteBaseDO { 
// 这里用不用继承都是等价的,IdableSoftDeleteBaseDO也不需要继承或实现任何nimble-orm的东西。
// 用继承可以框定一些规范(在业务系统中,有些每个表都有的公共字段可以放在父类中)
// 例如业务项目中,很多都有id 软删除标记 新增时间 修改时间 等共同字段,可以放在POJO基类中,不需要每个DO都写
// 即约定了规范,又降低代码量和阅读时间

/** IdableSoftDeleteBaseDO也是单纯的POJO,无需继承或实现任何东西。其内容是:
  @Column(value = "id", isKey = true, isAutoIncrement = true)
  private Long id;
  
  // 软删除标记为,0 未删除,1已删除
  @Column(value = "deleted", softDelete = {"0", "1"})
  private Boolean deleted;
  
  @Column(value = "create_time", setTimeWhenInsert = true)
  private Date createTime;
  
  @Column(value = "update_time", setTimeWhenUpdate = true, setTimeWhenInsert = true)
  private Date updateTime;
*/
		
	@Column("name")
	private String name;
	
	@Column("age")
	private Integer age;
	
	// 标准的 getters / setters,如果提供,nimble-orm就会用;如果没提供,就会直接反射设置字段值
}

     第三步,使用nimble-orm提供的接口,进行各种增删改查吧。例如我要分页查询t_student表中名字姓李的同学或年龄大于20岁的同学,按年龄排序,再按id排序,查第一页,每页10条,来吧:

PageData<StudentDO> pageData = dbHelper.getPage(StudentDO.class, 1, 10,
     "where name like ? or age>? order by age,id", "李%", 20);

// 如果你不需要总数,例如手机端页面只要一直往下翻,直到没有数据为止,那么可以用dbHelper.getPageWithoutCount方法
// 不计算总数,更省资源

System.out.println("total:" + pageData.getTotal());
for(StudentDO studentDO : pageData.getData()) {
    Systemo.out.println(studentDO);
}

     nimble-orm提供了很多实用的接口,相信可以绝大多数匹配你的项目。如果你需要更多,也可以告诉我。

  •         本系列文章记录我开发一个ORM的过程,现在记录的时间与原来开发的时间间隔比较久了,很多东西都忘记了,所以忽发奇想,就想写到博文里记录一番,也算是人生的一段经历。至于里面的一些细节问题,我也不想太过仔细的去思考了,毕竟也没有那么多时间,这里借用一句话,就随他去吧。呵呵!以前根本就没有记录的习惯,什么东西都是搞完了之后就扔到一边,可能一直到老都不会回头。这样下去似乎也不太有意义,因为我

 相关资料
  • Nimble 是用于 Swift 和 Object-C 的匹配器框架,它可以用来表达 Swift 和 Object-C 表达式预期的结果,其灵感来自于 Cedar。 示例代码: // Swiftexpect(1 + 1).to(equal(2))expect(1.2).to(beCloseTo(1.1, within: 0.1))expect(3) > 2expect("seahorse").to

  • 本文向大家介绍Django基于ORM操作数据库的方法详解,包括了Django基于ORM操作数据库的方法详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Django基于ORM操作数据库的方法。分享给大家供大家参考,具体如下: 1、配置数据库 2、在项目目录中建立“web站点”(app) 3、配置新建的app(blog和article) 4、以blog为例,创建模型 5、同步模型到数据库中

  • 问题内容: 我正在尝试从sqlalchemy(SQlite)迁移到使用mongodb。我想要架构验证。我看了看mongokit,但我想要一个类似于映射器的东西,这样它就可以从对象的属性中保存,而不是字典。 我想要一个映射器,这样我就可以使用现有对象而无需修改它们。 问题答案: 另一个选择是MongoEngine。MongoEngine的ORM与Django使用的ORM非常相似。 示例(来自教程):

  • 大多数现代应用程序使用关系数据库来存储数据。 最近,许多供应商转而使用对象数据库来减轻数据维护的负担。 这意味着对象数据库或对象关系技术正在处理存储,检索,更新和维护。 此对象关系技术的核心部分是映射orm.xml文件。 由于xml不需要编译,因此我们可以轻松地对管理多个数据源进行更改。 对象关系映射 对象关系映射(ORM)简要介绍了什么是ORM以及它是如何工作的。 ORM是一种编程功能,可以将数

  • ORM

    介绍 imi 中目前支持两个模型:数据库模型、内存表模型 数据库模型与传统 php-fpm 框架下使用并无多大差别,甚至更加好用。 在 imi 框架中,提供了一个模型生成工具。使用该工具生成的模型,在使用时无需手动定义字段,支持 IDE 代码提示。 模型生成命令使用说明:https://doc.imiphp.com/dev/generate/model.html 模型字段和序列化 模型实例对象可以

  • orm

    Laravel Doctrine ORM A drop-in Doctrine ORM 2 implementation for Laravel 5+ $scientist = new Scientist( 'Albert', 'Einstein');$scientist->addTheory( new Theory('Theory of relativity'));Entity