nimble-orm基于 Spring jdbcTemplate 的 ORM
這是一個(gè)基于 Spring JdbcTemplate 的小工具,幫助開發(fā)者簡(jiǎn)單地完成 Mysql 的增刪改查。
使用 nimble-orm 的優(yōu)勢(shì)
為互聯(lián)網(wǎng)頻繁的表變動(dòng)而生。 表名、字段名,僅在代碼中出現(xiàn)一次。修改表名只需要改一處地方,修改字段名,僅需改字段注解一次及where子句中涉及的字段名。增加字段只需增加一個(gè)表成員。修改量相比MyBatis大大減少。
實(shí)用主義者,注重簡(jiǎn)單實(shí)用的接口。 分頁接口、軟刪除標(biāo)記位全面支持、數(shù)據(jù)庫樂觀鎖CAS寫法、事務(wù)手動(dòng)回滾、支持SOA遠(yuǎn)程方式的跨數(shù)據(jù)庫關(guān)聯(lián)查詢等。定義完DO之后,無需增加額外配置,調(diào)用接口即可。
貧血模型,純粹的POJO。 不需要繼承指定類或?qū)崿F(xiàn)接口,純粹的POJO,適合于各種序列化場(chǎng)景。喜歡Spring就會(huì)喜歡nimble-orm。
沒有潛規(guī)則約定,一切注解配置,老項(xiàng)目遷移成本極低。 不會(huì)約定類成員變量和表字段名的關(guān)系,全部需要通過配置指定,老項(xiàng)目不規(guī)則的表名字段名,不會(huì)影響新代碼的命名。強(qiáng)制指定配置,這種“麻煩”會(huì)收獲到后續(xù)代碼運(yùn)維上的很多便利。欠下的技術(shù)債總是要還的,何不一開始就描述清楚點(diǎn)?而xml或其它文件格式寫sql,導(dǎo)致幾個(gè)文件來回切換的編碼,一個(gè)修改另外一個(gè)忘記修改就出錯(cuò)的情況,不再出現(xiàn)了,代碼內(nèi)聚,讓閱讀和維護(hù)更簡(jiǎn)單。
Get Started 示例
第一步,為每個(gè)數(shù)據(jù)庫表建立一個(gè)字段一一對(duì)應(yīng)的DO,純粹的POJO,無需繼承類或?qū)崿F(xiàn)接口。
第二步,用上注解標(biāo)明對(duì)應(yīng)的表和字段??雌饋硐襁@樣,有挺多ORM是這樣的形式,但相信我,nimble-orm的接口很簡(jiǎn)單很不同。
// 這個(gè)一個(gè)標(biāo)準(zhǔn)的POJO,除了注解,沒有引入任何nimble-orm的東西,不要求繼承或?qū)崿F(xiàn)任何東西。
@Table("t_student")
public class StudentDO extends IdableSoftDeleteBaseDO {
// 這里用不用繼承都是等價(jià)的,IdableSoftDeleteBaseDO也不需要繼承或?qū)崿F(xiàn)任何nimble-orm的東西。
// 用繼承可以框定一些規(guī)范(在業(yè)務(wù)系統(tǒng)中,有些每個(gè)表都有的公共字段可以放在父類中)
// 例如業(yè)務(wù)項(xiàng)目中,很多都有id 軟刪除標(biāo)記 新增時(shí)間 修改時(shí)間 等共同字段,可以放在POJO基類中,不需要每個(gè)DO都寫
// 即約定了規(guī)范,又降低代碼量和閱讀時(shí)間
/** IdableSoftDeleteBaseDO也是單純的POJO,無需繼承或?qū)崿F(xiàn)任何東西。其內(nèi)容是:
@Column(value = "id", isKey = true, isAutoIncrement = true)
private Long id;
// 軟刪除標(biāo)記為,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;
// 標(biāo)準(zhǔn)的 getters / setters,如果提供,nimble-orm就會(huì)用;如果沒提供,就會(huì)直接反射設(shè)置字段值
}
第三步,使用nimble-orm提供的接口,進(jìn)行各種增刪改查吧。例如我要分頁查詢t_student表中名字姓李的同學(xué)或年齡大于20歲的同學(xué),按年齡排序,再按id排序,查第一頁,每頁10條,來吧:
PageData<StudentDO> pageData = dbHelper.getPage(StudentDO.class, 1, 10,
"where name like ? or age>? order by age,id", "李%", 20);
// 如果你不需要總數(shù),例如手機(jī)端頁面只要一直往下翻,直到?jīng)]有數(shù)據(jù)為止,那么可以用dbHelper.getPageWithoutCount方法
// 不計(jì)算總數(shù),更省資源
System.out.println("total:" + pageData.getTotal());
for(StudentDO studentDO : pageData.getData()) {
Systemo.out.println(studentDO);
}
nimble-orm提供了很多實(shí)用的接口,相信可以絕大多數(shù)匹配你的項(xiàng)目。如果你需要更多,也可以告訴我。
