# sql-param-handler
**Repository Path**: cool-moon/sql-param-handler
## Basic Information
- **Project Name**: sql-param-handler
- **Description**: 简单处理sql查询参数,方便mybatis sql编写
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-12-07
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Sql 参数包装
## 封装目的
在编写mybatis sql的过程中,经常需要使用 if标签动态判断查询条件如下:
```xml
and name like concat( '%' , '#{name}' , '%' )
```
这里面涉及了大量的重复判断和链接操作,为了简化sql编写,我们决定在参数上进行包装,
包装后的字段可以直接使用,无需链接,转换,并且if条件只需null判断
```xml
and name like #{c.nameWirldcard}
```
## 支持处理方式
* 支持将字符串查询参数前后加入 `%`, 进行模糊匹配查询
* 支持将空白或者空字符串设置为 null
* 支持将 `java.util.Date` 转换为字符串,并支持自定义格式
* 支持将枚举类型转换为字符串或者数字(name, ordinal)
* 支持将空集合转换为 null
## 使用方法
#### 依赖和启用
1. pom.xml 引入依赖
```xml
com.sjx.gbck.cloudpos.common
sql-param-handler
0.3-SNAPSHOT
```
2. 启动类加入启动注解 `@EnableParamDecorator`
```java
@SpringBootApplication
@EnableParamDecorator
public class YourApplication {
public static void main(String[] args) {
SpringApplication.run(YourApplication.class, args);
}
}
```
#### 2. 参数类标记注解
参数类必须存在空构造函数
```java
public class QueryParamObj {
public QueryParamObj() {
}
@Like(targetField = "keywordWildcard")
private String keyword = "关键字";
// wildcard
private String keywordWildcard;
@Converter(convertClass = TimestampToDateStrConverter.class, targetField = "startTime")
private String startTimestamp = System.currentTimeMillis() + "";
// field format: yyyy-MM-dd HH:mm:ss, from TimestampToDateStrConverter
private String startTime;
}
/*
自定义转换逻辑
*/
public class TimestampToDateStrConverter implements CustomConverter {
@Override
public String convert(String source) {
long timestamp = Long.parseLong(source);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return dateFormat.format(new Date(timestamp));
}
}
```
#### 3. 调用mapper之前包装参数
```java
@Service
class YourServiceClass{
@Autowired
private ParamDecorator paramDecorate;
@Autowired
private YourMapper mapper;
public void query(QueryParamObj rawParam){
QueryParamObj neatParam = paramDecorate.decorate(rawParam);
mapper.doQuery(neatParam);
}
}
```
#### 4. mybatis sql 直接使用
```xml
```
### 版本历史
* 0.2
* 取消自动注入,改为使用 `@EnableParamDecorator` 启用
* 0.3
* 增加 `@Converter` 支持自定义逻辑转换