`
xiebh
  • 浏览: 612817 次
  • 性别: Icon_minigender_1
  • 来自: 太原
社区版块
存档分类
最新评论

iBATIS中statement ID命名冲突

阅读更多
在用iBaTIS开发软件时,需要写很多sqlmap XML文件,尤其是多人开发时候,这样就会造成statement中的id会发生命名冲突,比如:
在A.xml、B.xml中,有以下片断

A.xml

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" 
    "http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="A">
    <update id="abcd">......</update>
</sqlMap>


B.xml

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" 
    "http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="B">
    <select id="abcd">......</select>
</sqlMap>

两个sqlmap file都有id为"abcd"的配置,如果这种情况,执行setSqlMapClientTemplate().update("abcd", new Integer(id));的时候,ibatis就不知道是调谁。

那么如何如何解决这个问题?方法1:通过命名规范,确保所有的id必须不一样,这样会麻烦,特别是当系统整合时候出现该问题,更是头疼,此方法不可取。
方法2:就是iBaTIS早已准备好的方法,通过sqlmap中的namespace。
ibatis中SqlMapConfig.xml中有一个设置

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" 
    "http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
    <settings 
        cacheModelsEnabled="true"
        lazyLoadingEnabled="false" 
        useStatementNamespaces="true" />


这儿的useStatementNamespaces="true"就是处理这个情况的,如果设为true(默认为false),,必须使用全限定名来引用mapped statement,代码中就是

getSqlMapClientTemplate().update("A.abcd", new Integer(id));
getSqlMapClientTemplate().queryForObject("B.abcd", new Integer(id));


分享到:
评论

相关推荐

    Ibatis查询Id列表.doc

    根据提供的文档信息,我们可以深入探讨Ibatis框架中的一个具体应用场景:如何通过动态SQL查询特定条件下的ID列表。本文将从以下几个方面进行详细解析: ### 一、Ibatis简介 Ibatis是一个基于Java的持久层框架,它...

    ibatis中iterate的例子

    在Java Web开发中,iBatis(现在称为MyBatis)是一个流行的持久层框架,它提供了灵活的SQL映射机制,使得数据库操作更加便捷。在iBatis中,`&lt;iterate&gt;`标签是一个非常实用的功能,它允许我们处理集合数据,如数组、...

    ibatis官方中文文档

    对于那些想要了解或深入掌握iBATIS,特别是想在实际项目中使用iBATIS存储过程的开发者来说,这是一份非常宝贵的学习资料。 **iBATIS简介** iBATIS(现更名为MyBatis)是一个优秀的Java持久层框架,它简化了数据库...

    ibatis教程_查询指定id的单个对象

    这里的`#{id}`是Ibatis的参数占位符,它会自动将Java方法中的参数值注入到SQL中。 在查询指定id的单个对象时,Ibatis提供了`&lt;select&gt;`标签,用于定义SQL查询。标签内可以设置id属性,对应Mapper接口中的方法名,...

    ibatis 中sqlMap配置

    总结来说,iBatis中的SQLMap配置涉及到命名空间、别名、插入操作、主键获取、参数类型和结果映射等多个方面,理解和熟练掌握这些知识点对于高效地使用iBatis框架至关重要。通过合理的配置,可以有效地将Java代码与...

    ibatis中输入输出各种类型的参数分析及#与$区别

    在iBatis中,`namespace`用于唯一标识一组SQL映射语句,避免了命名冲突问题。具体使用时,可以在配置文件中的`&lt;sqlMap&gt;`标签中指定`namespace`属性。 例如,对于以下配置: ```xml ``` 调用方式为: ```java this....

    ibatis中使用安全的拼接语句,动态查询,大于、小于、等于.doc

    iBatis 中使用安全的拼接语句、动态查询、大于、小于、等于 iBatis 是一个流行的持久层框架,提供了许多强大的功能来帮助开发者构建高效、安全的数据库交互应用程序。本文将详细介绍 iBatis 中使用安全的拼接语句、...

    ibatis总结 ibatis ibatis ibatis ibatis

    例如,`select * from PRODUCT where PRD_CAT_ID = #{value}`中的`#{value}`是预编译参数,能有效防止SQL注入。 总结,Ibatis提供了灵活的SQL映射机制,使得开发人员能够更好地控制SQL的执行。同时,通过与Struts和...

    ibatis2.0中文API

    在映射文件中,我们可以定义`&lt;resultMap&gt;`来映射对象属性和字段,使用`&lt;id&gt;`、`&lt;result&gt;`等元素来指定主键和普通字段。此外,还可以使用`&lt;select&gt;`、`&lt;insert&gt;`、`&lt;update&gt;`和`&lt;delete&gt;`标签来定义SQL语句,它们可以...

    ibatis源码,ibatis源码 ibatis源码 ibatis源码

    在`org.apache.ibatis.executor.statement.StatementHandler`中,我们可以看到如何根据不同的数据库驱动创建Statement,以及如何绑定参数到Statement中。 五、ResultSetHandler与ResultMap ResultSetHandler处理...

    ibatis拼接字符串

    在本篇文章中,我们将深入探讨如何使用 Java 编程语言结合 iBatis 框架进行 SQL 字符串的动态拼接。通过分析提供的代码片段,我们可以了解到在实际开发过程中,这种动态 SQL 的构建方式非常常见,尤其是在处理复杂的...

    iBatis net版中文 1.6的

    iBatis 是一款著名的开源持久层框架,专为Java应用程序设计,它允许开发者将SQL语句直接嵌入到Java代码中,从而简化了数据访问层的开发。在.NET环境中,iBatis同样提供了相应的实现,即iBatis .NET版。这个版本与...

    ibatis教程 输入参数详解

    命名空间用于唯一标识SQL映射语句,防止命名冲突。通常,命名空间采用包名加类名的形式。 #### 作用域与生命周期 `SqlSession`的默认作用域是请求,意味着每次HTTP请求都应该创建一个新的`SqlSession`实例。其生命...

    ibatis 用HashMap解决resultClass映射

    在这个示例中,我们定义了一个简单的 SQL 查询,并将其结果存储在一个 `Map, String&gt;` 中,其中键为 `ID`,值为 `NAME`。 #### 6. 总结 通过上述介绍,我们可以看到使用 `HashMap` 解决 ibatis 中的动态列名和列数...

    ibatis多对多关系(详细)

    我们将使用iBatis的命名空间(namespace)来定义学生和教师之间的关系。 ```xml &lt;!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd"&gt; &lt;!-- ...

    ibatis_with_memcached

    3. **配置Ibatis**:在Ibatis的配置文件中,定义一个Memcached的Cache实现,指定缓存的ID、超时时间等参数。 4. **创建缓存插件**:编写自定义的Ibatis拦截器,拦截SQL执行,实现数据的缓存和读取。 5. **在Mapper...

    .net中使用iBATIS的小例子

    在iBATIS中,我们需要为每个数据库表创建对应的映射文件,这些文件通常命名为`Table_Name.xml`,其中`Table_Name`是数据库表的名字。映射文件定义了SQL查询、参数映射和结果集映射,使得.NET对象和数据库记录之间能...

    ibatis的dynamicSQL中,关于prepend的使用

    在探讨ibatis中的动态SQL(Dynamic SQL)及`prepend`的使用时,我们首先需要对ibatis有一个基本的理解。ibatis是一种开源的数据访问层框架,它简化了Java应用程序与数据库之间的交互过程。通过使用XML配置文件来定义...

    ibatis3.0中in的用法

    ### ibatis3.0中`in`的用法详解 #### 一、引言 在进行数据库查询时,经常会遇到需要根据多个值进行查询的情况,这时`IN`语句就显得尤为重要。`IN`语句可以用于判断某个字段的值是否在一个指定的列表之中,非常适用...

Global site tag (gtag.js) - Google Analytics