繼完成 Spring 與 Hibernate 整合後,本篇將利用 MyEclipse 的 Hibernate 反向工程功能,根據數據庫表自動生成實體類、映射文件及 DAO 代碼,並對專案目錄結構進行分層優化,引入屬性配置文件分離數據源信息,提升專案可維護性與擴展性。
前提:MySQL 數據庫 ssimdb 中已建立 ssim_user 表(含主鍵、郵箱、密碼、真實姓名等字段)。
ssim_user 表。net.selitech.ssim.dao 包,包含 SsimUser.java、SsimUser.hbm.xml、SsimUserDAO.java 等文件。封裝 Spring 容器啟動與 Bean 獲取邏輯,子類只需覆寫 getPathName() 指定配置文件路徑:
public class SpringTestCase extends TestCase {
private ApplicationContext context;
@Override protected void setUp() {
context = new ClassPathXmlApplicationContext(getPathName());
}
protected String getPathName() { return "application-context.xml"; }
protected Object getBean(String name) { return context.getBean(name); }
}
public class SsimUserDAOTest extends SpringTestCase {
private SsimUserDAO ssimUserDAO;
@Override public void setUp() {
super.setUp();
ssimUserDAO = (SsimUserDAO) getBean("SsimUserDAO");
}
public void testSsimUserDAO() {
List<SsimUser> list = ssimUserDAO.findAll();
for (SsimUser u : list) {
System.out.println(u.getUserEmail() + "\t" + u.getUserRealname());
}
}
}
運行測試,控制台輸出用戶郵箱與姓名即表明 DAO 層工作正常。
新建 ssimdb-config.properties 放置於 classpath 根目錄:
# database connection
ssimdb.mysql.url=jdbc:mysql://localhost:3306/ssimdb
ssimdb.mysql.username=root
ssimdb.mysql.password=your_password
# hibernate settings
hibernate.show_sql=false
<beans ...>
<import resource="beans/data-source.xml" />
<import resource="beans/ssim-dao.xml" />
<bean id="configurator" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list><value>ssimdb-config.properties</value></list>
</property>
</bean>
</beans>
data-source.xml:配置 DBCP 連接池、SessionFactory,引用屬性佔位符 ${...}:
<bean id="ssimdb.mssql" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="${ssimdb.mysql.url}"/>
<property name="username" value="${ssimdb.mysql.username}"/>
<property name="password" value="${ssimdb.mysql.password}"/>
<property name="maxIdle" value="10"/>
<property name="minIdle" value="2"/>
<property name="maxActive" value="10"/>
</bean>
<bean id="ssimdb.session.factory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="ssimdb.mssql"/>
<property name="hibernateProperties">
<props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop></props>
</property>
<property name="mappingResources">
<list><value>dao/SsimUser.hbm.xml</value></list>
</property>
</bean>
ssim-dao.xml:聲明 DAO Bean 並注入 SessionFactory:
<bean id="SsimUserDAO" class="net.selitech.ssim.dao.SsimUserDAO">
<property name="sessionFactory" ref="ssimdb.session.factory"/>
</bean>
再次運行 SsimUserDAOTest,測試通過說明:反向生成代碼正確、配置文件模組化無誤、屬性佔位符解析成功。專案現已具備清晰的分層結構:dao、service、web、utils 等包職責分明,為後續 Struts 2 整合打下堅實基礎。