拓展阅读

linq

querydsl

ORM-01-Hibernate、MyBatis、EclipseLink、Spring Data JPA、TopLink、ActiveJDBC、Querydsl 和 JOOQ 对比

ORM-02-Hibernate 对象关系映射(ORM)框架

ORM-02-JPA Java Persistence API 入门介绍

orm-04-Spring Data JPA 入门介绍

ORM-05-javalite activejdbc

ORM-06-jooq 入门介绍

ORM-07-querydsl 入门介绍

ORM-08-EclipseLink 入门介绍

ORM-09-TopLink

前言

自己通过 jdbc 实现了一个 数据库查询工具,不过后来想拓展查询功能时,总觉得不够尽兴。

所以在想能不能把 SQL 的构建单独抽离出来。

jonathanhds/sql-builder

SQL构建器

一种用于Java语言的动态SQL构建器。

用法

要使用此库,请在您的 pom.xml 中添加以下依赖项:

  [xml]
1
2
3
4
5
<dependency> <groupId>com.github.jonathanhds</groupId> <artifactId>sql-builder</artifactId> <version>1.1</version> </dependency>

示例

一些用法示例:

Select

  [java]
1
2
3
4
5
6
7
8
9
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");

输出为:

  [sql]
1
2
3
4
5
6
7
8
9
SELECT s.name, count(s.impediments) AS total_impediemnts FROM sprint s GROUP BY s.name HAVING total_impediemnts > 5

Delete

  [java]
1
2
DeleteQuery query = new DeleteQuery("account a").addWhere("a.id > 666") .addWhere("a.creation_date > '2013-01-01'");

输出为:

  [sql]
1
2
3
4
5
6
DELETE FROM account a WHERE a.id > 666 AND a.creation_date > '2013-01-01'

Update

  [java]
1
2
3
UpdateQuery query = new UpdateQuery("employee e").set("e.salary", "50000") .addWhere("e.age > 40") .addWhere("e.genre = 'female'");

输出为:

  [sql]
1
2
3
4
5
6
7
UPDATE employee e SET e.salary = '50000' WHERE e.age > 40 AND e.genre = 'female'

Insert

  [java]
1
2
3
4
5
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);

输出为:

  [sql]
1
2
3
4
5
6
7
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