浏览 5583 次
锁定老帖子 主题:让sqlmap文件 "继承" 起来
精华帖 (0) :: 良好帖 (0) :: 新手帖 (15) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-02-25
简单演示如下,sqlmap文件"继承"的说法并不恰当(比如不支持重载), 说sqlmap文件"合并"可能更合适 sql-map-config.xml <sqlMapConfig> <settings useStatementNamespaces="true"/> <sqlMap resource="UserSQL.xml" /> <sqlMap resource="com/test/sqlmaps/UserSQL.ext.xml" /> </sqlMapConfig> UserSQL.xml 是user表基础的sqlmap文件 , 包含了增删改查的基本方法, 还有一个ResultMap <sqlMap namespace="User"> <resultMap class="com.test.model.User" id="user-result"> <result property="userId" column="user_id" /> <result property="userName" column="user_name" /> <result property="userPassword" column="user_password" /> </resultMap> <select id="get" parameterClass="long" resultMap="user-result"> ... </select> <update id="update" parameterClass="com.test.model.User"> ... </update> <insert id="insert" parameterClass="com.test.model.User"> ... </insert> <delete id="delete" parameterClass="long"> ... </delete> </sqlMap> UserSQL.ext.xml 对UserSQL.xml文件的"继承"(这个词可能不太合适) , 只定义方法一个方法(注意它与UserSQL.xml有相同namespace="User") <sqlMap namespace="User"> <!-- 根据用户名获取用户对象,注意user-result定义在UserSQL.xml文件中 --> <select id="getUserByName" parameterClass="string" resultMap="user-result"> ... </select> </sqlMap> applicationContext-ibatis.xml , spring配置文件 <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="dataSource" ref="masterdb"/> <property name="configLocation" value="classpath:/sql-map-config.xml"/> </bean> 测试代码(在 ibatis 2.3.0版本下测试 没问题) public static void main(String[] args) throws Exception { ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"applicationContext-ibatis.xml"}); SqlMapClient client = (SqlMapClient)context.getBean("ssoSqlMapClient"); User user = (User)client.queryForObject("User.get",new Long(2L)); user = (User)client.queryForObject("User.getUserByName","fisher"); } ibatis 代码简单分析 com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser 这个类来分析 sql-map-config.xml文件 , 用的 SAX callback 方式 ,遇到 <sqlMap> 标签 ,再用 成com.ibatis.sqlmap.engine.builder.xml.SqlMapParser 分析 sqlmap xml文件 ,将分析结果 放入 com.ibatis.sqlmap.engine.builder.xml.XmlParserState 的实例中 , 最后由 XmlParserState.getConfig().getClient() 返回 SqlMapClient 对象 注意事项 1. 两个 sqlmap 文件 在 sql-map-config.xml中定义的顺序很重要, 一定要基础的sqlmap文件在前,否则会抛异常说"继承"的sqlmap文件中某些引用找不到 2. 如果两个 sqlmap 文件中 定义 id 相同的 statement ,会抛异常说 id重复了 3. 如果两个 sqlmap 文件中 定义 id 相同的 ResultMap ,不会抛异常, 各自sqlmap文件中的statement使用各自定义的ResultMap 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-02-25
sqlmap文件"合并"以前还真没用过,感觉这样对于同一个业务的多个应用采用统一的core包还有有些用处的,不错,谢谢分享!
|
|
返回顶楼 | |