今天给大家介绍个好用的搜索类(上代码)
public class Search<T> { /** * like语句 */ private final Map<String, String> likeConditionMap = new HashMap<>(); /** * 查询条件 */ private final List<String> conditions = new ArrayList<>(); /** * 查询的字段 */ private final List<String> columns = new ArrayList<>(); /** * 左模糊 */ public final static String LIKE_LEFT = "left"; /** * 右模糊 */ public final static String LIKE_RIGHT = "right"; /** * 全模糊 */ public final static String LIKE_BOTH = "both"; public List<String> getConditions() { return conditions; } public List<String> getColumns() { return columns; } public Map<String, String> getLikeConditionMap() { return likeConditionMap; } /** * 添加模糊搜索 * * @author fengzx * @date 2020/3/28 12:12 */ public Search<T> like(IGetter<T> fn, String type) { //属性名 String propertyName = BeanUtils.convertToFieldName(fn); String columnName = BeanUtils.HumpToUnderline(propertyName); String condition = columnName + " like "; if (LIKE_LEFT.equals(type)) { condition = condition + "concat('%', ?)"; } if (LIKE_RIGHT.equals(type)) { condition = condition + "concat(?,'%')"; } if (LIKE_BOTH.equals(type)) { condition = condition + "concat('%',?,'%')"; } columns.add(columnName); likeConditionMap.put(columnName, condition); return this; } /** * 指定日期等于某个时间 * * @author fengzx * @date 2020/3/28 12:13 */ public Search<T> eqDate(IGetter<T> fn, Date param, String pattern) { compareDate(fn, param, pattern, " = '"); return this; } /** * 指定日期等于某个时间 * * @author fengzx * @date 2020/3/28 12:13 */ public Search<T> eqDate(IGetter<T> fn, String param) { if (StringUtils.isBlank(param)) { return this; } //属性名 String propertyName = BeanUtils.convertToFieldName(fn); String columnName = BeanUtils.HumpToUnderline(propertyName); String condition = columnName + " = '" + param + "'"; conditions.add(condition); return this; } /** * 指定日期小于某个时间 * * @author fengzx * @date 2020/3/28 12:14 */ public Search<T> ltDate(IGetter<T> fn, String param) { if (StringUtils.isBlank(param)) { return this; } //属性名 String propertyName = BeanUtils.convertToFieldName(fn); String columnName = BeanUtils.HumpToUnderline(propertyName); String condition = columnName + " < '" + param + "'"; conditions.add(condition); return this; } /** * 指定日期小于某个时间 * * @author fengzx * @date 2020/3/28 12:14 */ public Search<T> ltDate(IGetter<T> fn, Date param, String pattern) { compareDate(fn, param, pattern, " < '"); return this; } /** * 指定日期大于某个时间 * * @author fengzx * @date 2020/3/28 12:14 */ public void gtDate(IGetter<T> fn, Date param, String pattern) { compareDate(fn, param, pattern, " > '"); } /** * 日期比较 * * @author fengzx * @date 2020/4/11 12:26 */ private Search<T> compareDate(IGetter<T> fn, Date param, String pattern, String compare) { if (param == null || StringUtils.isBlank(pattern)) { return this; } SimpleDateFormat format = new SimpleDateFormat(pattern); String dateParam = format.format(param); //属性名 String propertyName = BeanUtils.convertToFieldName(fn); String columnName = BeanUtils.HumpToUnderline(propertyName); String condition = columnName + compare + dateParam + "'"; conditions.add(condition); return this; } /** * 指定日期大于某个时间 * * @author fengzx * @date 2020/3/28 12:14 */ public Search<T> gtDate(IGetter<T> fn, String param) { if (StringUtils.isBlank(param)) { return this; } //属性名 String propertyName = BeanUtils.convertToFieldName(fn); String columnName = BeanUtils.HumpToUnderline(propertyName); String condition = columnName + " > '" + param + "'"; conditions.add(condition); return this; } }
使用方法
1.1自己写的搜索类进行实现
1.2 具体使用
网络异常,图片无法展示
|
只需要controller层具体字段加上具体模糊界限即可
(LEFT:左模糊 RIGHT:右模糊 BOTH:全模糊)

