├── .gitignore
├── LICENSE
├── README.md
├── README.zh.md
├── data
└── sqlite.db
├── pom.xml
└── src
├── main
└── java
│ └── io
│ └── vertx
│ └── ext
│ └── sql
│ └── assist
│ ├── CommonSQL.java
│ ├── CommonSQLClinet.java
│ ├── SQLCommand.java
│ ├── SQLCommandImpl.java
│ ├── SQLExecute.java
│ ├── SQLExecuteBase.java
│ ├── SQLExecuteImplDB2.java
│ ├── SQLExecuteImplJDBC.java
│ ├── SQLExecuteImplMySQL.java
│ ├── SQLExecuteImplPg.java
│ ├── SQLStatement.java
│ ├── SqlAndParams.java
│ ├── SqlAssist.java
│ ├── SqlLimitResult.java
│ ├── SqlPropertyValue.java
│ ├── SqlWhereCondition.java
│ ├── Table.java
│ ├── TableColumn.java
│ ├── TableId.java
│ └── sql
│ ├── AbstractStatementSQL.java
│ ├── DB2StatementSQL.java
│ ├── MySQLStatementSQL.java
│ ├── OracleStatementSQL.java
│ ├── PostgreSQLStatementSQL.java
│ ├── SQLiteStatementSQL.java
│ └── SqlServerStatementSQL.java
└── test
├── java
└── io
│ └── vertx
│ └── ext
│ └── sql
│ └── assist
│ ├── JdbcPoolTest.java
│ ├── MySQLPoolTest.java
│ ├── TestSuite.java
│ ├── entity
│ ├── Classes.java
│ └── Student.java
│ └── sql
│ ├── ClassesSQL.java
│ ├── JsonObjectSQL.java
│ └── StudentSQL.java
└── resources
└── vertx-default-jul-logging.properties
/.gitignore:
--------------------------------------------------------------------------------
1 | # Compiled class file
2 | *.class
3 |
4 | # Log file
5 | *.log
6 |
7 | # BlueJ files
8 | *.ctxt
9 |
10 | # Mobile Tools for Java (J2ME)
11 | .mtj.tmp/
12 |
13 | # Package Files #
14 | *.jar
15 | *.war
16 | *.nar
17 | *.ear
18 | *.zip
19 | *.tar.gz
20 | *.rar
21 |
22 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
23 | hs_err_pid*
24 | /.settings/
25 | /.classpath
26 | /.project
27 | /target/
28 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 MirrenTools
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # vertx-sql-assist
2 | Read this in other languages: [English](./README.md), [简体中文](./README.zh.md).
3 |
4 | vertx-sql-assist is the SQL operation help tool of [Vert.x](https://vertx.io/), which provides the support of insert, delete, update, query, join, paging query, cooperate with SqlAssist help class, it basically does not need to write a line of SQL code.
5 |
6 | We recommend that you use [ScrewDriver](https://github.com/MirrenTools/screw-driver) to generate code, so you will find the world very beautiful!
7 | ## Dependencies
8 | To use vertx-sql-assist, add the following dependency to the dependencies section of your build descriptor
9 |
10 | ``` XML
11 |
12 | org.mirrentools
13 | vertx-sql-assist
14 | RELEASE
15 |
16 | ```
17 | ## SQL class method description
18 | * **getCount** Get the total number of data rows
19 | * **selectAll** Query multiple rows of data
20 | * **limitAll** Paging query
21 | * **selectById** Query data by ID
22 | * **selectByObj** Query data by attributes that are not empty in the object
23 | * **selectSingleByObj** Query the first row of data returned by data withdrawal through the attribute not empty in the object
24 | * **insertBatch** Batch add insert
25 | * **insertAll** Insert an object including a value with a null property value
26 | * **insertNonEmpty** Insert an object, only the property whose value is not null
27 | * **insertNonEmptyGeneratedKeys** Insert an object, only the property whose value is not null,and get result id
28 | * **replace** Insert an object. If the object does not exist, create a new one. If the object already exists, update it
29 | * **updateAllById** Update all properties in an object, including null value, if it is the primary key value in the object
30 | * **updateAllByAssist** Update all properties in an object including null value, by SqlAssist
31 | * **updateNonEmptyById** Update a non null value of a property in an object, by ID
32 | * **updateNonEmptyByAssist** Update a non null value of a property in an object, by SqlAssist
33 | * **updateSetNullById** Set the column to null by ID
34 | * **updateSetNullByAssist** Set the column to null by SqlAssist
35 | * **deleteById** Delete by ID
36 | * **deleteByAssist** Delete by SqlAssist
37 | * **queryAsObj** Execution query result is JsonObject
38 | * **queryAsList** Execution query result is List
39 | * **update** Execution update result is number of affected rows
40 | * **updateResult** Execution update and get result
41 | * **batch** Batch Execution
42 | * **execute** Pool Execution
43 |
44 | ## SqlAssist method description
45 | * **setOrders** Set OrderBy with SqlAssist.order(column,mode)
46 | * **setGroupBy** Set GroupBy
47 | * **setHaving** Set Having
48 | * **setDistincts** Set distinct or not, true De duplicate
49 | * **setPage** Set the page number. The value is only valid in the limitAll method , finally will be converted to startRow
50 | * **setStartRow** Set data start row
51 | * **setRowSize** Set how many rows of data to get
52 | * **setResultColumn** Set to return column, Multiple columns are separated by ,
53 | * **setJoinOrReference** Set join query or multi table query statement
54 | * **and** Add and condition
55 | * **or** Add or condition
56 | * **andEq** Add and equal condition
57 | * **orEq** Add or equal condition
58 | * **andNeq** Add and not equal condition
59 | * **orNeq** Add or not equal condition
60 | * **andLt** Add and less than condition
61 | * **orLt** Add or less than condition
62 | * **andLte** Add and less than or equal to condition
63 | * **orLte** Add or less than or equal to condition
64 | * **andGt** Add and greater than condition
65 | * **orGt** Add or greater than condition
66 | * **andGte** Add and greater than or equal to condition
67 | * **orGte** Add or greater than or equal to condition
68 | * **andLike** Add and like condition
69 | * **orLike** Add or like condition
70 | * **andNotLike** Add and not like condition
71 | * **orNotLike** Add or not like condition
72 | * **andIsNull** Add and is null condition
73 | * **orIsNull** Add or is null condition
74 | * **andIsNotNull** Add and is not null condition
75 | * **orIsNotNull** Add or is not null condition
76 | * **setConditions** Add query condition
77 | * **customCondition** Add custom query condition
78 |
79 | ## SqlAssist Use example
80 | [Example project](https://github.com/shenzhenMirren/vertx-sql-assist-examples)
81 |
82 | ``` java
83 | // (1)Create SqlAssist
84 | SqlAssist assist = new SqlAssist();
85 | // (2)Add condition type=1 or 3,equivalent to SQL: where type=1 or type=3
86 | assist.orEq("type", 1).orEq("type", 3);
87 | // (3)Eliminating duplicate data ,equivalent to SQL: select distinct ...
88 | assist.setDistincts(true);
89 | // (4)Custom return column only [id,type,name,seq]
90 | assist.setResultColumn("id,type,name,seq");
91 | // (5)order by seq desc
92 | assist.setOrders(SqlAssist.order("seq", false));
93 | // (6)To get the data of lines 20-35 in the database, you can also use setpage (page number) to get the data by page,equivalent to SQL: limit 20,15
94 | assist.setStartRow(20).setRowSize(15);
95 | // (7)Execute get data
96 | Future future=Promise.promise().future();
97 | future.setHandler(//Processed results);
98 | itemsSQL.selectAll(assist,future);
99 | ```
100 | For more help, see the method notes for SqlAssist class
101 |
102 |
103 | ## How use it?
104 |
105 | **Example**
106 |
107 | 1.Create entity class
108 |
109 | ``` java
110 | @Table("table name")
111 | public class User {
112 | @TableId("primary key")
113 | private Long id;
114 | @TableColumn("column name")
115 | private String name;
116 | @TableColumn(value = "column name", alias = "column name,is not required")
117 | private Integer type;
118 | //Other necessary
119 | }
120 | ```
121 | 2.Create SQL class and extends CommonSQL
122 |
123 | ``` java
124 | public class UserSQL extends CommonSQL {//(1)
125 | public UserSQL(SQLExecute execute) {
126 | super(execute);
127 | }
128 | //(1)
129 | //The User must be an entity class annotation with @Table, @TableId, @TableColumn,Or rewrite a SQLStatement that implements the table name, ID, and returns the column to pass to CommonSQL
130 | //JDBCPool can be another database client
131 | //Override other methods
132 | }
133 | ```
134 | 3.Execute
135 |
136 | ``` java
137 | public static void main(String[] args) {
138 | // Other necessary
139 | UserSQL userSQL = new UserSQL(SQLExecute.createJDBC(JDBCPool));
140 | // Query Example
141 | // Create SqlAssist
142 | SqlAssist assist = new SqlAssist();
143 | assist.setStartRow(0).setRowSize(15);
144 | assist.andEq("type", 1);
145 | assist.setOrders(SqlAssist.order("id", true));
146 | // Execution query
147 | userSQL.selectAll(assist,res->{
148 | if (res.succeeded()) {
149 | System.out.println(res.result());
150 | }else {
151 | System.err.println(res.cause());
152 | }
153 | });
154 | //Save Example
155 | User user =new User();
156 | user.setId(1001L);
157 | user.setName("org.mirrentools");
158 | user.setType(1);
159 | userSQL.insertNonEmpty(user,res->{//Processed results});
160 |
161 | }
162 | ```
163 | ## common setting
164 | **Set different database SQL statements** SQL statement uses MySQL standard statement by default,You can set different database SQL statements through SQLStatement,support : MySQL、PostgreSQL、Oracle、DB2、SQL Server、SQLite,For example, if you set it to Oracle, you can:
165 | ``` java
166 | SQLStatement.register(OracleStatementSQL.class);
167 | ```
168 | **Set limit data return result name** The default value of data return result name is:totals=Total data rows,pages=Total data pages ,page=Current page number,size=How many rows of data are displayed per page,data=Result data,If you want to change the data result name to something else, you can:
169 | ``` java
170 | SqlLimitResult.registerResultKey("totals", "counts");
171 | ```
172 |
--------------------------------------------------------------------------------
/README.zh.md:
--------------------------------------------------------------------------------
1 | # vertx-sql-assist
2 | 其他语言版本: [English](./README.md), [简体中文](./README.zh.md).
3 |
4 | vertx-sql-assist是 [Vert.x](https://vertx.io/) 的SQL操作帮助工具,它提供了增删改查、连接、分页等支持,配合SqlAssist帮助类自己基本不用写一行SQL代码。
5 |
6 | 我们推荐你使用 [ScrewDriver](https://github.com/MirrenTools/screw-driver) 来生成代码,这样你会发现世界非常美好!
7 | ## 添加依赖
8 | ``` XML
9 |
10 | org.mirrentools
11 | vertx-sql-assist
12 | RELEASE
13 |
14 | ```
15 | ## SQL类方法说明
16 | * **getCount** 获取数据总行数
17 | * **selectAll** 查询多行数据
18 | * **limitAll** 分页查询
19 | * **selectById** 通过id查询数据
20 | * **selectByObj** 通过对象中不为空的属性查询数据
21 | * **selectSingleByObj** 通过对象中不为空的属性查询数据只取返回的第一行数据
22 | * **insertBatch** 批量添加插入对象
23 | * **insertAll** 插入一个对象包括属性值为null的值
24 | * **insertNonEmpty** 插入一个对象,只插入对象中值不为null的属性
25 | * **insertNonEmptyGeneratedKeys** 插入一个对象,只插入对象中值不为null的属性,并返回自增的id
26 | * **replace** 插入一个对象,如果该对象不存在就新建如果该对象已经存在就更新
27 | * **updateAllById** 更新一个对象中所有的属性包括null值,条件为对象中的主键值
28 | * **updateAllByAssist** 更新一个对象中所有的属性包括null值,条件为SqlAssist帮助类
29 | * **updateNonEmptyById** 更新一个对象中属性不为null值,条件为对象中的主键值
30 | * **updateNonEmptyByAssist** 更新一个对象中属性不为null值,条件为SqlAssist帮助类
31 | * **updateSetNullById** 通过主键值设置指定的列为空
32 | * **updateSetNullByAssist** 通过Assist作为条件设置指定的列为空
33 | * **deleteById** 通过主键值删除对应的数据行
34 | * **deleteByAssist** 通过SqlAssist条件集删除对应的数据行
35 | * **queryAsObj** 执行查询结果为JsonObject
36 | * **queryAsList** 执行查询结果为List
37 | * **update** 执行更新等操作得到受影响的行数
38 | * **updateResult** 执行更新等操作得到想要的结果,比如自增的id
39 | * **batch** 批量执行
40 | * **execute** 原生执行
41 |
42 | ## SqlAssist方法说明
43 | * **setOrders** 设置排序,通过SqlAssist.order(列名,排序方式)
44 | * **setGroupBy** 设置分组
45 | * **setHaving** 设置分组条件
46 | * **setDistincts** 设置是否去重,true去重
47 | * **setPage** 设置第几页,该值仅在limitAll方法中有效,最终会被转换为startRow
48 | * **setStartRow** 设置从第几行开始取数据
49 | * **setRowSize** 设置每次取多少行数据
50 | * **setResultColumn** 设置自定义返回列,多个列以,逗号隔开
51 | * **setJoinOrReference** 设置连接查询或多表查询语句
52 | * **and** 添加并且条件
53 | * **or** 添加或者条件
54 | * **andEq** 添加并且等于条件
55 | * **orEq** 添加或者等于条件
56 | * **andNeq** 添加并且不等于条件
57 | * **orNeq** 添加或者不等于条件
58 | * **andLt** 添加并且小于条件
59 | * **orLt** 添加或者小于条件
60 | * **andLte** 添加并且小于等于条件
61 | * **orLte** 添加或者小于等于条件
62 | * **andGt** 添加并且大于条件
63 | * **orGt** 添加或者大于条件
64 | * **andGte** 添加并且大于等于条件
65 | * **orGte** 添加或者大于等于条件
66 | * **andLike** 添加并且like条件
67 | * **orLike** 添加或者like条件
68 | * **andNotLike** 添加并且not like条件
69 | * **orNotLike** 添加或者not like条件
70 | * **andisNull** 添加并且is null条件
71 | * **orisNull** 添加或者is null条件
72 | * **andIsNotNull** 添加并且is not null条件
73 | * **orIsNotNull** 添加或者is not null条件
74 | * **setConditions** 添加查询条件
75 | * **customCondition** 添加自定义查询条件
76 |
77 | ## SqlAssist使用示例
78 | [示例项目](https://github.com/shenzhenMirren/vertx-sql-assist-examples)
79 |
80 |
81 | ``` java
82 | // (1)创建Assist帮助类
83 | SqlAssist assist = new SqlAssist();
84 | // (2)添加条件type=1或3,相当于SQL: where type=1 or type=3
85 | assist.orEq("type", 1).orEq("type", 3);
86 | // (3)去掉重复的数据,相当于SQL: select distinct ...
87 | assist.setDistincts(true);
88 | // (4)自定义只返回id,type,name,seq列
89 | assist.setResultColumn("id,type,name,seq");
90 | // (5)通过seq类倒序排序,相当于SQL: order by seq desc
91 | assist.setOrders(SqlAssist.order("seq", false));
92 | // (6)获取数据库中第20-35行的数据,你也可以使用setPage(第几页)的方式进行分页获取,相当于SQL: limit 20,15
93 | assist.setStartRow(20).setRowSize(15);
94 | // (7)执行获取数据
95 | Future future=Promise.promise().future();
96 | future.setHandler(//处理结果);
97 | itemsSQL.selectAll(assist,future);
98 | ```
99 | 具体使用方式可以查看SqlAssist类的方法注释,如果不清楚的可以在ScrewDriver群里咨询
100 |
101 |
102 | ## 使用方法
103 |
104 | **示例**
105 |
106 | 1.创建实体类
107 |
108 | ``` java
109 | //添加表注释
110 | @Table("表的名称")
111 | public class User {
112 | @TableId("主键id")
113 | private Long id;
114 | @TableColumn("列的名称")
115 | private String name;
116 | @TableColumn(value = "列的名称", alias = "列的别名,不是必须")
117 | private Integer type;
118 | //其他必须的
119 | }
120 | ```
121 | 2.创建SQL类并继承CommonSQL
122 |
123 | ``` java
124 | public class UserSQL extends CommonSQL {//(1)
125 | public UserSQL(SQLExecute execute) {
126 | super(execute);
127 | }
128 | // (1)
129 | // User 必须是有@Table, @TableId,@TableColumn注解的实体类,或重写一个实现了表名,id,返回列的SQLStatement传给CommonSQL
130 | // JDBCPool 可以是别的数据库客户端
131 | //实现其他的方法
132 | }
133 | ```
134 | 3.执行
135 |
136 | ``` java
137 | public static void main(String[] args) {
138 | // 其他已省略的变量
139 | UserSQL userSQL = new UserSQL(SQLExecute.createJDBC(JDBCPool));
140 | // 查询示例
141 | // 创建帮助类
142 | SqlAssist assist = new SqlAssist();
143 | assist.setStartRow(0).setRowSize(15);
144 | assist.andEq("type", 1);
145 | assist.setOrders(SqlAssist.order("id", true));
146 | // 执行查询
147 | userSQL.selectAll(assist,res->{
148 | if (res.succeeded()) {
149 | System.out.println(res.result());
150 | }else {
151 | System.err.println(res.cause());
152 | }
153 | });
154 | //保存示例
155 | User user =new User();
156 | user.setId(1001L);
157 | user.setName("org.mirrentools");
158 | user.setType(1);
159 | userSQL.insertNonEmpty(user,res->{//Processed results});
160 | }
161 | ```
162 | ## 通用设置
163 | **设置不同数据库SQL语句** 默认使用MySQL标准的SQL语句,你可以通过SQLStatement设置为不同的数据库SQL语句,支持MySQL、PostgreSQL、Oracle、DB2、SQL Server、SQLite,比如设置为Oracle你可以这样:
164 | ``` java
165 | SQLStatement.register(OracleStatementSQL.class);
166 | ```
167 | **设置分页返回结果名称** 分页获取数据返回的名称默认为:totals=数据总行数,pages=数据总页数 ,page=当前是第几页,size=每页显示多少行数据,data=数据,如果你要将名称改为其他的你可以这样:
168 | ``` java
169 | SqlLimitResult.registerResultKey("totals", "counts");
170 | ```
--------------------------------------------------------------------------------
/data/sqlite.db:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/MirrenTools/vertx-sql-assist/1e652bee31318cf257ba352100e753da319f122a/data/sqlite.db
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
4 | 4.0.0
5 |
6 | org.mirrentools
7 | vertx-sql-assist
8 | 4.1.5
9 | jar
10 | vertx-sql-assist
11 | vertx-sql-assist is the SQL operation help tool of Vert.x,
12 | which provides the support of insert, delete, update, query, join,
13 | paging query, cooperate with SqlAssist help class, it basically does
14 | not need to write a line of SQL code.
15 | https://mirrentools.org
16 |
17 |
18 | UTF-8
19 | 4.1.4
20 |
21 |
22 |
23 |
24 | junit
25 | junit
26 | 4.13.1
27 | test
28 | true
29 |
30 |
31 | io.vertx
32 | vertx-unit
33 | ${vertx.version}
34 | test
35 | true
36 |
37 |
38 | io.vertx
39 | vertx-core
40 | ${vertx.version}
41 | true
42 |
43 |
44 | io.vertx
45 | vertx-jdbc-client
46 | ${vertx.version}
47 | true
48 |
49 |
50 | io.vertx
51 | vertx-pg-client
52 | ${vertx.version}
53 | true
54 |
55 |
56 | io.vertx
57 | vertx-mysql-client
58 | ${vertx.version}
59 | true
60 |
61 |
62 | io.vertx
63 | vertx-db2-client
64 | ${vertx.version}
65 | true
66 |
67 |
68 | mysql
69 | mysql-connector-java
70 | 8.0.16
71 | test
72 | true
73 |
74 |
75 | org.xerial
76 | sqlite-jdbc
77 | 3.8.11.2
78 | test
79 | true
80 |
81 |
82 | org.mirrentools
83 | screw-driver
84 | 1.2.4
85 | test
86 | true
87 |
88 |
89 |
90 |
91 |
92 |
93 | org.apache.maven.plugins
94 | maven-compiler-plugin
95 | 2.3.2
96 |
97 | 1.8
98 | 1.8
99 | UTF-8
100 |
101 |
102 |
103 |
104 |
105 |
106 | ossrh
107 | https://oss.sonatype.org/content/repositories/snapshots
108 |
109 |
110 | ossrh
111 | https://oss.sonatype.org/service/local/staging/deploy/maven2
112 |
113 |
114 |
115 |
116 |
117 | release
118 |
119 |
120 |
121 | org.sonatype.plugins
122 | nexus-staging-maven-plugin
123 | 1.6.3
124 | true
125 |
126 | ossrh
127 | https://oss.sonatype.org/
128 | true
129 |
130 |
131 |
132 | org.apache.maven.plugins
133 | maven-release-plugin
134 | 2.3.2
135 |
136 | true
137 | false
138 | release
139 | deploy
140 |
141 |
142 |
143 | org.apache.maven.plugins
144 | maven-compiler-plugin
145 | 2.3.2
146 |
147 | 1.8
148 | 1.8
149 | UTF-8
150 |
151 |
152 |
153 | org.apache.maven.plugins
154 | maven-gpg-plugin
155 | 1.6
156 |
157 |
158 | sign-artifacts
159 | verify
160 |
161 | sign
162 |
163 |
164 |
165 |
166 |
167 | org.apache.maven.plugins
168 | maven-source-plugin
169 | 3.0.1
170 |
171 |
172 | attach-sources
173 |
174 | jar-no-fork
175 |
176 |
177 |
178 |
179 |
180 | maven-javadoc-plugin
181 | 3.0.1
182 |
183 |
184 | package
185 |
186 | jar
187 |
188 |
189 |
190 |
191 | false
192 | none
193 | public
194 | UTF-8
195 | UTF-8
196 | UTF-8
197 |
198 | http://docs.oracle.com/javase/8/docs/api
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 | https://github.com/MirrenTools/vertx-sql-assist
209 | https://github.com/MirrenTools/vertx-sql-assist.git
210 |
211 |
212 |
213 | Mirren Tools
214 | https://mirrentools.org/
215 |
216 |
217 |
218 |
219 | MIT License
220 | https://raw.githubusercontent.com/xtuhcy/gecco/master/LICENSE
221 |
222 |
223 |
224 |
225 |
226 |
227 | Mirren
228 | szmirren@qq.com
229 | https://mirrentools.org/
230 |
231 |
232 |
233 |
--------------------------------------------------------------------------------
/src/main/java/io/vertx/ext/sql/assist/CommonSQL.java:
--------------------------------------------------------------------------------
1 | package io.vertx.ext.sql.assist;
2 |
3 | import java.lang.reflect.ParameterizedType;
4 | import java.util.List;
5 |
6 | import io.vertx.core.AsyncResult;
7 | import io.vertx.core.Handler;
8 | import io.vertx.core.json.JsonObject;
9 | import io.vertx.sqlclient.PropertyKind;
10 | import io.vertx.sqlclient.Row;
11 | import io.vertx.sqlclient.RowSet;
12 | import io.vertx.sqlclient.Tuple;
13 |
14 | /**
15 | * 通用的数据库操作客户端的默认实现,
16 | *
17 | * @author Mirren
18 | *
19 | * @param
20 | * 实体类的类型
21 | * @param
22 | * SQL执行器的客户端类型,比如JDBCClient
23 | */
24 | public abstract class CommonSQL implements CommonSQLClinet {
25 | /** SQL 执行器 */
26 | private SQLExecute execute;
27 | /** SQL 命令 */
28 | private SQLCommand command;
29 |
30 | /**
31 | * 使用以注册或默认的{@link SQLStatement}
32 | *
33 | * @param entityClz
34 | * 实体类,类必须包含{@link Table} {@link TableId} {@link TableColumn}注解
35 | * @param execute
36 | * 执行器
37 | */
38 | public CommonSQL(SQLExecute execute) {
39 | Class> entityClz = (Class>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
40 | SQLStatement statement = SQLStatement.create(entityClz);
41 | this.execute = execute;
42 | this.command = new SQLCommandImpl(statement, execute);
43 | }
44 |
45 | /**
46 | * 使用自定义的{@link SQLStatement}
47 | *
48 | * @param execute
49 | * SQL执行器
50 | * @param statement
51 | * SQL执行语句
52 | */
53 | public CommonSQL(SQLExecute execute, SQLStatement statement) {
54 | this.command = new SQLCommandImpl(statement, execute);
55 | }
56 |
57 | /**
58 | * 获取客户端
59 | *
60 | * @return
61 | *
62 | */
63 | @Override
64 | public C getDbClient() {
65 | return execute.getClient();
66 | }
67 |
68 | @Override
69 | public void execute(SqlAndParams qp, Handler>> handler) {
70 | execute.execute(qp, handler);
71 | }
72 |
73 | @Override
74 | public void queryAsObj(SqlAndParams qp, Handler> handler) {
75 | execute.queryAsObj(qp, handler);
76 | }
77 |
78 | @Override
79 | public void queryAsList(SqlAndParams qp, Handler>> handler) {
80 | execute.queryAsList(qp, handler);
81 | }
82 |
83 | @Override
84 | public void update(SqlAndParams qp, Handler> handler) {
85 | execute.update(qp, handler);
86 | }
87 |
88 | @Override
89 | public void updateResult(SqlAndParams qp, PropertyKind property, Handler> handler) {
90 | execute.updateResult(qp, property, handler);
91 | }
92 |
93 | @Override
94 | public void batch(SqlAndParams qp, Handler> handler) {
95 | execute.batch(qp, handler);
96 | }
97 |
98 | @Override
99 | public void getCount(SqlAssist assist, Handler> handler) {
100 | command.getCount(assist, handler);
101 | }
102 |
103 | @Override
104 | public void selectAll(SqlAssist assist, Handler>> handler) {
105 | command.selectAll(assist, handler);
106 | }
107 |
108 | @Override
109 | public void limitAll(SqlAssist assist, Handler> handler) {
110 | command.limitAll(assist, handler);
111 | }
112 |
113 | @Override
114 | public void selectById(S primaryValue, String resultColumns, String tableAlias, String joinOrReference,
115 | Handler> handler) {
116 | command.selectById(primaryValue, resultColumns, tableAlias, joinOrReference, handler);
117 | }
118 |
119 | @Override
120 | public void selectSingleByObj(T obj, String resultColumns, String tableAlias, String joinOrReference,
121 | Handler> handler) {
122 | command.selectSingleByObj(obj, resultColumns, tableAlias, joinOrReference, handler);
123 | }
124 |
125 | @Override
126 | public void selectByObj(T obj, String resultColumns, String tableAlias, String joinOrReference,
127 | Handler>> handler) {
128 | command.selectByObj(obj, resultColumns, tableAlias, joinOrReference, handler);
129 | }
130 |
131 | @Override
132 | public void insertAll(T obj, Handler> handler) {
133 | command.insertAll(obj, handler);
134 | }
135 |
136 | @Override
137 | public void insertNonEmpty(T obj, Handler> handler) {
138 | command.insertNonEmpty(obj, handler);
139 | }
140 |
141 | @Override
142 | public void insertNonEmptyGeneratedKeys(T obj, PropertyKind property, Handler> handler) {
143 | command.insertNonEmptyGeneratedKeys(obj, property, handler);
144 | }
145 |
146 | @Override
147 | public void insertBatch(List list, Handler> handler) {
148 | command.insertBatch(list, handler);
149 | }
150 |
151 | @Override
152 | public void insertBatch(List columns, List params, Handler> handler) {
153 | command.insertBatch(columns, params, handler);
154 | }
155 |
156 | @Override
157 | public void replace(T obj, Handler> handler) {
158 | command.replace(obj, handler);
159 | }
160 |
161 | @Override
162 | public void updateAllById(T obj, Handler> handler) {
163 | command.updateAllById(obj, handler);
164 | }
165 |
166 | @Override
167 | public void updateAllByAssist(T obj, SqlAssist assist, Handler> handler) {
168 | command.updateAllByAssist(obj, assist, handler);
169 | }
170 |
171 | @Override
172 | public void updateNonEmptyById(T obj, Handler> handler) {
173 | command.updateNonEmptyById(obj, handler);
174 | }
175 |
176 | @Override
177 | public void updateNonEmptyByAssist(T obj, SqlAssist assist, Handler> handler) {
178 | command.updateNonEmptyByAssist(obj, assist, handler);
179 | }
180 |
181 | @Override
182 | public void updateSetNullById(S primaryValue, List columns, Handler> handler) {
183 | command.updateSetNullById(primaryValue, columns, handler);
184 | }
185 |
186 | @Override
187 | public void updateSetNullByAssist(SqlAssist assist, List columns, Handler> handler) {
188 | command.updateSetNullByAssist(assist, columns, handler);
189 | }
190 |
191 | @Override
192 | public void deleteById(S primaryValue, Handler> handler) {
193 | command.deleteById(primaryValue, handler);
194 | }
195 |
196 | @Override
197 | public void deleteByAssist(SqlAssist assist, Handler> handler) {
198 | command.deleteByAssist(assist, handler);
199 | }
200 | }
201 |
--------------------------------------------------------------------------------
/src/main/java/io/vertx/ext/sql/assist/CommonSQLClinet.java:
--------------------------------------------------------------------------------
1 | package io.vertx.ext.sql.assist;
2 |
3 | import java.util.List;
4 |
5 | import io.vertx.core.AsyncResult;
6 | import io.vertx.core.Future;
7 | import io.vertx.core.Handler;
8 | import io.vertx.core.Promise;
9 | import io.vertx.core.json.JsonObject;
10 | import io.vertx.sqlclient.PropertyKind;
11 | import io.vertx.sqlclient.Row;
12 | import io.vertx.sqlclient.RowSet;
13 | import io.vertx.sqlclient.Tuple;
14 |
15 | /**
16 | * 通用的数据库操作客户端
17 | *
18 | * @author Mirren
19 | *
20 | * @param
21 | * SQL执行器的客户端类型,比如JDBCClient
22 | */
23 | public interface CommonSQLClinet {
24 | /**
25 | * 获取客户端
26 | *
27 | * @return
28 | */
29 | C getDbClient();
30 |
31 | /**
32 | * 执行SQL
33 | *
34 | * @param qp
35 | * SQL语句与参数
36 | * @param handler
37 | * 返回结果
38 | */
39 | default Future> execute(SqlAndParams qp) {
40 | Promise> promise = Promise.promise();
41 | execute(qp, promise);
42 | return promise.future();
43 | }
44 |
45 | /**
46 | * 执行SQL
47 | *
48 | * @param qp
49 | * SQL语句与参数
50 | * @param handler
51 | * 返回结果
52 | */
53 | void execute(SqlAndParams qp, Handler>> handler);
54 |
55 | /**
56 | * 执行查询结果为单个对象
57 | *
58 | * @param qp
59 | * SQL语句与参数
60 | * @param handler
61 | * 返回结果
62 | */
63 | default Future queryAsObj(SqlAndParams qp) {
64 | Promise promise = Promise.promise();
65 | queryAsObj(qp, promise);
66 | return promise.future();
67 | }
68 |
69 | /**
70 | * 执行查询结果为单个对象
71 | *
72 | * @param qp
73 | * SQL语句与参数
74 | * @param handler
75 | * 返回结果
76 | */
77 | void queryAsObj(SqlAndParams qp, Handler> handler);
78 |
79 | /**
80 | * 执行查询多个对象
81 | *
82 | * @param qp
83 | * SQL语句与参数
84 | * @return 返回结果
85 | */
86 | default Future> queryAsList(SqlAndParams qp) {
87 | Promise> promise = Promise.promise();
88 | queryAsList(qp, promise);
89 | return promise.future();
90 | }
91 |
92 | /**
93 | * 执行查询多个对象
94 | *
95 | * @param qp
96 | * SQL语句与参数
97 | * @param handler
98 | * 返回结果
99 | */
100 | void queryAsList(SqlAndParams qp, Handler>> handler);
101 |
102 | /**
103 | * 执行更新等操作得到受影响的行数
104 | *
105 | * @param qp
106 | * SQL语句与参数
107 | *
108 | * @return 受影响的行数
109 | */
110 | default Future update(SqlAndParams qp) {
111 | Promise promise = Promise.promise();
112 | update(qp, promise);
113 | return promise.future();
114 | }
115 |
116 | /**
117 | * 执行更新等操作得到受影响的行数
118 | *
119 | * @param qp
120 | * SQL语句与参数
121 | *
122 | * @param handler
123 | */
124 | void update(SqlAndParams qp, Handler> handler);
125 |
126 | /**
127 | * 执行更新并获得操作结果
128 | *
129 | * @param qp
130 | * SQL语句与参数
131 | * @param property
132 | * 返回结果的PropertyKind名称,比如JDBCPool.GENERATED_KEYS或MySQLClient.LAST_INSERTED_ID
133 | * @param handler
134 | */
135 | default Future updateResult(SqlAndParams qp, PropertyKind property) {
136 | Promise promise = Promise.promise();
137 | updateResult(qp, property, promise);
138 | return promise.future();
139 | }
140 |
141 | /**
142 | * 执行更新并获得操作结果
143 | *
144 | * @param qp
145 | * SQL语句与参数
146 | * @param property
147 | * 返回结果的PropertyKind名称,比如JDBCPool.GENERATED_KEYS或MySQLClient.LAST_INSERTED_ID
148 | * @param handler
149 | */
150 | void updateResult(SqlAndParams qp, PropertyKind property, Handler> handler);
151 |
152 | /**
153 | * 批量操作
154 | *
155 | * @param qp
156 | * SQL语句与批量参数
157 | *
158 | * @return 返回结果
159 | */
160 | default Future batch(SqlAndParams qp) {
161 | Promise promise = Promise.promise();
162 | batch(qp, promise);
163 | return promise.future();
164 | }
165 |
166 | /**
167 | * 批量操作
168 | *
169 | * @param qp
170 | * SQL语句与批量参数
171 | *
172 | * @param handler
173 | * 返回结果
174 | */
175 | void batch(SqlAndParams qp, Handler> handler);
176 |
177 | /**
178 | * 获得数据总行数
179 | *
180 | */
181 | default Future getCount() {
182 | Promise promise = Promise.promise();
183 | getCount(null, promise);
184 | return promise.future();
185 | }
186 |
187 | /**
188 | * 获得数据总行数
189 | *
190 | * @param handler
191 | * 返回数据总行数
192 | */
193 | default void getCount(Handler> handler) {
194 | getCount(null, handler);
195 | }
196 |
197 | /**
198 | * 获取数据总行数
199 | *
200 | * @param assist
201 | * 查询工具,如果没有可以为null
202 | * @return
203 | */
204 | default Future getCount(SqlAssist assist) {
205 | Promise promise = Promise.promise();
206 | getCount(assist, promise);
207 | return promise.future();
208 | }
209 |
210 | /**
211 | * 获取数据总行数
212 | *
213 | * @param assist
214 | * 查询工具,如果没有可以为null
215 | * @param handler
216 | * 返回数据总行数
217 | */
218 | void getCount(SqlAssist assist, Handler> handler);
219 |
220 | /**
221 | * 查询所有数据
222 | *
223 | * @return
224 | */
225 | default Future> selectAll() {
226 | Promise> promise = Promise.promise();
227 | selectAll(null, promise);
228 | return promise.future();
229 | }
230 |
231 | /**
232 | * 查询所有数据
233 | *
234 | * @param handler
235 | * 结果集
236 | */
237 | default void selectAll(Handler>> handler) {
238 | selectAll(null, handler);
239 | }
240 |
241 | /**
242 | * 通过查询工具查询所有数据
243 | *
244 | * @param assist
245 | * 查询工具帮助类
246 | * @return
247 | */
248 | default Future> selectAll(SqlAssist assist) {
249 | Promise> promise = Promise.promise();
250 | selectAll(assist, promise);
251 | return promise.future();
252 | }
253 |
254 | /**
255 | * 通过查询工具查询所有数据
256 | *
257 | * @param assist
258 | * 查询工具帮助类
259 | * @param handler
260 | * 结果集
261 | */
262 | void selectAll(SqlAssist assist, Handler>> handler);
263 |
264 | /**
265 | * 页查询,默认page=1,rowSize=15(取第一页,每页取15行数据)
266 | *
267 | * @param assist
268 | * 查询工具(注意:startRow在该方法中无效,最后会有page转换为startRow)
269 | * @return 返回结果为(JsonObject)格式为: {@link SqlLimitResult#toJson()}
270 | */
271 | default Future limitAll(final SqlAssist assist) {
272 | Promise promise = Promise.promise();
273 | limitAll(assist, promise);
274 | return promise.future();
275 | }
276 |
277 | /**
278 | * 分页查询,默认page=1,rowSize=15(取第一页,每页取15行数据)
279 | *
280 | * @param assist
281 | * 查询工具(注意:startRow在该方法中无效,最后会有page转换为startRow)
282 | * @param handler
283 | * 返回结果为(JsonObject)格式为: {@link SqlLimitResult#toJson()}
284 | */
285 | void limitAll(final SqlAssist assist, Handler> handler);
286 |
287 | /**
288 | * 通过ID查询出数据
289 | *
290 | * @param primaryValue
291 | * 主键值
292 | * @return 返回结果:如果查询得到返回JsonObject如果查询不到返回null
293 | */
294 | default Future selectById(S primaryValue) {
295 | Promise promise = Promise.promise();
296 | selectById(primaryValue, null, null, null, promise);
297 | return promise.future();
298 | }
299 |
300 | /**
301 | * 通过ID查询出数据
302 | *
303 | * @param primaryValue
304 | * 主键值
305 | * @param handler
306 | * 返回结果:如果查询得到返回JsonObject如果查询不到返回null
307 | */
308 | default void selectById(S primaryValue, Handler> handler) {
309 | selectById(primaryValue, null, null, null, handler);
310 | }
311 |
312 | /**
313 | * 通过ID查询出数据
314 | *
315 | * @param primaryValue
316 | * 主键值
317 | * @param resultColumns
318 | * 自定义返回列
319 | * @return 返回结果:如果查询得到返回JsonObject如果查询不到返回null
320 | */
321 | default Future selectById(S primaryValue, String resultColumns) {
322 | Promise promise = Promise.promise();
323 | selectById(primaryValue, resultColumns, null, null, promise);
324 | return promise.future();
325 | }
326 |
327 | /**
328 | * 通过ID查询出数据
329 | *
330 | * @param primaryValue
331 | * 主键值
332 | * @param resultColumns
333 | * 自定义返回列
334 | * @param handler
335 | * 返回结果:如果查询得到返回JsonObject如果查询不到返回null
336 | */
337 | default void selectById(S primaryValue, String resultColumns, Handler> handler) {
338 | selectById(primaryValue, resultColumns, null, null, handler);
339 | }
340 |
341 | /**
342 | * 通过ID查询出数据,并自定义返回列
343 | *
344 | * @param primaryValue
345 | * 主键值
346 | * @param resultColumns
347 | * 自定义返回列
348 | * @param tableAlias
349 | * 当前表的别名
350 | * @param joinOrReference
351 | * 多表查询或表连接的语句,示例 inner join table2 as t2 on t.id=t2.id
352 | * @return 返回结果:如果查询得到返回JsonObject如果查询不到返回null
353 | */
354 | default Future selectById(S primaryValue, String resultColumns, String tableAlias, String joinOrReference) {
355 | Promise promise = Promise.promise();
356 | selectById(primaryValue, resultColumns, tableAlias, joinOrReference, promise);
357 | return promise.future();
358 | }
359 | /**
360 | * 通过ID查询出数据,并自定义返回列
361 | *
362 | * @param primaryValue
363 | * 主键值
364 | * @param resultColumns
365 | * 自定义返回列
366 | * @param tableAlias
367 | * 当前表的别名
368 | * @param joinOrReference
369 | * 多表查询或表连接的语句,示例 inner join table2 as t2 on t.id=t2.id
370 | * @param handler
371 | * 返回结果:如果查询得到返回JsonObject如果查询不到返回null
372 | */
373 | void selectById(S primaryValue, String resultColumns, String tableAlias, String joinOrReference,
374 | Handler> handler);
375 |
376 | /**
377 | * 将对象属性不为null的属性作为条件查询出数据,只取查询出来的第一条数据;
378 | *
379 | * @param obj
380 | * 对象
381 | *
382 | * @return 结果:如果存在返回JsonObject,不存在返回null
383 | */
384 | default Future selectSingleByObj(T obj) {
385 | Promise promise = Promise.promise();
386 | selectSingleByObj(obj, null, null, null, promise);
387 | return promise.future();
388 | }
389 |
390 | /**
391 | * 将对象属性不为null的属性作为条件查询出数据,只取查询出来的第一条数据;
392 | *
393 | * @param obj
394 | * 对象
395 | *
396 | * @param handler
397 | * 结果:如果存在返回JsonObject,不存在返回null
398 | */
399 | default void selectSingleByObj(T obj, Handler> handler) {
400 | selectSingleByObj(obj, null, null, null, handler);
401 | }
402 |
403 | /**
404 | * 将对象属性不为null的属性作为条件查询出数据,只取查询出来的第一条数据
405 | *
406 | * @param obj
407 | * 对象
408 | * @param resultColumns
409 | * 自定义返回列
410 | *
411 | * @return 结果:如果存在返回JsonObject,不存在返回null
412 | */
413 | default Future selectSingleByObj(T obj, String resultColumns) {
414 | Promise promise = Promise.promise();
415 | selectSingleByObj(obj, resultColumns, null, null, promise);
416 | return promise.future();
417 | }
418 |
419 | /**
420 | * 将对象属性不为null的属性作为条件查询出数据,只取查询出来的第一条数据
421 | *
422 | * @param obj
423 | * 对象
424 | * @param resultColumns
425 | * 自定义返回列
426 | *
427 | * @param handler
428 | * 结果:如果存在返回JsonObject,不存在返回null
429 | */
430 | default void selectSingleByObj(T obj, String resultColumns, Handler> handler) {
431 | selectSingleByObj(obj, resultColumns, null, null, handler);
432 | }
433 |
434 | /**
435 | * 将对象属性不为null的属性作为条件查询出数据,只取查询出来的第一条数据
436 | *
437 | * @param obj
438 | * 对象
439 | * @param resultColumns
440 | * 自定义返回列
441 | * @param tableAlias
442 | * 当前表的别名
443 | * @param joinOrReference
444 | * 多表查询或表连接的语句,示例 inner join table2 as t2 on t.id=t2.id
445 | * @return 结果:如果存在返回JsonObject,不存在返回null
446 | */
447 | default Future selectSingleByObj(T obj, String resultColumns, String tableAlias, String joinOrReference) {
448 | Promise promise = Promise.promise();
449 | selectSingleByObj(obj, resultColumns, tableAlias, joinOrReference, promise);
450 | return promise.future();
451 | }
452 |
453 | /**
454 | * 将对象属性不为null的属性作为条件查询出数据,只取查询出来的第一条数据
455 | *
456 | * @param obj
457 | * 对象
458 | * @param resultColumns
459 | * 自定义返回列
460 | * @param tableAlias
461 | * 当前表的别名
462 | * @param joinOrReference
463 | * 多表查询或表连接的语句,示例 inner join table2 as t2 on t.id=t2.id
464 | * @param handler
465 | * 结果:如果存在返回JsonObject,不存在返回null
466 | */
467 | void selectSingleByObj(T obj, String resultColumns, String tableAlias, String joinOrReference,
468 | Handler> handler);
469 |
470 | /**
471 | * 将对象属性不为null的属性作为条件查询出数据
472 | *
473 | * @param obj
474 | * 对象
475 | *
476 | * @return 返回结果集
477 | */
478 | default Future> selectByObj(T obj) {
479 | Promise> promise = Promise.promise();
480 | selectByObj(obj, null, null, null, promise);
481 | return promise.future();
482 | }
483 |
484 | /**
485 | * 将对象属性不为null的属性作为条件查询出数据
486 | *
487 | * @param obj
488 | * 对象
489 | *
490 | * @param handler
491 | * 返回结果集
492 | */
493 | default void selectByObj(T obj, Handler>> handler) {
494 | selectByObj(obj, null, null, null, handler);
495 | }
496 |
497 | /**
498 | * 将对象属性不为null的属性作为条件查询出数据
499 | *
500 | * @param obj
501 | * 对象
502 | * @param resultColumns
503 | * 自定义返回列
504 | *
505 | * @return 返回结果集
506 | */
507 | default Future> selectByObj(T obj, String resultColumns) {
508 | Promise> promise = Promise.promise();
509 | selectByObj(obj, resultColumns, null, null, promise);
510 | return promise.future();
511 | }
512 |
513 | /**
514 | * 将对象属性不为null的属性作为条件查询出数据
515 | *
516 | * @param obj
517 | * 对象
518 | * @param resultColumns
519 | * 自定义返回列
520 | *
521 | * @param handler
522 | * 返回结果集
523 | */
524 | default void selectByObj(T obj, String resultColumns, Handler>> handler) {
525 | selectByObj(obj, resultColumns, null, null, handler);
526 | }
527 |
528 | /**
529 | * 将对象属性不为null的属性作为条件查询出数据
530 | *
531 | * @param obj
532 | * 对象
533 | * @param resultColumns
534 | * 自定义返回列
535 | * @param tableAlias
536 | * 当前表的别名
537 | * @param joinOrReference
538 | * 多表查询或表连接的语句,示例 inner join table2 as t2 on t.id=t2.id
539 | * @return 返回结果集
540 | */
541 | default Future> selectByObj(T obj, String resultColumns, String tableAlias, String joinOrReference) {
542 | Promise> promise = Promise.promise();
543 | selectByObj(obj, resultColumns, tableAlias, joinOrReference, promise);
544 | return promise.future();
545 | }
546 |
547 | /**
548 | * 将对象属性不为null的属性作为条件查询出数据
549 | *
550 | * @param obj
551 | * 对象
552 | * @param resultColumns
553 | * 自定义返回列
554 | * @param tableAlias
555 | * 当前表的别名
556 | * @param joinOrReference
557 | * 多表查询或表连接的语句,示例 inner join table2 as t2 on t.id=t2.id
558 | * @param handler
559 | * 返回结果集
560 | */
561 | void selectByObj(T obj, String resultColumns, String tableAlias, String joinOrReference,
562 | Handler>> handler);
563 |
564 | /**
565 | * 插入一个对象包括属性值为null的值
566 | *
567 | * @param obj
568 | * 对象
569 | * @return 返回操作结果受影响的行数
570 | */
571 | default Future insertAll(T obj) {
572 | Promise promise = Promise.promise();
573 | insertAll(obj, promise);
574 | return promise.future();
575 | }
576 |
577 | /**
578 | * 插入一个对象包括属性值为null的值
579 | *
580 | * @param obj
581 | * 对象
582 | * @param handler
583 | * 返回操作结果
584 | */
585 | void insertAll(T obj, Handler> handler);
586 |
587 | /**
588 | * 插入一个对象,只插入对象中值不为null的属性
589 | *
590 | * @param obj
591 | * 对象
592 | * @return 返回操作结果
593 | */
594 | default Future insertNonEmpty(T obj) {
595 | Promise promise = Promise.promise();
596 | insertNonEmpty(obj, promise);
597 | return promise.future();
598 | }
599 |
600 | /**
601 | * 插入一个对象,只插入对象中值不为null的属性
602 | *
603 | * @param obj
604 | * 对象
605 | * @param handler
606 | * 返回操作结果
607 | */
608 | void insertNonEmpty(T obj, Handler> handler);
609 |
610 | /**
611 | * 插入一个对象,只插入对象中值不为null的属性,并返回自增的结果
612 | *
613 | * @param obj
614 | * 对象
615 | * @return 返回操作结果
616 | */
617 | /**
618 | *
619 | * @param
620 | * @param obj
621 | * 对象
622 | * @param property
623 | * 获取属性的方法,比如JDBCPool使用传入JDBCPool.GENERATED_KEYS,MySQLPool使用PropertyKind.create("last-inserted-id",数据类型)
624 | * @return
625 | */
626 | default Future insertNonEmptyGeneratedKeys(T obj, PropertyKind property) {
627 | Promise promise = Promise.promise();
628 | insertNonEmptyGeneratedKeys(obj, property, promise);
629 | return promise.future();
630 | }
631 |
632 | /**
633 | * 插入一个对象,只插入对象中值不为null的属性,并返回自增的结果
634 | *
635 | * @param obj
636 | * 对象
637 | * @param property
638 | * 获取属性的方法,比如JDBCPool使用传入JDBCPool.GENERATED_KEYS,MySQLPool使用PropertyKind.create("last-inserted-id",数据类型)
639 | * @param handler
640 | * 返回操作结果
641 | */
642 | void insertNonEmptyGeneratedKeys(T obj, PropertyKind property, Handler> handler);
643 |
644 | /**
645 | * 批量添加全部所有字段
646 | *
647 | * @param list
648 | * 对象
649 | * @return 成功返回受影响的行数,如果对象为null或空则返回0
650 | */
651 | default Future insertBatch(List list) {
652 | Promise promise = Promise.promise();
653 | insertBatch(list, promise);
654 | return promise.future();
655 | }
656 |
657 | /**
658 | * 批量添加全部所有字段
659 | *
660 | * @param list
661 | * 对象
662 | * @param handler
663 | * 成功返回受影响的行数,如果对象为null或空则返回0
664 | */
665 | void insertBatch(List list, Handler> handler);
666 | /**
667 | * 批量添加自定字段
668 | *
669 | * @param column
670 | * 字段的名称示例:["id","name",...]
671 | * @param params
672 | * 字段对应的参数示例:[["id","name"],["id","name"]...]
673 | * @return 成功返回受影响的行数,如果字段或字段参数为null或空则返回0
674 | */
675 | default Future insertBatch(List columns, List params) {
676 | Promise promise = Promise.promise();
677 | insertBatch(columns, params, promise);
678 | return promise.future();
679 | }
680 |
681 | /**
682 | * 批量添加自定字段
683 | *
684 | * @param column
685 | * 字段的名称示例:["id","name",...]
686 | * @param params
687 | * 字段对应的参数示例:[["id","name"],["id","name"]...]
688 | * @param handler
689 | * 成功返回受影响的行数,如果字段或字段参数为null或空则返回0
690 | */
691 | void insertBatch(List columns, List params, Handler> handler);
692 |
693 | /**
694 | * 插入一个对象,如果该对象不存在就新建如果该对象已经存在就更新
695 | *
696 | * @param obj
697 | * 对象
698 | *
699 | * @return 结果集受影响的行数
700 | */
701 | default Future replace(T obj) {
702 | Promise promise = Promise.promise();
703 | replace(obj, promise);
704 | return promise.future();
705 | }
706 |
707 | /**
708 | * 插入一个对象,如果该对象不存在就新建如果该对象已经存在就更新
709 | *
710 | * @param obj
711 | * 对象
712 | *
713 | * @param handler
714 | * 结果集受影响的行数
715 | */
716 | void replace(T obj, Handler> handler);
717 |
718 | /**
719 | * 更新一个对象中所有的属性包括null值,条件为对象中的主键值
720 | *
721 | * @param obj
722 | * 对象
723 | *
724 | * @return 返回操作结果
725 | */
726 | default Future updateAllById(T obj) {
727 | Promise promise = Promise.promise();
728 | updateAllById(obj, promise);
729 | return promise.future();
730 | }
731 |
732 | /**
733 | * 更新一个对象中所有的属性包括null值,条件为对象中的主键值
734 | *
735 | * @param obj
736 | * 对象
737 | *
738 | * @param handler
739 | * 返回操作结果
740 | */
741 | void updateAllById(T obj, Handler> handler);
742 |
743 | /**
744 | * 更新一个对象中所有的属性包括null值,条件为SqlAssist条件集
745 | *
746 | * @param obj
747 | * 对象
748 | * @param SqlAssist
749 | * sql帮助工具
750 | *
751 | * @return 返回操作结果
752 | */
753 | default Future updateAllByAssist(T obj, SqlAssist assist) {
754 | Promise promise = Promise.promise();
755 | updateAllByAssist(obj, assist, promise);
756 | return promise.future();
757 | }
758 |
759 | /**
760 | * 更新一个对象中所有的属性包括null值,条件为SqlAssist条件集
761 | *
762 | * @param obj
763 | * 对象
764 | * @param SqlAssist
765 | * sql帮助工具
766 | *
767 | * @param handler
768 | * 返回操作结果
769 | */
770 | void updateAllByAssist(T obj, SqlAssist assist, Handler> handler);
771 |
772 | /**
773 | * 更新一个对象中属性不为null值,条件为对象中的主键值
774 | *
775 | * @param obj
776 | * 对象
777 | * @return 返回操作结果
778 | */
779 | default Future updateNonEmptyById(T obj) {
780 | Promise promise = Promise.promise();
781 | updateNonEmptyById(obj, promise);
782 | return promise.future();
783 | }
784 | /**
785 | * 更新一个对象中属性不为null值,条件为对象中的主键值
786 | *
787 | * @param obj
788 | * 对象
789 | * @param handler
790 | * 返回操作结果
791 | */
792 | void updateNonEmptyById(T obj, Handler> handler);
793 |
794 | /**
795 | * 更新一个对象中属性不为null值,条件为SqlAssist条件集
796 | *
797 | * @param obj
798 | * 对象
799 | * @param assist
800 | * 查询工具
801 | * @return 返回操作结果
802 | */
803 | default Future updateNonEmptyByAssist(T obj, SqlAssist assist) {
804 | Promise promise = Promise.promise();
805 | updateNonEmptyByAssist(obj, assist, promise);
806 | return promise.future();
807 | }
808 |
809 | /**
810 | * 更新一个对象中属性不为null值,条件为SqlAssist条件集
811 | *
812 | * @param obj
813 | * 对象
814 | * @param assist
815 | * 查询工具
816 | * @param handler
817 | * 返回操作结果
818 | */
819 | void updateNonEmptyByAssist(T obj, SqlAssist assist, Handler> handler);
820 |
821 | /**
822 | * 通过主键值设置指定的列为空
823 | *
824 | * @param
825 | * @param primaryValue
826 | * 主键
827 | * @param columns
828 | * 要设置为null的列
829 | *
830 | * @return 返回操作结果
831 | */
832 | default Future updateSetNullById(S primaryValue, List columns) {
833 | Promise promise = Promise.promise();
834 | updateSetNullById(primaryValue, columns, promise);
835 | return promise.future();
836 | }
837 |
838 | /**
839 | * 通过主键值设置指定的列为空
840 | *
841 | * @param
842 | * @param primaryValue
843 | * 主键
844 | * @param columns
845 | * 要设置为null的列
846 | *
847 | * @param handler
848 | * 返回操作结果
849 | */
850 | void updateSetNullById(S primaryValue, List columns, Handler> handler);
851 |
852 | /**
853 | * 通过Assist作为条件设置指定的列为空
854 | *
855 | * @param assist
856 | * sql帮助工具
857 | * @param columns
858 | * 要设置为null的列
859 | *
860 | * @param handler
861 | * 返回操作结果
862 | */
863 | default Future updateSetNullByAssist(SqlAssist assist, List columns) {
864 | Promise promise = Promise.promise();
865 | updateSetNullByAssist(assist, columns, promise);
866 | return promise.future();
867 | }
868 |
869 | /**
870 | * 通过Assist作为条件设置指定的列为空
871 | *
872 | * @param assist
873 | * sql帮助工具
874 | * @param columns
875 | * 要设置为null的列
876 | *
877 | * @return handler 返回操作结果
878 | */
879 | void updateSetNullByAssist(SqlAssist assist, List columns, Handler> handler);
880 |
881 | /**
882 | * 通过主键值删除对应的数据行
883 | *
884 | * @param obj
885 | * 主键值
886 | * @return 返回操作结果
887 | */
888 | default Future deleteById(S primaryValue) {
889 | Promise promise = Promise.promise();
890 | deleteById(primaryValue, promise);
891 | return promise.future();
892 | }
893 |
894 | /**
895 | * 通过主键值删除对应的数据行
896 | *
897 | * @param obj
898 | * 主键值
899 | * @param handler
900 | * 返回操作结果
901 | */
902 | void deleteById(S primaryValue, Handler> handler);
903 |
904 | /**
905 | * 通过SqlAssist条件集删除对应的数据行
906 | *
907 | * @param assist
908 | * 条件集
909 | *
910 | * @return 返回操作结果
911 | */
912 | default Future deleteByAssist(SqlAssist assist) {
913 | Promise promise = Promise.promise();
914 | deleteByAssist(assist, promise);
915 | return promise.future();
916 | }
917 |
918 | /**
919 | * 通过SqlAssist条件集删除对应的数据行
920 | *
921 | * @param assist
922 | * 条件集
923 | *
924 | * @param handler
925 | * 返回操作结果
926 | */
927 | void deleteByAssist(SqlAssist assist, Handler> handler);
928 |
929 | }
930 |
--------------------------------------------------------------------------------
/src/main/java/io/vertx/ext/sql/assist/SQLCommand.java:
--------------------------------------------------------------------------------
1 | package io.vertx.ext.sql.assist;
2 |
3 | import java.util.List;
4 |
5 | import io.vertx.core.AsyncResult;
6 | import io.vertx.core.Future;
7 | import io.vertx.core.Handler;
8 | import io.vertx.core.json.JsonObject;
9 | import io.vertx.sqlclient.PropertyKind;
10 | import io.vertx.sqlclient.Tuple;
11 |
12 | /**
13 | * SQL可执行命令
14 | *
15 | * @author Mirren
16 | *
17 | */
18 | public interface SQLCommand {
19 | /**
20 | * 获取数据总行数
21 | *
22 | * @param assist
23 | * 查询工具,如果没有可以为null
24 | * @param handler
25 | * 返回数据总行数
26 | */
27 | void getCount(SqlAssist assist, Handler> handler);
28 |
29 | /**
30 | * 通过查询工具查询所有数据
31 | *
32 | * @param assist
33 | * 查询工具帮助类
34 | * @param handler
35 | * 结果集
36 | */
37 | void selectAll(SqlAssist assist, Handler>> handler);
38 |
39 | /**
40 | * 分页查询,默认page=1,rowSize=15(取第一页,每页取15行数据)
41 | *
42 | * @param assist
43 | * 查询工具(注意:startRow在该方法中无效,最后会有page转换为startRow)
44 | * @param handler
45 | * 返回结果为(JsonObject)格式为: {@link SqlLimitResult#toJson()}
46 | */
47 | default void limitAll(final SqlAssist assist, Handler> handler) {
48 | if (assist == null) {
49 | handler.handle(Future.failedFuture("The SqlAssist cannot be null , you can pass in new SqlAssist()"));
50 | return;
51 | }
52 | if (assist.getPage() == null || assist.getPage() < 1) {
53 | assist.setPage(1);
54 | }
55 | if (assist.getRowSize() == null || assist.getRowSize() < 1) {
56 | assist.setRowSize(15);
57 | }
58 | if (assist.getPage() == 1) {
59 | assist.setStartRow(0);
60 | } else {
61 | assist.setStartRow((assist.getPage() - 1) * assist.getRowSize());
62 | }
63 | getCount(assist, cres -> {
64 | if (cres.succeeded()) {
65 | Long count = cres.result();
66 | SqlLimitResult result = new SqlLimitResult<>(count, assist.getPage(), assist.getRowSize());
67 | if (count == 0 || assist.getPage() > result.getPages()) {
68 | handler.handle(Future.succeededFuture(result.toJson()));
69 | } else {
70 | selectAll(assist, dres -> {
71 | if (dres.succeeded()) {
72 | result.setData(dres.result());
73 | handler.handle(Future.succeededFuture(result.toJson()));
74 | } else {
75 | handler.handle(Future.failedFuture(dres.cause()));
76 | }
77 | });
78 | }
79 | } else {
80 | handler.handle(Future.failedFuture(cres.cause()));
81 | }
82 | });
83 | };
84 |
85 | /**
86 | * 通过ID查询出数据,并自定义返回列
87 | *
88 | * @param primaryValue
89 | * 主键值
90 | * @param resultColumns
91 | * 自定义返回列
92 | * @param tableAlias
93 | * 当前表的别名
94 | * @param joinOrReference
95 | * 多表查询或表连接的语句,示例 inner join table2 as t2 on t.id=t2.id
96 | * @param handler
97 | * 返回结果:如果查询得到返回JsonObject如果查询不到返回null
98 | */
99 | void selectById(S primaryValue, String resultColumns, String tableAlias, String joinOrReference,
100 | Handler> handler);
101 |
102 | /**
103 | * 将对象属性不为null的属性作为条件查询出数据,只取查询出来的第一条数据
104 | *
105 | * @param obj
106 | * 对象
107 | * @param resultColumns
108 | * 自定义返回列
109 | * @param tableAlias
110 | * 当前表的别名
111 | * @param joinOrReference
112 | * 多表查询或表连接的语句,示例 inner join table2 as t2 on t.id=t2.id
113 | * @param handler
114 | * 结果:如果存在返回JsonObject,不存在返回null
115 | */
116 | void selectSingleByObj(T obj, String resultColumns, String tableAlias, String joinOrReference,
117 | Handler> handler);
118 |
119 | /**
120 | * 将对象属性不为null的属性作为条件查询出数据
121 | *
122 | * @param obj
123 | * 对象
124 | * @param resultColumns
125 | * 自定义返回列
126 | * @param tableAlias
127 | * 当前表的别名
128 | * @param joinOrReference
129 | * 多表查询或表连接的语句,示例 inner join table2 as t2 on t.id=t2.id
130 | * @param handler
131 | * 返回结果集
132 | */
133 | void selectByObj(T obj, String resultColumns, String tableAlias, String joinOrReference,
134 | Handler>> handler);
135 |
136 | /**
137 | * 插入一个对象包括属性值为null的值
138 | *
139 | * @param obj
140 | * 对象
141 | * @param handler
142 | * 返回操作结果
143 | */
144 | void insertAll(T obj, Handler> handler);
145 |
146 | /**
147 | * 插入一个对象,只插入对象中值不为null的属性
148 | *
149 | * @param obj
150 | * 对象
151 | * @param handler
152 | * 返回操作结果
153 | */
154 | void insertNonEmpty(T obj, Handler> handler);
155 |
156 | /**
157 | * 插入一个对象,只插入对象中值不为null的属性,并返回自增的结果
158 | * @param
159 | * @param obj 插入的对象
160 | * @param property 返回结果的PropertyKind名称,比如JDBCPool.GENERATED_KEYS或MySQLClient.LAST_INSERTED_ID
161 | * @param handler
162 | */
163 | void insertNonEmptyGeneratedKeys(T obj, PropertyKind property, Handler> handler);
164 |
165 | /**
166 | * 批量添加全部所有字段
167 | *
168 | * @param list
169 | * 对象
170 | * @param handler
171 | * 成功返回受影响的行数,如果对象为null或空则返回0
172 | */
173 | void insertBatch(List list, Handler> handler);
174 | /**
175 | * 批量添加自定字段
176 | *
177 | * @param column
178 | * 字段的名称示例:["id","name",...]
179 | * @param params
180 | * 字段对应的参数示例:[["id","name"],["id","name"]...]
181 | * @param handler
182 | * 成功返回受影响的行数,如果字段或字段参数为null或空则返回0
183 | */
184 | void insertBatch(List columns, List params, Handler> handler);
185 |
186 | /**
187 | * 插入一个对象,如果该对象不存在就新建如果该对象已经存在就更新
188 | *
189 | * @param obj
190 | * 对象
191 | *
192 | * @param handler
193 | * 结果集受影响的行数
194 | */
195 | void replace(T obj, Handler> handler);
196 |
197 | /**
198 | * 更新一个对象中所有的属性包括null值,条件为对象中的主键值
199 | *
200 | * @param obj
201 | * 对象
202 | *
203 | * @param handler
204 | * 返回操作结果
205 | */
206 | void updateAllById(T obj, Handler