拓展阅读
ORM-01-Hibernate、MyBatis、EclipseLink、Spring Data JPA、TopLink、ActiveJDBC、Querydsl 和 JOOQ 对比
ORM-02-Hibernate 对象关系映射(ORM)框架
ORM-02-JPA Java Persistence API 入门介绍
前言
自己通过 jdbc 实现了一个 数据库查询工具,不过后来想拓展查询功能时,总觉得不够尽兴。
所以在想能不能把 SQL 的构建单独抽离出来。
jonathanhds/sql-builder
SQL构建器
一种用于Java语言的动态SQL构建器。
用法
要使用此库,请在您的 pom.xml 中添加以下依赖项:
<dependency>
<groupId>com.github.jonathanhds</groupId>
<artifactId>sql-builder</artifactId>
<version>1.1</version>
</dependency>
示例
一些用法示例:
Select
QueryBuilder query = new QueryBuilder().select()
.column("s.name")
.column("count(s.impediments) AS total_impediments")
.from()
.table("sprint s")
.groupBy()
.column("s.name")
.having()
.column("total_impediments > 5");
输出为:
SELECT
s.name,
count(s.impediments) AS total_impediemnts
FROM
sprint s
GROUP BY
s.name
HAVING
total_impediemnts > 5
Delete
DeleteQuery query = new DeleteQuery("account a").addWhere("a.id > 666")
.addWhere("a.creation_date > '2013-01-01'");
输出为:
DELETE
FROM
account a
WHERE
a.id > 666
AND a.creation_date > '2013-01-01'
Update
UpdateQuery query = new UpdateQuery("employee e").set("e.salary", "50000")
.addWhere("e.age > 40")
.addWhere("e.genre = 'female'");
输出为:
UPDATE
employee e
SET
e.salary = '50000'
WHERE
e.age > 40
AND e.genre = 'female'
Insert
InsertQuery query = new InsertQuery("persons").columns("id", "name", "age")
.values(1, "foo", 30)
.values(2, "bar", 23)
.values(3, "hello", 54)
.values(4, "world", 19);
输出为:
INSERT INTO
persons (id, name, age)
VALUES
(1, 'foo', 30),
(2, 'bar', 23),
(3, 'hello', 54),
(4, 'world', 19)
小结
这个工具设计的感觉还是很顺眼的。
参考资料
https://github.com/alexkasko/query-string-builder