本文以 MyUsers 簡易用戶管理系統為例,示範 SSH 整合全流程:前端 Struts MVC、中間層 Spring 宣告式事務、後端 Hibernate ORM。涵蓋資料庫建表、Hibernate Mapping、DAO 實作、Service 事務宣告、Struts Action 整合、JSP 前端操作 10 大步驟。
src/
com.jandar.model/ # 實體類別 (User)
com.jandar.service.dao/ # DAO 介面 (IDAO, IUserDAO)
com.jandar.service.dao.hibernate/ # DAO 實作 (UserDaoHibernate)
com.jandar.service/ # Service 層 (UserManager)
com.jandar.web/ # Struts Action (UserAction)
WebContent/
page/ # JSP 頁面
WEB-INF/
struts-config.xml
applicationContext.xml # Spring 設定
hibernate.cfg.xml
web.xml
lib/ # struts, spring, hibernate 等 JAR
test/ # JUnit 測試
<hibernate-mapping package="com.jandar.model">
<class name="User" table="APP_USER">
<id name="id" column="ID" type="integer">
<generator class="assigned"/>
</id>
<property name="firstName" column="FIRSTNAME" type="string" length="10" not-null="true"/>
<property name="lastName" column="LASTNAME" type="string" length="10"/>
</class>
</hibernate-mapping>
public class User extends BaseObject {
private Long id;
private String firstName;
private String lastName;
// getter/setter...
}
public interface IUserDAO extends IDAO {
List getUsers();
User getUser(Integer id);
void saveUser(User user);
void removeUser(Integer id);
}
public class UserDaoHibernate extends HibernateDaoSupport implements IUserDAO {
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); }
public void removeUser(Integer id) {
Object user = getHibernateTemplate().load(User.class, id);
getHibernateTemplate().delete(user);
}
}
UserManager) 注入 DAO,宣告式事務:<tx:method name="*"/>DelegatingActionProxy) 或注入 ServiceCREATE TABLE app_user (id NUMBER PRIMARY KEY, firstname VARCHAR2(32), lastname VARCHAR2(32))Spring 宣告式事務 免除繁瑣程式碼控制交易;Hibernate 整合 簡化持久層;Struts 提供成熟 MVC。三者分工明確,鬆耦合、高內聚。