型 PhonebookEntry 对象。查看 清单 11 以更好地了解这一切是如何实现的。
清单 11. phonebook.xml 把业务模型映射到 SQL 语句
<sqlMap namespace="Phonebook">
<select id="getPhonebookEntries"
resultClass="phonebook.dao.PhonebookEntry">
SELECT
A.ENTRY_ID as entryID,
A.ENTRY_FNAME as fName,
A.ENTRY_LNAME as lName,
B.ROW_ID as rowID,
B.HOME_NUMBER as homeNumber,
B.WORK_NUMBER as workNumber,
B.CELL_NUMBER as cellNumber,
B.EMAIL as email
FROM PB_ENTRY A, PB_DETAILS B
WHERE A.ENTRY_ID = B.ENTRY_ID
AND A.ENTRY_ID != 0
</select>
</sqlMap>
Apache Geronimo和Spring框架,第3部分: 集成DAO与ORM(14)
时间:2011-10-13 IBM Arun Chhatpar
创建 SQL 映射配置文件
这是 iBATIS API 所需的另一个文件 。它将告诉运行 iBATIS 框架的容器在何处可以找到为应用程序定义的 SQL 映射。清单 12 中定义的设 置是可选的;如果删除这些设置,应用程序应当仍能正常运行。
创建 sqlmap-config.xml 文件并 将其放在 <WORKSPACE>/phonebook/web/META-INF 文件夹中(参见 清单 12)。
清单 12. sqlmap-config.xml 文件告知 iBatis 容器应用程序的 SQL 映射
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://www.ibatis.com/dtd/sql-map -config-2.dtd" >
<!-- Always be sure to use the correct XML header as above -->
<sqlMapConfig>
<settings cacheModelsEnabled="true" enhancementEnabled="true"
lazyLoadingEnabled="true" maxRequests="32"
maxSessions="10" maxTransactions="5"
useStatementNamespaces="false" />
<sqlMap resource="/phonebook/dao/orm/Phonebook.xml" />
</sqlMapConfig>
DAO 接口的 ORM 实现
使用 Spring 框架提供的 SqlMapClientDaoSupport 类来支持 iBATIS。这是一个实用工具类,它负责处理创建、管理和关闭连接这 些复杂的工作。
同 JdbcTemplate 类一样,SqlMapClientTemplate 类通过 iBATIS SQL 映射的 SqlMapClient API 简化了数据访问。它还处理所有 SQL 异常并将这些异常转换为一般的 Spring DAO 异 常。它与 JdbcTemplate 一样使用 SQLExceptionTranslator 机制。
清单 13 显示了 SqlMapPhonebookDao 类。
清单 13. DAO 接口的 ORM 实现
/**
* This is the ORM SQL Maps implementation for your application.
* The PhonebookEntry object is mapped directly to the database using the
* iBATIS framework. You can use any kind of database for RDBMS.
*/
public class SqlMapPhonebookDao extends SqlMapClientDaoSupport
implements IPhonebookDAO {
public List getPhonebookEntries() throws Exception {
return getSqlMapClientTemplate()
queryForList ("getPhonebookEntries",null);
}
}
注:如果在 Geronimo 中重 新部署应用程序,可能需要重新启动服务器。由于某种原因,当重新部 |