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
的基石。