当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

让sqlmap文件 "继承" 起来

发表于: 2013-12-10   作者:bijian1013   来源:转载   浏览:
摘要:         多个项目中使用ibatis , 和数据库表对应的 sqlmap文件(增删改查等基本语句),dao, pojo 都是由工具自动生成的, 现在将这些自动生成的文件放在一个单独的工程中,其它项目工程中通过jar包来引用 ,并通过"继承"为基础的sqlmap文件,dao,pojo 添加新的方法来满足项

        多个项目中使用ibatis , 和数据库表对应的 sqlmap文件(增删改查等基本语句),dao, pojo 都是由工具自动生成的, 现在将这些自动生成的文件放在一个单独的工程中,其它项目工程中通过jar包来引用 ,并通过"继承"为基础的sqlmap文件,dao,pojo 添加新的方法来满足项目需求。 dao,pojo等java文件的继承好说, sqlmap文件如何能“继承“呢 ?
        简单演示如下,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

<sqlMap namespace="User">
 <!-- 根据用户名获取用户对象,注意user-result定义在UserSQL.xml文件中 -->  
 <select id="getUserByName"  parameterClass="string" resultMap="user-result">  
   ...  
 </select>
</sqlMap>

        对UserSQL.xml文件的"继承"(这个词可能不太合适) , 只定义方法一个方法(注意它与UserSQL.xml有相同namespace="User")

        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。

 

资料来源:http://www.iteye.com/topic/930092

让sqlmap文件 "继承" 起来

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
【IT168 技术】本文将为大家介绍在Visual Studio 2010中如何将CUDA文件进行高亮设置。   先看下图
sqlMapConfig中sqlMap的顺序必须是串行的,即被调用class所在的xml文件必须在调用的xml文件前面,如
sqlMapConfig中sqlMap的顺序必须是串行的,即被调用class所在的xml文件必须在调用的xml文件前面,如
sqlmap使用笔记 Sqlmap简介   官方网址:http://sqlmap.org   Github地址:https://github.com/
阅读目录 准备 安装 使用 准备 需要python、java环境,并且需要下载sqlmap.py、gason.jar插件 sqlma
对于网络安全人员来说,掌握渗透工具的使用方法是一项必备的技能。 sqlmap是一款非常强大的开源sql
(1)选项:-r REQUESTFILE Load HTTP request from a file (2)选项:--current-db Retrieve DBMS
(1)选项:-r REQUESTFILE Load HTTP request from a file (2)选项:--current-db Retrieve DBMS
http://www.myhack58.com/Article/html/3/8/2012/35324.htm 目标: http://www.djj.com/yz/cn/video
虽然我用过mssql和oracle,但表示只是用过,不是很熟,所以本文大多数都在说MySQL数据库。 一、数据
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号