{"repo":"pugwoo/nimble-orm","free":true,"listed":false,"github":"https://github.com/pugwoo/nimble-orm","clone":"git clone https://github.com/pugwoo/nimble-orm.git","description":"一个基于Spring jdbcTemplate的灵活轻量级的ORM","language":"Java","stars":48,"topics":["orm","java","spring","jdbc","mysql"],"license":"GPL-2.0","category":"databases-storage","readme_excerpt":"nimble-orm 支持的数据库 数据库 支持情况 ------------ ------- MySQL 支持 PostgreSQL 支持 Clickhouse 支持 TiDB 支持 这是一个基于Spring JdbcTemplate的小工具，帮助开发者简单地完成增删改查。为什么还需要在众多存在的ORM，如MyBatis/Hibernate的情况下再写一个ORM呢？ 1. Hibernate因为比较复杂难以使用好，互联网公司大都没有采用，用得多的是MyBatis。而MyBatis的xml文件中，会出现大量相同的列名。增删一个列或修改一个列名，对于xml文件都是很大的变动。有一种方式是用MyBatis的Generator生成xml，但是这样的xml文件如果修改过，下次生成就会覆盖，很容易出错。因此，这种xml方式维护sql，虽然足够灵活，但也非常繁琐。 2. MyBatis对null值的处理不够灵活。例如只想更新非null值，或只插入非null值，MyBatis的写法会出现很多判断语句，大量的重复列名出现。 3. MyBatis提供一种定义接口，然后去xml中实现同名标记的sql，就可以暴露为可用DAO的方式。这种方式我并不推荐，在简单的增删改查功能下，这种方式没有问题，因为一个DAO接口对应于sql并不是只有一条，特别是复杂的DAO接口。如果一条SQL就是一个DAO接口的话，那组装多个sql的逻辑就暴露到service层，这样service层会变得复杂。 使用nimble-orm的优势 1. 为互联网频繁的表变动而生。 表名、字段名，仅在代码中出现一次。修改表名只需要改一处地方，修改字段名，仅需改字段注解一次及where子句中涉及的字段名。增加字段只需增加一个表成员。修改量相比MyBatis大大减少。 2. 实用主义者，注重简单实用的接口。 分页接口、软删除标记位全面支持、数据库乐观锁CAS写法、事务手动回滚、支持SOA远程方式的跨数据库关联查询等。定义完DO之后，无需增加额外配置，调用接口即可。 3. 贫血模型，纯粹的POJO。 不需要继承指定类或实现接口，纯粹的POJO，适合于各种序列化场景。喜欢Spring就会喜欢nimble-orm。 4. 没有潜规则约定，一切注解配置，老项目迁移成本极低。 不会约定类成员变量和表字段名的关系，全部需要通过配置指定，老项目不规则的表名字段名，不会影响新代码的命名。强制指定配置，这种“麻烦”会收获到后续代码运维上的很多便利。欠下的技术债总是要还的，何不一开始就描述清楚点？而xml或其它文件格式写sql，导致几个文件来回切换的编码，一个修改另外一个忘记修改就出错的情况，不再需要了，代码内聚，让阅读和维护更简单。 Get Started 示例 把代码下载后，可以以Maven项目方式导入到IDE中，数据库链接配置在 src/test/resources/jdbc.properties 中，数据库测试建表语句在 create-table-mysql.sql 中。建好数据库和表之后，就可以执行 TestDBHelper.java 中的例子。 在Java DAO层，一般一个DO对象和一张数据库表是一一对应的。你只需要为DO对象加上一些注解，主要注解哪个表和哪些列，就可以方便地使用DBHelper进行增删改查了。 项目只需要maven引入，最低jdk版本为jdk-21： 同时nimble-orm是基于jdbcTemplate的，nimble-orm需要拿到配置好的jdbcTemplate和namedJdbcTempla","default_branch":null,"files":null,"tree":[],"storefront":"/r/pugwoo","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/pugwoo/nimble-orm/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}