# 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` 支持自定义逻辑转换