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

iBatis DAO 框架入門:從 SQL Maps 遷移到 DAO 模式的完整實戰

     編輯:Java 程式設計入門

為什麼需要 DAO 模式?

核心 J2EE 模式建議:將所有資料源訪問封裝在公共 API(介面)中。應用程式依賴介面,具體實現可替換(SQL Maps、Hibernate、XML 檔案等),實現持久化機制與業務邏輯解耦。

遷移實戰:Contact 範例

1. 引入依賴

複製 ibatis-dao-2.jar 至 WEB-INF/lib。

2. DAO 配置文件

<?xml version="1.0" encoding="UTF-8"?>
<daoConfig>
  <context id="sqlmap">
    <property name="SqlMapConfigResource" 
              value="com/sample/contact/dao/sqlmap/SqlMapConfig.xml"/>
    <dao interface="com.sample.contact.dao.ContactDAO"
         implementation="com.sample.contact.dao.sqlmap.SQLMapContactDAO"/>
  </context>
</daoConfig>
  • <context>:定義一種儲存機制,含事務管理器(此處省略)
  • <dao>:綁定介面與具體實現類

3. 定義 DAO 介面

package com.sample.contact.dao;
import com.ibatis.dao.client.DAO;

public interface ContactDAO extends DAO {
    int insertContact(Contact contact);
    int updateContact(Contact contact);
    Contact selectContact(int contactId);
    int deleteContact(int contactId);
}

方法參數使用 Contact DTO 物件,封裝資料傳遞。

4. 實現類:繼承 SqlMapDaoTemplate

package com.sample.contact.dao.sqlmap;
import com.ibatis.dao.client.template.SqlMapDaoTemplate;
import com.sample.contact.dao.ContactDAO;
import com.sample.contact.domain.Contact;

public class SQLMapContactDAO extends SqlMapDaoTemplate implements ContactDAO {
    public SQLMapContactDAO(DaoManager daoManager) { super(daoManager); }

    public int deleteContact(int contactId) {
        return delete("deleteContact", new Integer(contactId));
    }
    public int insertContact(Contact contact) {
        Integer id = (Integer) insert("insertContact", contact);
        return contact.getContactId();
    }
    public Contact selectContact(int contactId) {
        return (Contact) queryForObject("getContact", new Integer(contactId));
    }
    public int updateContact(Contact contact) {
        return update("updateContact", contact);
    }
}

關鍵優勢:無需手寫連線獲取、事務邊界、SQL Map 初始化——SqlMapDaoTemplate 封裝了樣板代碼,開發者專注業務邏輯。

5. Action 中使用 DAO

public class ContactSelectAction extends Action {
    public ActionForward execute(ActionMapping mapping, ActionForm form,
                                 HttpServletRequest request, HttpServletResponse response) {
        Contact contactForm = (Contact) form;
        Reader reader = Resources.getResourceAsReader("DAOMap.xml");
        DaoManager daoManager = DaoManagerBuilder.buildDaoManager(reader);
        ContactDAO contactDAO = (ContactDAO) daoManager.getDao(ContactDAO.class, "sqlmap");
        
        request.setAttribute("contactDetail", 
            contactDAO.selectContact(contactForm.getContactId()));
        return mapping.findForward("success");
    }
}

生產建議:DaoManager 應在應用啟動時初始化一次(如 Struts PlugIn、ServletContextListener),而非每請求構建。

架構優勢總結

  • 介面隔離:業務代碼零依賴具體持久化技術
  • 多實現共存:同一介面可配置 SQL Maps、Hibernate、JDBC、XML 等多種實現
  • 事務統一:框架層面統一事務邊界與連線管理
  • 測試友好:易於 Mock DAO 介面進行單元測試

下一步預告

後續將深入:DAO 框架內部構造、事務管理機制、自訂事務管理器實現。

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