ibatis的配置文件中有一个命名空间的属性,如<sqlMap namespace="Application">,默认情况下这个功能是关闭的。
要打开它需要在SqlMapConfig.xml文件中进行配置:
<sqlMapConfig>
<settings
cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
errorTracingEnabled="true"
maxRequests="32"
maxSessions="10"
maxTransactions="5"
useStatementNamespaces="true"
/>
</sqlMapConfig>
启用了命名空间后,我们用queryForXXX进行操作的时候就要加上命名空间了,即“命名空间名.ID名”
typeAlias 节点不受命名空间的影响。
【注意】
1、Normandy项目中的配置如下:
- <?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">
- <sqlMapConfig>
- <settings lazyLoadingEnabled="true" cacheModelsEnabled="true"
- enhancementEnabled="true" useStatementNamespaces="true"
- errorTracingEnabled="true" />
- <sqlMap resource="ibatis/Application.xml" />
- <sqlMap resource="ibatis/Domain.xml" />
- <sqlMap resource="ibatis/ConfigKey.xml" />
- <sqlMap resource="ibatis/ConfigValue.xml" />
- <sqlMap resource="ibatis/NormandyServer.xml" />
- <sqlMap resource="ibatis/ConfigValueChangeEvent.xml" />
- </sqlMapConfig>
另外:
<sqlMap namespace="Application">
<select id="selectById" resultClass="businessReliableAnalysis.model.User">
<![CDATA[
select ROLE_ID,USER_ID from SEC_ROLE_USER WHERE ROLE_ID=222
]]>
</select>
</sqlMap>
访问:
- public class ApplicationUtil {
- private SqlMapClientTemplate sqlMapClientTemplate;
- public SqlMapClientTemplate getSqlMapClientTemplate() {
- return sqlMapClientTemplate;
- }
- public void setSqlMapClientTemplate(
- SqlMapClientTemplate sqlMapClientTemplate) {
- this.sqlMapClientTemplate = sqlMapClientTemplate;
- }
- public Application getApplicationById(int id) {
- return (Application) sqlMapClientTemplate.queryForObject(
- "Application.selectById", id); //调用ibatis的namespace=Application,id=selectById的xml文件
- }
- }
【注】
1、使用缓存之后,在同一方法中发出的多条sql或同一条sql被发了多次时将被缓存统一发出:cacheModelsEnabled="true" 。?? 待验证
2、IBATIS 何时使用CDATA
ibatis sql语句中 如果遇到 <,>,&,这三类符号的 ,必须要用CDATA 符号,因为在DTD规定中,那三个字符时有特殊含义的!