# vertx-sql-assist
**Repository Path**: mirren/vertx-sql-assist
## Basic Information
- **Project Name**: vertx-sql-assist
- **Description**: Vert.x 的SQL操作帮助工具
- **Primary Language**: Java
- **License**: MIT
- **Default Branch**: master
- **Homepage**: https://mirrentools.org
- **GVP Project**: No
## Statistics
- **Stars**: 10
- **Forks**: 4
- **Created**: 2019-11-06
- **Last Updated**: 2023-04-15
## Categories & Tags
**Categories**: database-dev
**Tags**: None
## README
# vertx-sql-assist
其他语言版本: [English](./README.md), [简体中文](./README.zh.md).
vertx-sql-assist是 [Vert.x](https://vertx.io/) 的SQL操作帮助工具,它提供了增删改查、连接、分页等支持,配合SqlAssist帮助类自己基本不用写一行SQL代码。
我们推荐你使用 [ScrewDriver](https://github.com/MirrenTools/screw-driver) 来生成代码,这样你会发现世界非常美好!
## 添加依赖
``` XML
org.mirrentools
vertx-sql-assist
RELEASE
```
## SQL类方法说明
* **getCount** 获取数据总行数
* **selectAll** 查询多行数据
* **limitAll** 分页查询
* **selectById** 通过id查询数据
* **selectByObj** 通过对象中不为空的属性查询数据
* **selectSingleByObj** 通过对象中不为空的属性查询数据只取返回的第一行数据
* **insertBatch** 批量添加插入对象
* **insertAll** 插入一个对象包括属性值为null的值
* **insertNonEmpty** 插入一个对象,只插入对象中值不为null的属性
* **insertNonEmptyGeneratedKeys** 插入一个对象,只插入对象中值不为null的属性,并返回自增的id
* **replace** 插入一个对象,如果该对象不存在就新建如果该对象已经存在就更新
* **updateAllById** 更新一个对象中所有的属性包括null值,条件为对象中的主键值
* **updateAllByAssist** 更新一个对象中所有的属性包括null值,条件为SqlAssist帮助类
* **updateNonEmptyById** 更新一个对象中属性不为null值,条件为对象中的主键值
* **updateNonEmptyByAssist** 更新一个对象中属性不为null值,条件为SqlAssist帮助类
* **updateSetNullById** 通过主键值设置指定的列为空
* **updateSetNullByAssist** 通过Assist作为条件设置指定的列为空
* **deleteById** 通过主键值删除对应的数据行
* **deleteByAssist** 通过SqlAssist条件集删除对应的数据行
* **queryAsObj** 执行查询结果为JsonObject
* **queryAsList** 执行查询结果为List
* **update** 执行更新等操作得到受影响的行数
* **updateResult** 执行更新等操作得到想要的结果,比如自增的id
* **batch** 批量执行
* **execute** 原生执行
## SqlAssist方法说明
* **setOrders** 设置排序,通过SqlAssist.order(列名,排序方式)
* **setGroupBy** 设置分组
* **setHaving** 设置分组条件
* **setDistincts** 设置是否去重,true去重
* **setPage** 设置第几页,该值仅在limitAll方法中有效,最终会被转换为startRow
* **setStartRow** 设置从第几行开始取数据
* **setRowSize** 设置每次取多少行数据
* **setResultColumn** 设置自定义返回列,多个列以,逗号隔开
* **setJoinOrReference** 设置连接查询或多表查询语句
* **and** 添加并且条件
* **or** 添加或者条件
* **andEq** 添加并且等于条件
* **orEq** 添加或者等于条件
* **andNeq** 添加并且不等于条件
* **orNeq** 添加或者不等于条件
* **andLt** 添加并且小于条件
* **orLt** 添加或者小于条件
* **andLte** 添加并且小于等于条件
* **orLte** 添加或者小于等于条件
* **andGt** 添加并且大于条件
* **orGt** 添加或者大于条件
* **andGte** 添加并且大于等于条件
* **orGte** 添加或者大于等于条件
* **andLike** 添加并且like条件
* **orLike** 添加或者like条件
* **andNotLike** 添加并且not like条件
* **orNotLike** 添加或者not like条件
* **andisNull** 添加并且is null条件
* **orisNull** 添加或者is null条件
* **andIsNotNull** 添加并且is not null条件
* **orIsNotNull** 添加或者is not null条件
* **setConditions** 添加查询条件
* **customCondition** 添加自定义查询条件
## SqlAssist使用示例
[示例项目](https://github.com/shenzhenMirren/vertx-sql-assist-examples)
``` java
// (1)创建Assist帮助类
SqlAssist assist = new SqlAssist();
// (2)添加条件type=1或3,相当于SQL: where type=1 or type=3
assist.orEq("type", 1).orEq("type", 3);
// (3)去掉重复的数据,相当于SQL: select distinct ...
assist.setDistincts(true);
// (4)自定义只返回id,type,name,seq列
assist.setResultColumn("id,type,name,seq");
// (5)通过seq类倒序排序,相当于SQL: order by seq desc
assist.setOrders(SqlAssist.order("seq", false));
// (6)获取数据库中第20-35行的数据,你也可以使用setPage(第几页)的方式进行分页获取,相当于SQL: limit 20,15
assist.setStartRow(20).setRowSize(15);
// (7)执行获取数据
Future future=Promise.promise().future();
future.setHandler(//处理结果);
itemsSQL.selectAll(assist,future);
```
具体使用方式可以查看SqlAssist类的方法注释,如果不清楚的可以在ScrewDriver群里咨询
## 使用方法
**示例**
1.创建实体类
``` java
//添加表注释
@Table("表的名称")
public class User {
@TableId("主键id")
private Long id;
@TableColumn("列的名称")
private String name;
@TableColumn(value = "列的名称", alias = "列的别名,不是必须")
private Integer type;
//其他必须的
}
```
2.创建SQL类并继承CommonSQL
``` java
public class UserSQL extends CommonSQL {//(1)
public UserSQL(SQLExecute execute) {
super(execute);
}
// (1)
// User 必须是有@Table, @TableId,@TableColumn注解的实体类,或重写一个实现了表名,id,返回列的SQLStatement传给CommonSQL
// JDBCPool 可以是别的数据库客户端
//实现其他的方法
}
```
3.执行
``` java
public static void main(String[] args) {
// 其他已省略的变量
UserSQL userSQL = new UserSQL(SQLExecute.createJDBC(JDBCPool));
// 查询示例
// 创建帮助类
SqlAssist assist = new SqlAssist();
assist.setStartRow(0).setRowSize(15);
assist.andEq("type", 1);
assist.setOrders(SqlAssist.order("id", true));
// 执行查询
userSQL.selectAll(assist,res->{
if (res.succeeded()) {
System.out.println(res.result());
}else {
System.err.println(res.cause());
}
});
//保存示例
User user =new User();
user.setId(1001L);
user.setName("org.mirrentools");
user.setType(1);
userSQL.insertNonEmpty(user,res->{//Processed results});
}
```
## 通用设置
**设置不同数据库SQL语句** 默认使用MySQL标准的SQL语句,你可以通过SQLStatement设置为不同的数据库SQL语句,支持MySQL、PostgreSQL、Oracle、DB2、SQL Server、SQLite,比如设置为Oracle你可以这样:
``` java
SQLStatement.register(OracleStatementSQL.class);
```
**设置分页返回结果名称** 分页获取数据返回的名称默认为:totals=数据总行数,pages=数据总页数 ,page=当前是第几页,size=每页显示多少行数据,data=数据,如果你要将名称改为其他的你可以这样:
``` java
SqlLimitResult.registerResultKey("totals", "counts");
```