本文以簡易用戶管理系統(MyUsers)為例,示範經典三層架構整合開發:前端 Struts MVC、中介層 Spring 管理業務邏輯與事務、持久層 Hibernate 實作 ORM。功能涵蓋用戶的新增、查詢、更新、刪除(CRUD)。
https://www.binamics.com/hibernatesynchttps://springframework.sourceforge.net/spring-ide/eclipse/updatesite/CREATE TABLE app_user (
id NUMBER NOT NULL PRIMARY KEY,
firstname VARCHAR2(32),
lastname VARCHAR2(32)
);
建立 Web Project,目錄包含 page(JSP)、test(JUnit)。將 Struts、Hibernate、Spring 相關 JAR 放入 WEB-INF/lib。
使用 Hibernate 外掛從資料庫匯出 User.hbm.xml,對應 APP_USER 表,主鍵採 assigned 策略(手動指派)。
透過 Hibernate Synchronizer 產生 User.java,繼承 BaseObject(實作 Serializable、Apache Commons Lang 產生 toString/equals/hashCode)。屬性含 id、firstName、lastName 及 Getter/Setter。
package com.jandar.services.dao;
public interface IDAO { }
public interface IUserDAO extends IDAO {
List getUsers();
User getUser(Integer userid);
void saveUser(User user);
void removeUser(Integer id);
}
public class UserDaoHibernate extends HibernateDaoSupport implements IUserDAO {
private Log log = LogFactory.getLog(UserDaoHibernate.class);
public List getUsers() {
return getHibernateTemplate().find("from User");
}
public User getUser(Integer id) {
return (User) getHibernateTemplate().get(User.class, id);
}
public void saveUser(User user) {
getHibernateTemplate().saveOrUpdate(user);
if (log.isDebugEnabled()) log.debug("userId set to " + user.getId());
}
public void removeUser(Integer id) {
Object user = getHibernateTemplate().load(User.class, id);
getHibernateTemplate().delete(user);
if (log.isDebugEnabled()) log.debug("del user " + id);
}
}
繼承 HibernateDaoSupport 簡化 Session 管理,透過 HibernateTemplate 執行 CRUD 操作。
applicationContext.xml 裝配 Spring Bean、事務攔截UserManager,聲明式事務管理Action 與 ActionForm完整配置細節請參考後續章節。