Skip to content

Jsql = Java String Query Language

为什么需要 Jsql

当使用 JDBC 操作数据库时,主要内容包括拼接 sql 和组装参数列表。以往为了完成这个事情,我们要定义一个StringBuffer和一个参数的ArrayList,因为参数列表是可选内容,所以将它们一起作为参数传递不方便且容易出错。Jsql 被设计的第一出发点就是封装拼装sql 和组装参数列表。同时在 Jsql 中,参数与对应的 sql 片段是配对出现的,能一定程度上减少错误发生,这也更符合自然习惯。

Jsql 用于查询

java

Jsql jsql = new Jsql();

jsql.append("select * from demo where res_id < ? and res_id > ?", resId, 1);

// 返回 map 列表
List<Map<String, Object>> data = jsql.queryForMap();

// 返回 DemoDto 列表
List<DemoDto> data = jsql.queryForObject(DemoDto.class);

// 返回一个map
Map<String, Object> data = jsql.findForMap();

// 返回一个DemoDto
DemoDto data = jsql.findForObject(DemoDto.class);


// 设定翻页信息
jsql.page(1, 10);

// 返回 map 分页数据
List<Map<String, Object>> data = jsql.pageForMap();

// 返回 DemoDto 分页数据
List<DemoDto> data = jsql.pageForObject(DemoDto.class);

可以看到 Jsql 遵循【查询API 设计】的要求。

Jsql 用于持久化

Jsql jsql = new Jsql();

// insert
jsql.append("insert demo(res_id, title) values (?, ?)", 1, "标题");

// update
jsql.append("update demo");
jsql.append("   set title = ?", "标题");
jsql.append("     , f1    = ?", "v1");
jsql.append("     , f2    = ?", "v2");
jsql.append("     , f3    = ?", "v3");
jsql.append(" where res_id = ?", 1);

// delete
jsql.append("delete from demo");
jsql.append(" where res_id = ?", 1);

// 最后执行
Integer c = jsql.executeUpdate();

小结

Jsql提供的占位符?与参数配对出现的方式,可以一定程度的减少参数错位的发生。但依然需要拼接sql字符串,而拼接sql字符串就容易出错。所以summer-data提供 Jql 处理查询,提供 Table 处理持久化。Jql 和 Table 都是通过 Jsql 实现的,它是summer-data的基石。