【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
- 平臺化設計產品存在的問題
- Mybatis N+1問題解析MyBatis
- Mybatis where 1=1 動態sql問題MyBatisSQL
- 程式設計文化的問題程式設計
- 3n+1問題的考察及python程式設計Python程式設計
- 2020-10-10: 傳統JDBC開發存在的問題?JDBC
- java的socket程式設計問題Java程式設計
- 程式碼設計問題
- 每個程式設計師1小時內必須解決的5個程式設計問題程式設計師
- JDBC問題,求助JDBC
- 程式設計師在程式設計中遇到的奇葩弱智問題程式設計師
- 解決Mybatis連線Sql server 出現 Cannot load JDBC driver class 'com.mysql.jdbc.Driver '的問題MyBatisServerJDBCMySql
- 程式設計假期練習題--1程式設計
- Java程式設計基礎33——JDBCJava程式設計JDBC
- JDBC中事務的問題JDBC
- BMP的JDBC問題,請指教JDBC
- jdbc資源的回收問題!JDBC
- 程式設計師需要自問的 10 個問題程式設計師
- socket程式設計中常見的概念問題!程式設計
- 最令程式設計師生厭的問題程式設計師
- 程式設計師,你會問問題嗎?程式設計師
- PCL常見程式設計問題程式設計
- 前端中的簡單程式設計題-字串(1)前端程式設計字串
- 資料庫連線分析(1)-從JDBC到MyBatis資料庫JDBCMyBatis
- 好程式設計師Java培訓分享Mybatis面試題集合程式設計師JavaMyBatis面試題
- jdbc執行DML程式設計舉例JDBC程式設計
- UCP - 高效能 Oracle JDBC 程式設計OracleJDBC程式設計
- 【Fenng 】JDBC 的 setTimestamp 效能問題JDBC
- JDBC連線MySQL失效的問題JDBCMySql
- 四個經典的SQL程式設計問題SQL程式設計
- 有關asp程式設計中,baseclass的問題程式設計
- Linux程式設計:程式同步問題之哲學家就餐問題Linux程式設計
- 【知乎問題】如何讓不懂程式設計的人感受到程式設計的魅力程式設計
- 你意想不到的的程式設計問題程式設計
- 前端中的簡單程式設計題-陣列(1)前端程式設計陣列
- JDBC連線ORACLE問題JDBCOracle
- 圖形程式設計問題記錄程式設計