一、工具簡介
Hutool 是一個小而全的 Java 工具類庫,通過靜態方法封裝,降低相關 API 的學習成本,提高工作效率,使 Java 擁有函數式語言般的優雅,讓 Java語 言也可以“甜甜的”。Hutool 對文件、流、加密解密、轉碼、正則、線程、XML、日期、Http客戶端 等 JDK 方法進行封裝,組成各種 Util 工具類。
Hutool 涵蓋了Java開發底層代碼中的方方面面,它既是大型項目開發中解決小問題的利器,也是小型項目中的效率擔當;
Hutool 是項目中“util”包友好的替代,它節省了開發人員對項目中公用類和公用工具方法的封裝時間,使開發專注於業務,同時可以最大限度的避免封裝不完善帶來的 bug。
Hutool 的目標是使用一個工具方法代替一段復雜代碼,從而最大限度的避免“復制粘貼”代碼的問題,徹底改變寫代碼的方式。
二、Hutool-db
數據庫操作不外乎四門功課:增刪改查,在Java的世界中,由於JDBC的存在,這項工作變得簡單易用,但是也並沒有做到使用上的簡化。於是出現了JPA(Hibernate)、MyBatis、Jfinal等解決框架,或解決多數據庫差異問題,或解決SQL維護問題。而Hutool對JDBC的封裝,多數為在小型項目中對數據處理的簡化,尤其只涉及單表操作時。OK,廢話不多,來個Demo感受下。
1、添加配置文件
Maven項目中在src/main/resources目錄下添加db.setting文件(非Maven項目添加到ClassPath中即可):
## db.setting文件
url = jdbc:mysql://localhost:3306/test
user = root
pass = 123456
## 可選配置
# 是否在日志中顯示執行的SQL
showSql = true
# 是否格式化顯示的SQL
formatSql = false
# 是否顯示SQL參數
showParams = true
2、引入驅動jar
<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>4.2.1</version> </dependency>
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.16</version> </dependency>
3、增刪查改
增
Db.use().insert(
Entity.create("user")
.set("name", "unitTestUser")
.set("age", 66)
);
插入數據並返回自增主鍵:
Db.use().insertForGeneratedKey( Entity.create("user") .set("name", "unitTestUser") .set("age", 66) );
刪
Db.use().del( Entity.create("user").set("name", "unitTestUser")//where條件 );
改
Db.use().update( Entity.create().set("age", 88), //修改的數據 Entity.create("user").set("name", "unitTestUser") //where條件 );
注意條件語句除了可以用=精確匹配外,也可以范圍條件匹配,例如表示 age < 12 可以這樣構造Entity:Entity.create("user").set("age", "< 12"),但是通過Entity方式傳入條件暫時不支持同字段多條件的情況。
查
- 查詢全部字段
//user為表名 Db.use().findAll("user");
- 條件查詢
Db.use().findAll(Entity.create("user").set("name", "unitTestUser"));
- 模糊查詢
Db.use().findLike("user", "name", "Test", LikeType.Contains);
- 分頁查詢
//Page對象通過傳入頁碼和每頁條目數達到分頁目的 PageResult<Entity> result = Db.use().page(Entity.create("user").set("age", "> 30"), new Page(10, 20));
- 執行SQL語句
//查詢 List<Entity> = Db.use().query("select * from user where age < ?", 3); //更新 Db.use().execute("update user set age = ? where name = ?", 3, "張三");
- 事務
Db.use().tx(new TxFunc() { @Override public void call(Db db) throws SQLException { db.insert(Entity.create("user").set("name", "unitTestUser")); db.update(Entity.create().set("age", 79), Entity.create("user").set("name", "unitTestUser")); } });
