java开发常用笔记

1 SpringBoot中使用Jackson导致Long型数据精度丢失问题

​​​​​​原因:因为Javascript中数字的精度是有限的,bigint类型的的数字超出了Javascript的处理范围
解决:
1.1 配置参数write_numbers_as_strings

spring:
  jackson:
    generator:
      write_numbers_as_strings: true
1.2 注解
@JsonSerialize(using=ToStringSerializer.class)
1.3 BigDecimal返回
@JsonFormat(shape = JsonFormat.Shape.STRING)

2 springboot 返回日期格式化时间

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")

3 BigDecimal类型比较大小

if(a.compareTo(b) == -1){
    System.out.println("a小于b");
}
if(a.compareTo(b) == 0){
    System.out.println("a等于b");
}
if(a.compareTo(b) == 1){
    System.out.println("a大于b");
}
if(a.compareTo(b) > -1){
    System.out.println("a大于等于b");
}
if(a.compareTo(b) < 1){
    System.out.println("a小于等于b");
}

4 mybatis 比较大小符号对应关系

原符号   <    <=    >    >=    &    '       "
替换符号 &lt; &lt;= &gt; &gt;= &amp; &apos; &quot;

5 mybatisplus 常用符号

eq相等   
ne、neq不相等,   
gt大于, 
lt小于 
gte、ge大于等于   
lte、le 小于等于   
not非   
mod求模 

6  lombok 注解

@Cleanup,生成的代码会把变量用try{}包围,并在finallly块中调用close()	
@SneakyThrows 用try{}catch{}捕捉异常
@Accessors setter链式返回,即setter的返回值为this

7 jdk1.8查重

List<String> repeatData = loginNames.stream().collect(Collectors.toMap(e -> e, e -> 1, Integer::sum))
                .entrySet().stream().filter(entry -> entry.getValue() > 1)
				.map(Map.Entry::getKey).collect(Collectors.toList());

8 mysql常用语法

8.1 Date减一天并转换成字符串

DATE_FORMAT(date_add(NOW(), INTERVAL -1 DAY), '%Y-%m-%d') 

8.2 删除重复数据

DELETE FROM t_table where id in (
select * from (
	select id from t_table
	WHERE bill_code IN (
		SELECT bill_code FROM t_table
		GROUP BY bill_code
		HAVING count(bill_code) > 1)
	AND id NOT IN (
		SELECT max(id) FROM t_table
		GROUP BY bill_code
		HAVING count(bill_code) > 1
	)) temp );

8.3 索引选择性

索引的选择性:不重复的索引值和记录总数的比值,最大值为 1,此时每个记录都有唯一的索引与其对应。选择性越高,每个记录的区分度越高,查询效率也越高。

SELECT COUNT(DISTINCT user_id) / COUNT(*) AS user_id,
		COUNT(DISTINCT area_type) / COUNT(*) AS area_type,
		COUNT(*)
FROM area;

8.4 sql排查

查询死锁日志
	show engine innodb status;
查询日志文件地址
	SHOW VARIABLES LIKE 'datadir';

9  下划线与驼峰互相转换

public class LineHumpConvertUtil {

    private static final Pattern LINE_PATTERN = Pattern.compile("_(\\w)");

    private static final Pattern HUMP_PATTERN = Pattern.compile("[A-Z]");

    /**
     * 下划线转驼峰
     */
    public static String line2Hump(String str) {
        str = str.toLowerCase();
        Matcher matcher = LINE_PATTERN.matcher(str);
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            matcher.appendReplacement(sb, matcher.group(1).toUpperCase());
        }
        matcher.appendTail(sb);
        return sb.toString();
    }

    /**
     * 驼峰转下划线
     */
    public static String hump2Line(String str) {
        Matcher matcher = HUMP_PATTERN.matcher(str);
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            matcher.appendReplacement(sb, "_" + matcher.group(0).toLowerCase());
        }
        matcher.appendTail(sb);
        return sb.toString();
    }
}

10 反射使用

10.1 对象转map后,排好序拼接成字符串

/**
     * 将对象转换成map  排序后 拼接成string返回
     */
    public static String getOrderMapToString(Object obj) {
        StringBuilder stringBuilder = new StringBuilder();
        Map<String, Object> targetMap = ClassUtil.setConditionMap(obj);
        Map<String, Object> resultMap = Maps.newHashMapWithExpectedSize(targetMap.size());
        // 依据key升序排序
        targetMap.entrySet().stream().sorted(Map.Entry.comparingByKey())
                .forEachOrdered(e -> resultMap.put(e.getKey(), e.getValue()));
        resultMap.forEach((k, v) -> {
            if (!BaseConstant.PDD_EXCLUDE_COLUMN.equals(k)) {
                stringBuilder.append(k).append(v);
            }
        });
        return stringBuilder.toString();
    }

    /**
     * 将一个类中string类型的字段加入到 map 空值时不加入
     */
    private static Map<String, Object> setConditionMap(Object obj){
        if(null == obj){
            return null;
        }
        Field[] fields = obj.getClass().getDeclaredFields();
        Map<String, Object> map = Maps.newHashMapWithExpectedSize(fields.length);
        for(Field field : fields){
            if ("java.lang.String".equals(field.getType().getName())) {
                String fieldName =  field.getName();
                if(null != getValueByFieldName(fieldName,obj)) {
                    map.put(fieldName,  getValueByFieldName(fieldName, obj));
                }
            }
        }
        return map;
    }

    /**
     * 根据属性名获取该类此属性的值
     */
    private static Object getValueByFieldName(String fieldName, Object object){
        String firstLetter = fieldName.substring(0,1).toUpperCase();
        String getter = "get" + firstLetter + fieldName.substring(1);
        try {
            Method method = object.getClass().getMethod(getter);
            return method.invoke(object);
        } catch (Exception e) {
            return null;
        }
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 尚硅谷Java基础笔记是一套系统而全面的Java基础学习资料。这份笔记Java语言的基本概念介绍开始,涵盖了Java的核心知识点,包括变量、数据类型、运算符、流程控制等。接着,笔记详细讲解了面向对象编程的特点和Java中的类、对象、封装、继承、多态等内容。 在这份笔记中,还深入讨论了Java中的常用类库,如String、ArrayList、HashMap等,以及它们的常见用法和实例操作。此外,笔记还介绍了常见的异常处理机制,包括try-catch语句、throw和throws关键字等,帮助学习者理解并掌握Java中的错误和异常处理。 除了基础知识的讲解,尚硅谷Java基础笔记还提供了大量的例子和练习题,帮助学习者巩固所学内容,并通过实践提高编程能力。这些例子和练习题涵盖了各个知识点和应用场景,从简单到复杂,逐渐深入,非常有助于学习者的理解和应用能力的提升。 总而言之,尚硅谷Java基础笔记是一份详细、系统、易懂的学习资料,适合初学者入门学习Java编程。无论是对于零基础的学习者还是对于有一定编程经验的人来说,这份笔记都是一份不可多得的宝藏,可以帮助他们夯实Java基础,掌握编程技巧,为进一步扩展知识奠定坚实的基础。 ### 回答2: 尚硅谷java基础笔记是一份完整而详细的教程,对于初学者来说是一个很好的学习资源。 这份笔记由尚硅谷团队精心编写而成,包含了Java基础的各个方面。首先从Java的历史和应用领域入手,引导读者对Java有一个整体的认识。然后逐步介绍Java的发展环境和使用工具,让读者能够了解如何配置和使用Java开发环境。 接下来,笔记逐个介绍了Java的基本语法、数据类型、运算符、流程控制语句等基础知识。这些内容以简洁明了的方式呈现,附有实例和练习题,让读者可以通过练习巩固所学内容。 除了基础语法,笔记还深入讲解了Java的面向对象编程思想和相关特性,包括类与对象、封装、继承、多态等。这部分内容对于理解Java的核心思想和编程范式非常重要,而且通过实例和案例的讲解,更加直观地展示了面向对象的优势和应用。 此外,笔记还包含了Java常用类库的介绍,如集合框架、IO流、异常处理等,这些内容对于进行实际开发非常实用。 总之,尚硅谷java基础笔记内容全面、深入浅出,适合初学者学习和巩固基础知识。通过系统地学习这份笔记,读者可以建立起扎实的Java基础,为后续的学习和实践打下坚实的基础。同时,笔记中的案例和练习题也为读者提供了不少实践机会,帮助读者更好地理解和应用所学知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值