[轉載] 快速學習-Mybatis框架概述

ld909發表於2020-12-13

參考連結: Java在競爭性程式設計中的快速I/O

第1章 框架概述 

1.1 什麼是框架 

1.1.1 什麼是框架 

框架(Framework)是整個或部分系統的可重用設計,表現為一組抽象構件及構件例項間互動的方法;另一種定義認為,框架是可被應用開發者定製的應用骨架。前者是從應用方面而後者是從目的方面給出的定義。 

簡而言之,框架其實就是某種應用的半成品,就是一組元件,供你選用完成你自己的系統。簡單說就是使用別人搭好的舞臺,你來做表演。而且,框架一般是成熟的,不斷升級的軟體。 

1.1.2 框架要解決的問題 

框架要解決的最重要的一個問題是技術整合的問題,在 J2EE 的 框架中,有著各種各樣的技術,不同的軟體企業需要從 J2EE 中選擇不同的技術,這就使得軟體企業最終的應用依賴於這些技術,技術自身的複雜性和技術的風險性將會直接對應用造成衝擊。而應用是軟體企業的核心,是競爭力的關鍵所在,因此應該將應用自身的設計和具體的實現技術解耦。這樣,軟體企業的研發將集中在應用的設計上,而不是具體的技術實現,技術實現是應用的底層支撐,它不應該直接對應用產生影響。 

框架一般處在低層應用平臺(如 J2EE)和高層業務邏輯之間的中間層。 

1.1.3 軟體開發的分層重要性 

框架的重要性在於它實現了部分功能,並且能夠很好的將低層應用平臺和高層業務邏輯進行了緩和。為了實現軟體工程中的“高內聚、低耦合”。把問題劃分開來各個解決,易於控制,易於延展,易於分配資源。我們常見的 MVC 軟體設計思想就是很好的分層思想。  通過分層更好的實現了各個部分的職責,在每一層將再細化出不同的框架,分別解決各層關注的問題。 

1.1.4 分層開發下的常見框架 

常見的 JavaEE 開發框架: 1、解決資料的持久化問題的框架   

1.1.5 MyBatis 框架概述 

mybatis 是一個優秀的基於 java 的持久層框架,它內部封裝了 jdbc,使開發者只需要關注 sql 語句本身, 而不需要花費精力去處理載入驅動、建立連線、建立 statement 等繁雜的過程。 

mybatis 通過 xml 或註解的方式將要執行的各種 statement 配置起來,並通過 java 物件和statement 中sql 的動態引數進行對映生成最終執行的 sql 語句,最後由 mybatis 框架執行 sql 並將結果對映為 java 物件並返回。 

採用 ORM 思想解決了實體和資料庫對映的問題,對 jdbc 進行了封裝,遮蔽了jdbc api 底層訪問細節,使我們不用與 jdbc api 打交道,就可以完成對資料庫的持久化操作。 

為了我們能夠更好掌握框架執行的內部過程,並且有更好的體驗,下面我們將從自定義 Mybatis 框架開始來學習框架。此時我們將會體驗框架從無到有的過程體驗,也能夠很好的綜合前面階段所學的基礎。 

1.2 JDBC 程式設計的分析 

1.2.1 jdbc 程式的回顧 

public static void main(String[] args) {

        Connection connection = null;

        PreparedStatement preparedStatement = null;

        ResultSet resultSet = null;

        try {

            //載入資料庫驅動

            Class.forName("com.mysql.jdbc.Driver");

            //通過驅動管理類獲取資料庫連結

            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "ro ot", "root");

            //定義 sql 語句 ?表示佔位符

            //獲取預處理 statement

            preparedStatement = connection.prepareStatement(sql);

            //設定引數,第一個引數為 sql 語句中引數的序號(從 1 開始),第二個引數為設定的

 

            preparedStatement.setString(1, "王五");

            //向資料庫發出 sql 執行查詢,查詢出結果集

            resultSet = preparedStatement.executeQuery();

            //遍歷查詢結果集

            while (resultSet.next()) {

                System.out.println(resultSet.getString("id") + "

                        "+resultSet.getString("username"));

 

            }

        } catch (Exception e) {

            e.printStackTrace();

        } finally {

            //釋放資源

            if (resultSet != null) {

                try {

                    resultSet.close();

                } catch (SQLException e) {

                    e.printStackTrace();

                }

            }

            if (preparedStatement != null) {

                try {

                    preparedStatement.close();

                } catch (SQLException e) {

                    e.printStackTrace();

                }

            }

            if (connection != null) {

                try {

                    connection.close();

                } catch (SQLException e) {

                    // TODO Auto-generated catch block e.printStackTrace();

                }

            }

        }

    }

 

上邊使用 jdbc 的原始方法(未經封裝)實現了查詢資料庫表記錄的操作。 

1.2.2 jdbc 問題分析 

1、資料庫連結建立、釋放頻繁造成系統資源浪費從而影響系統效能,如果使用資料庫連結池可解決此問題。 2、Sql 語句在程式碼中硬編碼,造成程式碼不易維護,實際應用 sql 變化的可能較大,sql 變動需要改變 java程式碼。 3、使用 preparedStatement 向佔有位符號傳引數存在硬編碼,因為 sql 語句的 where 條件不一定,可能多也可能少,修改 sql 還要修改程式碼,系統不易維護。 4、對結果集解析存在硬編碼(查詢列名),sql 變化導致解析程式碼變化,系統不易維護,如果能將資料庫記錄封裝成 pojo 物件解析比較方便。

相關文章