傳統jdbc的編程步驟與mybatis相比較

2.1 jdbc編程步驟
1、加載數據庫驅動
2、創建並獲取數據庫鏈接
3、創建jdbc statement對象
4、設置sql語句
5、設置sql語句中的參數(使用preparedStatement)
6、通過statement執行sql並獲取結果
7、sql執行結果進行解析處理
8、釋放資源(resultSetpreparedstatementconnection)

 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", "root", "root");
       // 定義sql語句 ?表示佔位符
       String sql = "select * from user where username = ?";
       // 獲取預處理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) {
              // TODO Auto-generated catch block
              e.printStackTrace();
           }
       }
       if (preparedStatement != null) {
           try {
              preparedStatement.close();
           } catch (SQLException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
           }
       }
       if (connection != null) {
           try {
              connection.close();
           } catch (SQLException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
           }
       }
    }
}

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

2.3 Mybatis解決jdbc編程的問題
1、數據庫連接創建、釋放頻繁造成系統資源浪費從而影響系統性能,如果使用數據庫連接池可解決此問題。
解決:SqlMapConfig.xml中配置數據連接池,使用連接池管理數據庫鏈接。
2、Sql語句寫在代碼中造成代碼不易維護,實際應用sql變化的可能較大,sql變動需要改變java代碼。
解決:Sql語句配置在XXXXmapper.xml文件中與java代碼分離。
3、sql語句傳參數麻煩,因爲sql語句的where條件不一定,可能多也可能少,佔位符需要和參數一一對應。
解決:Mybatis自動將java對象映射至sql語句,通過statement中的parameterType定義輸入參數的類型。
4、對結果集解析麻煩,sql變化導致解析代碼變化,且解析前需要遍歷,如果能將數據庫記錄封裝成pojo對象解析比較方便。
解決:Mybatis自動將sql執行結果映射至java對象,通過statement中的resultType定義輸出結果的類型。
發佈了42 篇原創文章 · 獲贊 5 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章