MyBatis(一)----概述

一、Mybatis框架概述

1、什麼是框架?

框架是我們軟件開發中的一套解決方案,不同的框架解決的是不同的問題。因爲框架封裝了很多細節,它可以使開發者以極簡的方式實現功能,大大提高效率

2、常用的三層架構

  • 表現層:用於展示數據的,常用的框架如SpringMVC

  • 業務層:是處理業務需求的。

  • 持久層:和數據庫進行交互,如MyBatis
    在這裏插入圖片描述

3、持久層的解決方案

  • JDBC技術

  • SpringJdbcTemplate

Spring中對jdbc進行簡單的封裝。

  • Apache的DButils

它和Spring的JdbcTemplate很像,也是對jdbc進行簡單的封裝

NOTE:這些都不是框架,其中JDBC是規範,而JdbcTemplate和Dbutils都只是工具類。
在這裏插入圖片描述

4、JDBC編程分析及缺點

4.1JDBC編碼

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/springcharacterEncoding=utf-8","root", "root");
     //定義 sql 語句 ?表示佔位符    
        String sql = "select * from user where username = ?"; 
        //獲取預處理 statement    
        preparedStatement = connection.prepareStatement(sql); 
        //設置參數,第一個參數爲 sql 語句中參數的序號(從 1 開始),第二個參數爲設置的 參數值 
        preparedStatement.setString(1, "Simon"); 
        //向數據庫發出 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();      							
                                   } 
                               }
                           }
                       }

這是最原始的方法實現了數據庫表的記錄操作。

4.2、問題分析

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

5、使用mybatis

mybatis是採用java編寫的一個持久層框架,它封裝了jdbc操作的很多細節,使開發者只需要關注sql語句本身,而無需關注註冊驅動、創建鏈接等繁雜過程,使用ORM思想實現了對結果集的封裝。

**ORM:**Object Relational Mapping對象關係映射,即把數據庫表和實體類即實體類的屬性對應起來,使得我們可以操作實體類就可以實現操作數據庫表。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章