首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

JDBC + Servlet 專案缺點:程式碼繁瑣、耦合高、維護難、不適合團隊開發

     編輯:程式設計疑難解答

核心痛點

維度JDBC + Servlet 現狀引入框架後改善
程式碼量每張表需手寫 CRUD:Connection、PreparedStatement、ResultSet 映射、try-catch-finally 關閉資源 → 單表約 100+ 行MyBatis/JPA:介面 + XML/註解,零樣板碼
耦合度Servlet 直寫 SQL、處理參數、轉換實體、轉發 JSP → 業務邏輯與資料存取、視圖渲染糅合分層架構:Controller-Service-DAO/Repository,各司其職
SQL 維護SQL 散落在 Java 字串中,修改欄位需全域搜尋,易遺漏集中管理於 Mapper XML 或 @Query 註解,版控清晰
連線管理手動獲取/關閉連線,易洩漏;無連線池效能差DataSource (HikariCP) + 宣告式事務
事務控制手動 conn.setAutoCommit(false)、commit/rollback,跨方法極難協調@Transactional 自動邊界,支援傳播行為
防注入需自律用 PreparedStatement,拼接字串極易植入漏洞框架強制參數化,原生支援動態 SQL 安全構建
分頁查詢各資料庫語法不同,手寫 LIMIT/OFFSET/ROWNUM 移植痛苦PageHelper / Spring Data Pageable 自動適配
團隊協作合併衝突頻發(同一 Servlet 改不同功能),Code Review 難聚焦分層+介面隔離,並行開發衝突極低

量化對比:新增一個「用戶查詢」功能

// JDBC + Servlet (約 80 行)
protected void doGet(...) {
    String sql = "SELECT * FROM user WHERE name LIKE ?";
    try (Connection c = ds.getConnection();
         PreparedStatement ps = c.prepareStatement(sql)) {
        ps.setString(1, "%" + name + "%");
        try (ResultSet rs = ps.executeQuery()) {
            List<User> list = new ArrayList<>();
            while (rs.next()) list.add(mapRow(rs));
            req.setAttribute("users", list);
            req.getRequestDispatcher("/user.jsp").forward(req, resp);
        }
    } catch (SQLException e) { throw new ServletException(e); }
}
private User mapRow(ResultSet rs) throws SQLException { ... }
// Spring Boot + MyBatis (約 15 行)
// UserMapper.xml


// UserService.java
@Transactional(readOnly = true)
public List<User> search(String name) {
    return userMapper.selectByName("%" + name + "%");
}

// UserController.java
@GetMapping("/users")
public String list(@RequestParam String name, Model model) {
    model.addAttribute("users", userService.search(name));
    return "user";
}

何時「可」用 JDBC + Servlet?

  • 極簡單專案(< 5 張表、< 3 個功能、單人維護、無擴充計畫)。
  • 教學示範 JDBC 基礎原理。
  • 嵌入式/無框架限制環境。

總結

JDBC + Servlet **能跑、但不可維護**。只要專案超過「玩具級」,請直接上 **Spring Boot + MyBatis/JPA**,節省 80% 樣板碼,獲得事務、連線池、分頁、安全、測試等企業級能力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved