我的工具箱

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


案例仅供参考,如有错误,欢迎大佬指点留言.


一、模糊查询:特殊字符

注意:全局使用,可以使用拦截器进行,拦截器请求,再进行内容替换。

/**
 * @Description : 分页模糊查询:特殊字符处理
 * @Author : LiYan
 */
public class SpecialStrUtil {

    private SpecialStrUtil() {}

    public static String escapeStr(String str) {
        if (StringUtils.hasText(str)) {
            str = str.replace("!", "\\!");
            str = str.replace("_", "\\_");
            str = str.replace("%", "\\%");
            str = str.replace("*", "\\*");
            str = str.replace("^", "\\^");
            str = str.replace("[]", "\\[]");
            str = str.replace("[", "\\[");
            str = str.replace("]", "\\]");
        }
        return str;
    }
}
// 原文链接:https://blog.csdn.net/weixin_39157014/article/details/114313702

二、位运算 (Binary)

代码如下(示例):

// 01011001
// 11111101

// 位运算:
//  | 按位或 11111101   253   都为0则为0
//  & 按位或 01011101   89    都为1则为1
//  ^ 按位异或                不同为1,相同为0
//  ~ 按位非 10100010         取相反值.

int result = 89 & 253; // 相同位上的值为1,则为1.

// 拆分单个位.
int number = 255;
System.out.println("Binary0:" + (number & 1) );
System.out.println("Binary1:" + ((number & 2) >> 1) );
System.out.println("Binary2:" + ((number & 4) >> 2) ); 
System.out.println("Binary3-5位:" + ((number & 56) >> 3)); // 8+16+32 = 56
System.out.println("Binary6:" + ((number & 64) >> 6));
System.out.println("Binary7:" + ((number & 128) >> 7));

// 组合成一个二进制.
int bit0 = number0;
int bit1 = number1 << 1;
int bit2 = number2 << 2;
int bit3 = number3 << 3;
int bit6 = number6 << 6;
int bit7 = number7 << 7;
int sum = bit0 + bit1 + bit2 + bit3 + bit6 + bit7;

三、捕捉空指针异常

 /**
     * 空指针异常
     * @param ex
     * @return
     */
    @ExceptionHandler(value = NullPointerException.class)
    @ResponseBody
    public Result<Object> exceptionHandler(NullPointerException ex) {
        Result<Object> responseResult=new Result<>();
        responseResult.setCode(ResultCodeEnum.FAIL.getCode());
        responseResult.setMessage(ResultCodeEnum.FAIL.getMessage());
        log.error("NullPointerException:"+ex.getMessage());
        return responseResult;
    }

四、打印SQL语句不带?号

注:p6spy依赖包:性能监控、sql打印不带?号.
参考链接


  1. 依赖包
<!-- 依赖包-->
<dependency>
    <groupId>p6spy</groupId>
    <artifactId>p6spy</artifactId>
    <version>3.9.1</version>
</dependency>
  1. 添加名称为:spy.properties文件
# spy.properties配置文件:
module.log=com.p6spy.engine.logging.P6LogFactory
# 实际驱动
realdriver=org.postgresql.Driver
# 自定义日志打印
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
# 使用日志系统记录sql
appender=com.p6spy.engine.spy.appender.Slf4JLogger
# 日期格式
dateformat=yyyy-MM-dd HH:mm:ss
# 是否开启慢SQL记录
outagedetection=true
# 慢SQL记录标准 秒
outagedetectioninterval=2

五、集合 TreeSet 、HashMap

   TreeSet :去重,存在不允许插入。
   ​HashMap:对象存在,则覆盖。

// 1. treeSet: 去重,不能覆盖旧,存在,则不允许插入。
// 2. HashMap<>():对象存在,会进行覆盖.
Map<String, ConsumerMessageData> dataMap = listMessage.stream()
                        .map(message -> JSON.parseObject(message.value(), ConsumerMessageData.class))
                        .collect(Collectors.toMap(ConsumerMessageData::getSn, data -> data, (oldValue, newValue) -> newValue));

六、比较两对象属性值

/**
* 比较两个对象属性值,相同则进行展示,不同不展示.
* @param obj1    对象1
* @param obj2    对象2
* @return
* @throws IllegalAccessException
*/
public static List<Diff> compareObjects(Object obj1, Object obj2) throws IllegalAccessException {
        List<Diff> diffs = new ArrayList<>();

        // 获取对象的所有属性
        Field[] fields = obj1.getClass().getDeclaredFields();

        // 遍历属性,比较值是否相同
        for (Field field : fields) {
            // 允许在私有字段上执行操作
            field.setAccessible(true);
            //获取obj1 对象中当前属性值
            Object value1 = field.get(obj1);
            Object value2 = field.get(obj2);
            // 属性值不同,则进行封装.
            if (value1 != null && !value1.equals(value2)) {
                Diff diff = new Diff();
                diff.setSource(value1);
                diff.setTarget(value2);
                diff.setFieldName(field.getName());
                // 保存结果集
                diffs.add(diff);
            }
        }
        return diffs;
    }

总结

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值