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
判斷是否爲基本類型,包括包裝類型和非包裝類型。