首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 資料庫操作封裝類別實作範例(Servlet + 簡易 ORM)

     編輯:Java 相關知識

展示一個輕量級的資料庫操作封裝 DB 類別,搭配 HttpServlet 完成 CRUD 流程。程式碼採用回呼風格處理查詢結果,並示範連線池基本設定。

核心 Servlet 控制器

public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String action = req.getParameter("action");
        switch (action != null ? action : "") {
            case "show": findAll(req, resp); break;
            case "del":  del(req, resp); break;
            case "edit": find(req, resp); break;
            case "update": update(req, resp); break;
            case "insert": insert(req, resp); break;
            default: resp.sendError(HttpServletResponse.SC_BAD_REQUEST);
        }
    }
    @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }

    // 查詢全部(非同步回呼風格)
    private void findAll(HttpServletRequest req, HttpServletResponse resp) {
        DB db = getDB();
        db.findAll(new DB.QueryAllCallback() {
            @Override public void callback(List<Map<String, Object>> list) {
                req.setAttribute("userList", list);
                forward(req, resp, "/index.jsp");
            }
        }, "*");
    }

    // 刪除
    private void del(HttpServletRequest req, HttpServletResponse resp) {
        DB db = getDB();
        db.where(new ContentValues().put("id", req.getParameter("id"))).del();
        db.close();
        findAll(req, resp);
    }

    // 查詢單筆(編輯頁)
    private void find(HttpServletRequest req, HttpServletResponse resp) {
        DB db = getDB();
        db.find(new DB.QueryCallback() {
            @Override public void callback(Map<String, Object> map) {
                req.setAttribute("user", map);
                forward(req, resp, "/edit.jsp");
            }
        }, "id", "name", "birthday");
        db.close();
    }

    // 新增
    private void insert(HttpServletRequest req, HttpServletResponse resp) {
        DB db = getDB();
        db.insert(Utils.params2Array(req, 3, "null", "user", "birth", "pwd"));
        db.close();
        findAll(req, resp);
    }

    // 更新
    private void update(HttpServletRequest req, HttpServletResponse resp) {
        DB db = getDB();
        db.where(new ContentValues().put("id", req.getParameter("id")))
          .update(new ContentValues()
              .put("name", req.getParameter("user"))
              .put("pwd", Utils.md5(req.getParameter("pwd")))
              .put("birthday", req.getParameter("birth")));
        db.close();
        findAll(req, resp);
    }

    private DB getDB() {
        DB.URI  = "jdbc:mysql://localhost:3306/forjava";
        DB.connect("utf-8");
        return DB.init("users");
    }

    private void forward(HttpServletRequest req, HttpServletResponse resp, String path) {
        try { req.getRequestDispatcher(path).forward(req, resp); }
        catch (Exception e) { e.printStackTrace(); }
    }
}

關鍵設計重點

  • 鏈式呼叫:db.where(...).del()、db.where(...).update(...) 讓 SQL 組裝更直觀。
  • 回呼處理結果:避免在 Servlet 執行緒長時間持有連線,查詢完成即釋放資源。
  • 參數轉換工具:Utils.params2Array 將 HttpServletRequest 參數快速映射為陣列。
  • 密碼加密:更新時對密碼進行 MD5 雜湊(實務建議改用 BCrypt/Argon2)。

生產環境建議強化項目

  1. 改用成熟連線池(HikariCP / Druid)管理連線生命週期。
  2. 導入成熟 ORM(MyBatis / JPA)減少手寫 SQL 風險。
  3. 統一例外處理與交易控制(@Transactional)。
  4. 移除硬編碼 DB 設定,改用外部設定檔(application.yml / properties)。
  5. 密碼雜湊升級為強演算法並加鹽。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved