一、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對象關係映射,即把數據庫表和實體類即實體類的屬性對應起來,使得我們可以操作實體類就可以實現操作數據庫表。