Java DbUtils 操作資料庫

来源:https://www.cnblogs.com/chy18883701161/archive/2019/08/18/11374640.html
-Advertisement-
Play Games

示例 1、新建項目,把資料庫驅動、DbUtils的jar包添加到項目中 2、新建文件夾resource,標識為資源根目錄,下麵新建資料庫連接的配置文件mysql.properties 3、新建實體類bean.Student DbUtils將結果集中的記錄映射到JavaBean中時,採用的方式和Spr ...


 

示例

1、新建項目,把資料庫驅動、DbUtils的jar包添加到項目中

 

2、新建文件夾resource,標識為資源根目錄,下麵新建資料庫連接的配置文件mysql.properties

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/my_db?serverTimezone=GMT
user=chy
password=abcd
?serverTimezone=GMT是為瞭解決時區問題,GMT、UTC均可。

 

3、新建實體類bean.Student

 1 package bean;
 2 
 3 public class Student {
 4     private int id;
 5     private String name;
 6     private int age;
 7     private int score;
 8 
 9     public Student() {
10     }
11 
12     public Student(int id, String name, int age, int score) {
13         this.id = id;
14         this.name = name;
15         this.age = age;
16         this.score = score;
17     }
18 
19     public int getId() {
20         return id;
21     }
22 
23     public void setId(int id) {
24         this.id = id;
25     }
26 
27     public String getName() {
28         return name;
29     }
30 
31     public void setName(String name) {
32         this.name = name;
33     }
34 
35     public int getAge() {
36         return age;
37     }
38 
39     public void setAge(int age) {
40         this.age = age;
41     }
42 
43     public int getScore() {
44         return score;
45     }
46 
47     public void setScore(int score) {
48         this.score = score;
49     }
50 
51     @Override
52     public String toString() {
53         return "Student{" +
54                 "id=" + id +
55                 ", name='" + name + '\'' +
56                 ", age=" + age +
57                 ", score=" + score +
58                 '}';
59     }
60 }

DbUtils將結果集中的記錄映射到JavaBean中時,採用的方式和Spring的設值註入一樣:先調用空參的構造器,再調用setter()方法進行初始化。

所以一定要有空參的構造器、setter()方法,要麼不寫構造器,調用預設的空參構造器;如果寫了帶參的構造器,就必須顯示寫空參的構造器。

 

4、新建測試類test.Test

 1 public class Test {
 2     public static void main(String[] args) throws ClassNotFoundException, IOException, SQLException {
 3         //從properties文件中載入資料庫配置
 4         Properties properties = new Properties();
 5         InputStream fis = Class.forName("test.Test").getResourceAsStream("/mysql.properties");
 6         properties.load(fis);
 7         String driver = properties.getProperty("driver");
 8         String url = properties.getProperty("url");
 9         String user = properties.getProperty("user");
10         String password = properties.getProperty("password");
11 
12         DbUtils.loadDriver(driver);   //靜態方法載入驅動
13         Connection connection = DriverManager.getConnection(url, user, password);  //獲取連接
14         QueryRunner queryRunner = new QueryRunner();  //創建QueryRunner對象,增刪查改都要通過QueryRunner對象來完成
15 
16         //查詢
17         String sql = "select * from student_tb where id=?";
18         BeanHandler<Student> studentBeanHandler = new BeanHandler<>(Student.class); //結果集處理器,將結果集中的記錄映射到指定的類中
19         Student student = queryRunner.query(connection, sql, studentBeanHandler, 1);  //執行查詢,將結果集中的記錄映射到JavaBean中,返回的就是目標類型,不必強轉
20         System.out.println(student);   //可通過getter()方法獲取屬性值(對應表中的欄位值)
21 
22         DbUtils.close(connection);  //靜態方法關閉連接
23     }
24 }

 

結果集處理器ResultSetHandler是一個介面,查詢時處理結果集要用到這個,用來將結果集中的記錄映射到指定的實體類中(JavaBean)。

BaseResultSetHandler是一個抽象類,implements  ResultSethandler。要創建結果集處理器的實例,這2個都不能直接創建實例。

BaseResultSetHandler有3個子類:

  • BeanHandler   將結果集中的記錄映射為一個JavaBean,適合結果集中只有一條記錄的情況
  • BeanListHandler   將結果集中的所有記錄映射為一個JavaBean的List集合,一條記錄就是一個元素,就是一個JavaBean。
  • BeanMapHandler  將結果集映射為JavaBean的Map集合

 

增刪查改都是通過QueryRunner對象來實現的:

  • 查:QueryRunner對象.query(資料庫連接,sql語句,結果集處理器,sql語句中的?部分的參數值)
  • 增、刪、改:QueryRunner對象.update(資料庫連接,sql語句,sql語句中?部分的參數值)

說明:

  • 最後一個是個數不確定的參數,可以沒有,也可以有多個,有多個時逗號隔開即可,也可以寫成數組的形式。
  • 如果使用了數據源,可預設第一個參數資料庫連接。
  • QueryRunner並非像名字中的query一樣只能用於查詢,QueryRunner提供的insert()方法不常用、不方便,插入也要用update()。

 

 

 

查詢

1 //查詢,結果集中只有一條記錄的情況
2         String sql = "select * from student_tb where id=?";
3         BeanHandler<Student> studentBeanHandler = new BeanHandler<>(Student.class); //<>中指定目標類型,()中指定目標類型的class
4         Student student = queryRunner.query(connection, sql, studentBeanHandler,1);  //執行查詢,,返回的就是目標類型,不必強轉
5         System.out.println(student);   //可通過getter()方法獲取屬性值(對應表中的欄位值)

 

1 //查詢,結果集中有多條記錄的情況
2         String sql = "select * from student_tb";
3         BeanListHandler<Student> studentBeanListHandler = new BeanListHandler<>(Student.class); //要用List
4         List<Student> list = queryRunner.query(connection, sql, studentBeanListHandler);  //返回值的類型是List<目標JavaBean>
5         //遍歷這個list就是遍歷結果集

 

 

 

增、刪、改

1   //插入
2         String sql = "insert into student_tb (name,age,score) values (?,?,?)";
3         //queryRunner.update(connection, sql, "曹操",20,90);  //返回值是int,受影響的記錄數
4         Object[] values = {"曹操",20,90};
5         queryRunner.update(connection, sql,values );  //?部分的參數值也可以寫成數組形式

增、刪、改的用法都差不多,不再一一列舉。

 

 

 

批量操作

語法:QueryRunner對象.batch(資料庫連接,sql語句,Object[][]) ;

最後一個參數是二維數組,一行對應一個sql語句?部分的參數值。

如果使用的是連接池,可預設第一個參數資料庫連接。

1 //批量插入
2         String sql = "insert into student_tb (name,age,score) values (?,?,?)";
3         Object[][] values = {{"曹操", 20, 90}, {"劉備", 20, 90}, {"孫權", 18, 88}};
4         queryRunner.batch(connection, sql,values);  //批量執行,返回的是int[],一個值對應一個sql語句影響的記錄數

DbUtils的批量操作是批量執行相似的sql語句(只有?部分的值不同)。

 

 

 

使用數據源

 1 //從properties文件中載入數據源配置
 2         Properties properties = new Properties();
 3         InputStream fis = Class.forName("test.Test").getResourceAsStream("/mysqlDataSource.properties");
 4         properties.load(fis);
 5         //String driver = properties.getProperty("driver");  //不必使用driver
 6         String url = properties.getProperty("url");
 7         String user = properties.getProperty("user");
 8         String password = properties.getProperty("password");
 9 
10         //配置數據源
11         MysqlDataSource dataSource=new MysqlDataSource();
12         dataSource.setURL(url);
13         dataSource.setUser(user);
14         dataSource.setPassword(password);
15 
16         //DbUtils.loadDriver(driver);   //資料庫驅動提供的數據源自帶驅動,不用再載入驅動
17         QueryRunner queryRunner = new QueryRunner(dataSource);  //需傳入一個數據源,操作資料庫時會自動獲取連接,不必手動獲取連接
18         String sql = "insert into student_tb (name,age,score) values (?,?,?)";
19         queryRunner.update(sql,"曹操", 20, 90);  //不必傳入連接,會自動從數據源獲取連接

不必手動獲取連接、關閉連接,很方便。

資料庫驅動自帶的數據源、C3P0、DBCP的操作方式差不多,此處不再一一寫出。

 

 

 

Hibernate也是將結果集中的記錄映射為實體對象,相比之下,DbUtils體積極小(只有一個jar包),沒有hql一樣複雜的操作,操作十分簡便。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 目錄 js面向對象編程 js原型鏈 共用方法 原型繼承 class繼承 js面向對象編程 js原型鏈 共用方法 原型繼承 class繼承 js面向對象編程 js面向對象編程不同於 java 的類和對象 JavaScript 不區分類和實例的概念,而是通過原型(prototype)來實現面向對象編程。 ...
  • 一、引言 單例模式應該算是23種設計模式中比較簡單的,它屬於創建型的設計模式,關註對象的創建。 二、概念 單例模式是23個“Gang Of Four”的設計模式之一,它描述瞭如何解決重覆出現的設計問題,以設計靈活且可復用的面向對象軟體,使對象的實現、更改、測試和重用更方便。 單例模式解決了以下問題: ...
  • 面向對象有三大特性分別是繼承、封裝和多態。 (1)繼承:繼承是一種聯結類的層次模型,並且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。對象的一個新類可以從現有的類中派生,這個過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的 ...
  • 法一(本地sql查詢,註意表名啥的都用資料庫中的名稱,適用於特定資料庫的查詢) 法二(jpa已經實現的分頁介面,適用於簡單的分頁查詢) 法三(Query註解,hql語局,適用於查詢指定條件的數據) 可以自定義整個實體(Page<User>),也可以查詢某幾個欄位(Page<Object[]>),和原 ...
  • 前言 因為C++是以C為基礎的,所以要用C++編程就必須熟悉C的語法。 C語言的學習可以學習K & R C的《C程式設計語言》 創建函數 Q: 函數原型? A: 標準C/C++有一個特征叫函數原型(function prototyping)。調用函數時,編譯器使用原型確保正確傳遞參數並且正確處理返回 ...
  • 使用 MyBatis 的 SqlSession MyBatis 的 提供了執行 SQL 語句、提交或回滾事務和獲取映射器實例的方法。 SqlSession 由工廠類 SqlSessionFactory 來創建, SqlSessionFactory 又是構造器類 SqlSessionFactoryBu ...
  • 親測有效,針對 阿裡雲 centos 7 輕量伺服器 python ==> 3.7.4 pip ==> 3 一,打開python官網,找到下載Python的tgz文件,有兩種方式下載 (版本可能更新,進官網核實為準) 1,直接在windows系統下了完了,通過xtfp上傳文件到/usr/local/ ...
  • PHP7 為什麼這麼快? 全新的zval 更節約的空間,棧上分配記憶體 zend_string 存儲字元串的Hash值,數組查詢的時候不需要進行Hash計算 在HashTable桶內直接存數據,減少了記憶體的申請次數,提升了cache命中率和記憶體訪問速度 zend_parse_parameters改為了 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...