Skip to content

Commit 1cfdf6c

Browse files
author
veasion
committed
sql解析veasion-db代码
1 parent 7f66a3e commit 1cfdf6c

13 files changed

+1244
-10
lines changed

README.md

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ version-db 是一个轻量级持久层db框架,除slf4j-api外不依赖任何
77

88
框架支持自定义拦截器,内置逻辑删除拦截器,可通过SPI或调用InterceptorUtils.addInterceptor方法加入扩展。
99
## maven 依赖
10-
第一步:添加jitpack仓库
10+
第一步:添加 jitpack 仓库
1111
```xml
1212
<repositories>
1313
<repository>
@@ -16,13 +16,27 @@ version-db 是一个轻量级持久层db框架,除slf4j-api外不依赖任何
1616
</repository>
1717
</repositories>
1818
```
19-
第二步:依赖veasion-db
19+
第二步:依赖 veasion-db
2020
```xml
2121
<dependency>
2222
<groupId>com.github.veasion</groupId>
2323
<artifactId>veasion-db</artifactId>
24-
<version>v1.0.0</version>
24+
<version>v1.0.1</version>
2525
</dependency>
26+
```
27+
支持sql解析生成veasion-db代码
28+
```
29+
String sql = "select * from t_student where id = 1";
30+
String code = SQLParseUtils.parseSQLConvert(sql);
31+
// 直接把SQL转换成对应的代码,示例参考单元测试 SqlDbConvertTest
32+
33+
// 该功能为扩展功能需要加入第三方依赖
34+
<dependency>
35+
<groupId>com.github.jsqlparser</groupId>
36+
<artifactId>jsqlparser</artifactId>
37+
<version>1.2</version>
38+
</dependency>
39+
2640
```
2741
## 使用方式介绍
2842
这里以 student 表举例
@@ -207,7 +221,7 @@ public class SubQueryTest extends BaseTest {
207221
EQ student = new EQ(StudentPO.class, "s");
208222
student.join(
209223
new SubQuery(new Q().selectExpression("avg(age)", "age"), "t")
210-
).on(Filter.expression("s.age", Operator.LT, Expression.filter("t.age")));
224+
).on(Filter.expression("s.age", Operator.LT, "t.age"));
211225
student.selectAll().eq("sex", 2);
212226
println(studentDao.queryList(student));
213227

@@ -225,6 +239,17 @@ public class SubQueryTest extends BaseTest {
225239
.filterSubQuery("tno", Operator.IN, SubQueryParam.build(subQuery2))
226240
));
227241

242+
// 通过子查询来查询学生班级名称
243+
// select s.*, (select class_name from t_classes where id = s.class_id) as className from t_student
244+
println(studentDao.queryList(new EQ(StudentPO.class, "s")
245+
.selectAll()
246+
.selectSubQuery(SubQueryParam.build(
247+
new EQ(ClassesPO.class)
248+
.select("className")
249+
.filterExpression("id", Operator.EQ, "${s.classId}")
250+
)), StudentVO.class
251+
));
252+
228253
/*
229254
// 模拟 oracle 分页
230255
// 等价于 studentDao.queryList(new Q().page(new OraclePage(1, 10)))

pom.xml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,22 @@
4848
</build>
4949

5050
<dependencies>
51+
<!-- slf4j-api -->
5152
<dependency>
5253
<groupId>org.slf4j</groupId>
5354
<artifactId>slf4j-api</artifactId>
5455
<version>1.7.22</version>
5556
</dependency>
57+
58+
<!-- sql转换veasion-db代码用(provided) -->
59+
<dependency>
60+
<groupId>com.github.jsqlparser</groupId>
61+
<artifactId>jsqlparser</artifactId>
62+
<version>1.2</version>
63+
<scope>provided</scope>
64+
</dependency>
65+
66+
<!-- test -->
5667
<dependency>
5768
<groupId>mysql</groupId>
5869
<artifactId>mysql-connector-java</artifactId>

src/main/java/cn/veasion/db/base/Filter.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,10 @@ public static Filter subQuery(String field, Operator operator, SubQueryParam sub
8787
return build(field, operator, Objects.requireNonNull(subQueryParam), null).special();
8888
}
8989

90+
public static Filter expression(String field, Operator operator, String expression) {
91+
return expression(field, operator, Expression.filter(expression));
92+
}
93+
9094
public static Filter expression(String field, Operator operator, Expression expression) {
9195
return build(field, operator, expression, null).special();
9296
}

0 commit comments

Comments
 (0)