Lombok
1、导入依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
</dependency>
2、注解注释
- @Data:这个注解包含getXxx()、setXxx()方法、equals()、hashCode()、toString()等方法,相当于@Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode这5个注解的合集。
- @NoArgsConstructor:无参构造
- @AllArgsConstructor:全参构造
- @EqualsAndHashCode(callSuper = false):生成equals()和hashCode()方法,并且不比较父类属性,子类属性相同即可,建议子类都加上此注解
- @Accessors(chain = true):开启链式调用
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("user")
@ApiModel("用户")
public class User implements Serializable, UserDetails {
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@ApiModelProperty(value = "主键id")
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 用户名
*/
@ApiModelProperty(value = "用户名", required = true)
private String username;
/**
* 密码
*/
@ApiModelProperty(value = "密码", required = true)
private String password;
}
Hutool
1、导入依赖
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.5.7</version>
</dependency>
2、用法
2.1 类型转换
2.1.1 转换为字符串
int a = 1;
//aStr为"1"
String aStr = Convert.toStr(a);
long[] b = {1, 2, 3, 4, 5};
//bStr为:"[1, 2, 3, 4, 5]"
String bStr = Convert.toStr(b);
2.1.2 转换为指定类型数组
String[] b = { "1", "2", "3", "4" };
//结果为Integer数组
Integer[] intArray = Convert.toIntArray(b);
long[] c = {1,2,3,4,5};
//结果为Integer数组
Integer[] intArray2 = Convert.toIntArray(c);
2.1.3 转换为日期对象
String a = "2021-01-25";
Date value = Convert.toDate(a);
2.1.4 转换为集合
Object[] a = {"a", "你", "好", "", 1};
List<?> list = Convert.toList(a);
2.2 日期时间
2.2.1 字符串转日期
DateUtil.parse
方法会自动识别一些常用格式,包括:
- yyyy-MM-dd HH:mm:ss
- yyyy-MM-dd
- HH:mm:ss
- yyyy-MM-dd HH:mm
- yyyy-MM-dd HH:mm:ss
String dateStr = "2021-01-25";
Date date = DateUtil.parse(dateStr);
我们也可以使用自定义日期格式转化:
String dateStr = "2021-01-25";
Date date = DateUtil.parse(dateStr, "yyyy-MM-dd");
2.2.2 格式化日期输出
String dateStr = "2021-01-25";
Date date = DateUtil.parse(dateStr);
//结果 2021/01/25
String format = DateUtil.format(date, "yyyy/MM/dd");
//常用格式的格式化,结果:2021-01-25
String formatDate = DateUtil.formatDate(date);
//结果:2021-01-25 00:00:00
String formatDateTime = DateUtil.formatDateTime(date);
//结果:00:00:00
String formatTime = DateUtil.formatTime(date);
2.2.3 获取Date对象的某个部分
Date date = DateUtil.date();
//获得年的部分
DateUtil.year(date);
//获得月份,从0开始计数
DateUtil.month(date);
//获得月份枚举
DateUtil.monthEnum(date);
2.2.4 计时器
计时器用于计算某段代码或过程花费的时间
TimeInterval timer = DateUtil.timer();
//---------------------------------
//-------这是执行过程
//---------------------------------
timer.interval();//花费毫秒数
timer.intervalRestart();//返回花费时间,并重置开始时间
timer.intervalMinute();//花费分钟数
2.2.5 其他
//年龄
DateUtil.ageOfNow("1990-01-30");
//是否闰年
DateUtil.isLeapYear(2017);
2.3 文件拷贝
BufferedInputStream in = FileUtil.getInputStream("d:/test.txt");
BufferedOutputStream out = FileUtil.getOutputStream("d:/test2.txt");
//默认DEFAULT_BUFFER_SIZE 8092
IoUtil.copy(in, out);
//指定缓冲区大小
IoUtil.copy(in, out, 1024);
2.4 字符串工具
2.4.1 字符串判空
-
StrUtil.isBlank:判断字符串是否为空(null,"",空格)返回true,常用于判断单一字段是否有空的
-
StrUtil.isNotBlank
-
StrUtil.isEmpty:判断字符串是否为空(null,"")返回true,常用于判断单一字段是否有空的
-
StrUtil.isBlank
-
StrUtil.hasBlank:判断字符串是否有空(null,"",空格)返回true,常用于判断好多字段是否有空的(例如web表单数据)
-
StrUtil.hasEmpty:判断字符串是否为空(null,"")返回true,常用于判断好多字段是否有空的(例如web表单数据)
2.4.2 去除字符串前后缀
-
StrUtil.removePrefix:去掉字符串的前缀
-
StrUtil.removeSuffix:去掉字符串的后缀(String fileName = StrUtil.removeSuffix("pretty_girl.jpg", ".jpg") //fileName -> pretty_girl)
-
StrUtil.removePrefixIgnoreCase:去掉字符串的前缀(忽略大小写)
-
StrUtil.removeSuffixIgnoreCase:去掉字符串的后缀(忽略大小写)
2.4.3 sub截取字符串方法
不得不提一下这个方法,有人说String有了subString你还写它干啥,我想说subString方法越界啥的都会报异常,你还得自己判断,难受死了,我把各种情况判断都加进来了,而且index的位置还支持负数哦,-1表示最后一个字符,还有就是如果不小心把第一个位置和第二个位置搞反了,也会自动修正
String str = "abcdefgh";
String strSub1 = StrUtil.sub(str, 2, 3); //strSub1 -> c
String strSub2 = StrUtil.sub(str, 2, -3); //strSub2 -> cde
String strSub3 = StrUtil.sub(str, 3, 2); //strSub2 -> c
2.4.4 format方法
灵感来自slf4j,可以使用字符串模板代替字符串拼接,我也自己实现了一个,而且变量的标识符都一样,神马叫无缝兼容~~来
String template = "{}爱{},就像老鼠爱大米";
String str = StrUtil.format(template, "我", "你"); //str -> 我爱你,就像老鼠爱大米
参数我定义成了Object类型,如果传别的类型的也可以,会自动调用toString()方法的。
2.5 对象工具-ObjectUtil
2.5.1 ObjectUtil.equal
比较两个对象是否相等,相等需满足以下条件之一:
- obj1 == null && obj2 == null
- obj1.equals(obj2)
2.5.2 ObjectUtil.length
计算对象长度,如果是字符串调用其length方法,集合类调用其size方法,数组调用其length属性,其他可遍历对象遍历计算长度。
支持的类型包括:
- CharSequence
- Collection
- Map
- Iterator
- Enumeration
- Array
2.5.3 ObjectUtil.contains
对象中是否包含元素。
支持的对象类型包括:
- String
- Collection
- Map
- Iterator
- Enumeration
- Array
2.5.4 判断是否为null
ObjectUtil.isNull
ObjectUtil.isNotNull
2.5.5 克隆
ObjectUtil.clone
克隆对象,如果对象实现Cloneable接口,调用其clone方法,如果实现Serializable接口,执行深度克隆,否则返回null
。ObjectUtil.cloneIfPossible
返回克隆后的对象,如果克隆失败,返回原对象ObjectUtil.cloneByStream
序列化后拷贝流的方式克隆,对象必须实现Serializable接口
2.5.6 序列化和反序列化
serialize
序列化,调用JDK序列化unserialize
反序列化,调用JDK
2.5.7 判断基本类型
ObjectUtil.isBasicType
判断是否为基本类型,包括包装类型和非包装类型。