【MyBatis】1:JDBC程式設計存在的問題
做Java開發,如何運算元據庫?想必大家都知道,使用JDBC(Java Data Base Connectivity),這是一種用於執行SQL語句的Java API,可以為多種關係型資料庫提供統一訪問,它是由一組用Java編寫的類和介面組成。JDBC提供了一種基準,在此基礎上我們可以構建更高階的工具和介面,使資料庫開發人員能夠更加方便和輕鬆的編寫資料庫應用程式。
JDBC程式設計8步走:
1載入資料庫驅動
2建立並獲取資料庫連線
3建立jdbc statement物件
4設定sql語句
5設定sql語句中引數(使用preparedStatement)
6通過statement執行sql語句並獲取結果
7對sql執行結果進行解析處理
8釋放所有的資源(resultSet、preparedStatement、connection)
捋清楚了編碼思路,來,上機敲程式碼……
public class JdbcTest {
/**
* @param args
*/
public static void main(String[] args) {
//資料庫連線
Connection connection = null;
//預編譯的Statement,使用預編譯的Statement提高資料庫效能
PreparedStatement preparedStatement = null;
//結果集
ResultSet resultSet = null;
try {
//載入資料庫驅動
Class.forName("com.mysql.jdbc.Driver");
//通過驅動管理類獲取資料庫連結
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/shop?characterEncoding=utf-8", "root", "");
//定義sql語句 ?表示佔位符
String sql = "select * from user where username = ?";
//獲取預處理statement
preparedStatement = connection.prepareStatement(sql);
//設定引數,第一個引數為sql語句中引數的序號(從1開始),第二個引數為設定的引數值
preparedStatement.setString(1, "ljw");
//向資料庫發出sql執行查詢,查詢出結果集
resultSet = preparedStatement.executeQuery();
//遍歷查詢結果集
while(resultSet.next()){
System.out.println(resultSet.getString("uid")+" "+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) {
e.printStackTrace();
}
}
}
}
}
編寫完程式碼之後,我們回過頭去分析使用JDBC程式設計存在一些什麼問題。
1如果使用JDBC做開發,那麼資料庫連線將會大量的被建立,並且每一次的建立最終都要釋放資源,如此頻繁的操作將嚴重影響系統的效能,同時也會造成系統資源的浪費,一個很好的解決辦法是使用資料庫連線池。
2使用JDBC進行開發,sql語句是寫死在程式碼裡面的,也就是所謂的硬編碼,這樣會造成程式碼極難維護,因為實際的需求會有變動,一旦需求有變,我們就要修改java原始碼,並進行再次的編譯和部署,簡直是麻煩。
3使用PreparedStatement物件向sql語句的佔位符中傳遞引數的時候,也存在硬編碼的情況,實際應用中sql語句的where條件是不固定的,可能多也可能少,每一次的變動都要修改java程式碼,系統維護困難。
4在最後對結果集進行解析和輸出的時候,也存在硬編碼的情況(即查詢列名),這樣一來,sql語句如果變化,那麼對應的解析程式碼也將隨之變化,系統不易維護,比較好的解決辦法是將資料庫記錄封裝成pojo物件再進行解析。
綜上來看,使用JDBC程式設計存在不少的問題,當然上面列舉的也只是一部分而已,還有開發效率問題,程式碼複用率問題等等。瞭解了這些問題,我們才能更好的理解,接下來我們要學習的MyBatis是如何解決這些問題的。相關文章
- Mybatis入門 Mybatis存在的意義 解決的問題 基本操作MyBatis
- 2020-10-10: 傳統JDBC開發存在的問題?JDBC
- 平臺化設計產品存在的問題
- 產品設計中,DFMEA存在的問題有哪些?
- 3n+1問題的考察及python程式設計Python程式設計
- Mybatis N+1問題解析MyBatis
- Mybatis where 1=1 動態sql問題MyBatisSQL
- 程式碼設計問題
- 解決Mybatis連線Sql server 出現 Cannot load JDBC driver class 'com.mysql.jdbc.Driver '的問題MyBatisServerJDBCMySql
- Java程式設計基礎33——JDBCJava程式設計JDBC
- socket程式設計中常見的概念問題!程式設計
- jdbc執行DML程式設計舉例JDBC程式設計
- go path 存在的問題Go
- 前端中的簡單程式設計題-字串(1)前端程式設計字串
- HBase中Memstore存在的意義以及多列族引起的問題和設計
- 資料庫連線分析(1)-從JDBC到MyBatis資料庫JDBCMyBatis
- 圖形程式設計問題記錄程式設計
- 虛擬化存在的問題
- 提出問題,解答問題!這才是理解程式碼設計的正確方法
- 【知乎問題】如何讓不懂程式設計的人感受到程式設計的魅力程式設計
- 解決問題的能力 > 10倍程式設計師程式設計師
- C語言程式設計題T1C語言程式設計
- 好程式設計師Java培訓分享Mybatis面試題集合程式設計師JavaMyBatis面試題
- mybatis---回顧jdbcMyBatisJDBC
- JAVA程式設計題-用java解決兔子問題Java程式設計
- 【譯】Googler如何解決程式設計問題Go程式設計
- Python程式設計常見問題與解答Python程式設計
- 程式設計謎題:提升你解決問題的訓練場程式設計
- 程式設計師面試常問計算機網路問題程式設計師面試計算機網路
- 深入淺出MyBatis:JDBC和MyBatis介紹MyBatisJDBC
- MyBatis-09-FactoryBean的問題MyBatisBean
- [併發程式設計]-關於 CAS 的幾個問題程式設計
- Java程式設計師,你的簡歷到底問題在哪?Java程式設計師
- 今日頭條程式設計題1 找"最大"點程式設計
- MyBatis order by失效問題MyBatis
- MyBatis常見問題MyBatis
- socket程式設計(1)程式設計
- @程式設計師,安全問題必須重視!程式設計師
- Java程式設計師面試常見問題Java程式設計師面試