问题标签 [ibatis]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1945 浏览

upgrade - iBatis 3 不向后兼容?

  1. 有谁知道为什么 API 不向后兼容?
  2. 它仍然是线程安全的吗?
  3. 有人知道从 2.x 到 3.x 的任何迁移文件吗?
0 投票
1 回答
5157 浏览

java - 如何集成测试用spring + iBatis构建的DAO

我问了一个问题,其标题可能具有误导性,所以我将尝试用更详细的内容再次提出这个问题。(我知道问题似乎很长,但请多多包涵)

我正在尝试做的事情:我只是想为我的 DAO 编写一个测试用例并让它工作。我知道我的 DAO 在容器(应用程序服务器)内工作正常,但是从测试用例调用 DAO 时......它不起作用。我认为是因为它在容器之外。

我的 spring-for-iBatis.xml 中的东西

我的 sql-map-config-oracle.xml 中的东西

我的抽象类:

我的道:

我的测试

我试图在这段代码片段中呈现整个问题。测试失败,因为它无法连接到数据库……因为它在容器之外。我知道可以修复设计以更好地利用依赖注入。您能否根据此代码段向我展示可以进行哪些改进以使测试有效?

我一直在为此苦苦挣扎,非常感谢一些帮助。

PS:我不得不使用,setSqlMapClientTemplate()因为我希望对我的 DAO 的调用变得简单MyDAO myd = new MyDAO() 我不想为我的每个 DAO 制作接口。

0 投票
2 回答
3270 浏览

java - 找不到行时,iBatis 不填充对象

我正在运行一个存储过程,它返回 2 个游标,它们都没有任何数据。我有以下映射xml:

第一个结果集被放入一个 HashMap...第二个结果集被放入一个MyBean类中。

我的 DAO 中的代码如下:

在上面的最后一行..我的代码失败了。它失败是因为第二个游标没有行,这就是为什么没有放入列表的原因。但是,第一个游标也不返回任何内容,但是由于结果被放入HashMap第一个游标的列表中,其中至少有HashMap对象..

为什么会有这种差异?即使没有返回行,有没有办法让 iBatis 将 MyBean 的对象放入列表中?或者我应该在我的 DAO 中处理这个...我想避免在 DAO 中处理它,因为我有一大堆像这样的 DAO。

0 投票
3 回答
791 浏览

java - 这可能与iBatis + spring有关吗

以下是使用带有弹簧支撑的 ibatis 的惯用语。或者这就是我的做法。请让我知道是否可以做得更好?

豆类 xml:

界面:

道:

调用 DAO:

即使这很好用,我也不明白需要一个接口。

问题

  • 界面可以从图片中取出并且仍然可以正常工作吗?
  • 是否可以更改设计/设置,以便对 DAO 的调用很简单(即使这需要基本抽象类)

    MyUserAccessDAO mydao = new MyUserAccessDAO(); mydao.getUserReports("废话");

几天前我已经按照这些思路提出了问题,但是在挣扎了 2 天并找到了更多的东西之后,我现在又问了这个问题。如果可能,请提供您要更改/添加的代码片段。

这种设计的单元测试不起作用,因为一切都驻留在容器内。如果我得到这个工作,那么我也会将它添加到问题中(出于信息目的)。

此外,我认为对于试图让 spring + ibatis 工作的人......这最终将成为一个很好的起点。

编辑:

就像我上面提到的那样,我想像这样调用我的 DAO(或者我可以将一些东西作为构造函数参数传递):

为了实现上述目标,我将在我的 DAO 中有以下行

仍然需要知道要覆盖什么才能为此编写测试用例。测试用例将无法访问容器内的任何内容,因此它将取决于驱动程序数据源...

因为我在这里违背了最佳实践......我不介意仅仅为了测试用例而改变我的 DAO......

0 投票
3 回答
5833 浏览

java - 如何在spring xmls之外设置SqlMapClient

我的 xml 配置中有以下内容。我想将这些转换为我的代码,因为我正在容器之外进行一些单元/集成测试。

xmls:

我用来从上面的 xmls 中获取东西的代码:

我的代码(用于单元测试):

当使用 xml 时,SqlMapClient是设置的类,那么我为什么不能转换SqlMapClientFactoryBeanSqlMapClient

0 投票
1 回答
168 浏览

cxf - 如何检查Web服务中的路径

我正在使用 cxf webservices。我有一个服务路径@Path'/summary/abc/{xyz}/name/{login}'。

当有人给出错误的网址时,我想生成一些自定义错误消息

'/summary/ab/{xyz}/na/{login}/'

0 投票
2 回答
1745 浏览

java - 在容器外实例化spring bean(用于测试)

我的 applicaionContext.xml 中有以下内容

然后在我的代码中我有:

这样做会给我以下错误:

在类路径资源 [applicationContext.xml] 中创建名称为“myMapClient”的 bean 时出错:调用 init 方法失败;嵌套异常是 java.lang.NoClassDefFoundError: com/iplanet/ias/admin/common/ASException

我不明白为什么要找那个班?我正在尝试在容器外做所有事情。所以它甚至不应该在寻找那个类......但仍然只是为了让它工作我尝试寻找名为 ASException 的类,所以我可以把它放在类路径中,但我在哪里可以找到 ASException 类。

任何指针?

堆栈跟踪和我的编译测试/运行测试库的图像 替代文字 替代文字 替代文字

编辑 解决方案:即使我认为一切都在容器之外......有一件东西不在容器之外。
注意属性 configLocation:

sql-map-config-oracle.xml 的实际内容是

JNDI 的东西不需要在那里!

sql-map-config-oracle.xml 应该只是:

0 投票
1 回答
535 浏览

java - com iplanet ias JAR

在过去的几天里,我一直在为此苦苦挣扎。我正在尝试在容器外测试 DAO,但在运行测试用例时出现错误:

在类路径资源 [applicationContext.xml] 中创建名称为“SqlMapClient”的 bean 时出错:调用 init 方法失败;嵌套异常是 java.lang.NoClassDefFoundError: com/iplanet/ias/admin/common/ASException

我正在使用 NB 运行测试。人们一直在说我需要上面的类在测试用例的运行时类路径中。但是,我绝对找不到那个罐子实际上在哪里......??我已将我的项目 lib 文件夹中的容器类路径 + jar 中的所有 jar 包含到单元测试的运行时类路径中。我仍然得到同样的错误。

谷歌搜索这个 JAR 也没有用。

也许有人知道从哪里得到这个该死的罐子。希望这能解决我的问题。

0 投票
3 回答
834 浏览

spring - Ibatis2 和测试上下文

在我的 Spring 项目中,Ibatis 有一个愚蠢的配置问题。请不要对我说这一切是如何设置的,我只是遵循“内部项目结构政策”。

所以这里是结构,我们有“ src/ main /resources/META-INF/ ”文件夹,其中包含应用程序使用的所有配置文件,然后有一个“ src/ test /resources/META-INF/ ” " 仅包含具有不同设置以运行单元测试的配置文件。

在我们的例子中,这只是一个文件,src/ main /resources/META-INF/spring/application- config.xml变成了src/ test /resources/META-INF/spring/test-application- config.xml。我不打算概述两者之间的细微差别,因为那部分工作正常。

test-application-config.xml导入src/ main /resources/META-INF/ spring /data-access-config.xml文件就好了,它又使用了src / main /resources/META-INF/ ibatis / sqlmap-config.xml成功...之后就是下地狱的时候了。

到目前为止,我们使用 Spring 在类路径中查找下一个配置文件,但是当我们点击sqlmap-config.xml时,我们将 Spring 框架留给了我相信的 ibatis 框架,它加载了其中定义的资源文件,相对于类路径(取自文档,不管是什么意思)。

sqlmap-config.xml中定义了一些我们正在使用的资源文件,它们位于src/ main /resources/META-INF/ ibatis /mapping文件夹中。它们是这样引用的:

当我正常运行应用程序时效果很好,但是当我运行我的 JUnit 测试用例时,我得到一个 IO 异常,指出它找不到文件/META-INF/ibatis/mapping/MyObject.xml

我试图将sqlmap-config.xml中的路径更改为“ mapping/MyObject.xml ”,但这没有帮助。我也尝试使用 Spring 类路径前缀“ classpath:META-INF/ibatis/mapping/MyObject.xml ”,也没有工作。

任何人都会对如何正确设置 Ibatis 以使其适用于应用程序和 junit 有任何想法?

谢谢。

0 投票
5 回答
10563 浏览

java - 同时支持 Oracle 和 MySQL:它们的 SQL 语法有多相似?

我们在一个项目中使用 Oracle,并希望也支持 MySQL。他们的 SQL 方言有多接近?

是否有可能在没有太多体操的情况下为两者使用相同的 SQL 源?

细节:

  • 我们正在使用 iBatis,这是一个持久性管理器,可以将 SQL 语句干净地隔离到资源文件中。但是我们在 SQL 级别工作,这有其优点(和缺点)。
  • 我们不希望迁移到像 Hibernate 这样的对象关系映射器,这将完全保护我们免受方言差异的影响。
  • 我们努力保持 Oracle SQL 的通用子集。
  • 没有 PL/SQL。
  • 我们不使用存储过程或触发器(无论如何)。
  • 我们使用检查约束、唯一约束和外键约束。
  • 我们使用 ON DELETE CASCADEs。
  • 我们使用事务(在 iBatis API 级别完成)。
  • 我们在查询中调用了一些 Oracle 时间戳函数。
  • 我们将使用带有 MySQL 的 InnoDB 存储引擎(它支持事务和约束)。

所以你的想法是什么?我们是否需要维护两组不同的 iBatis SQL 资源文件,一个用于每种方言,或者是否有可能拥有一组同时支持 MySQL 和 Oracle 的 SQL?

最后更新:感谢所有答案,尤其是指向 Troels Arvin 的差异页面的指针。真的很遗憾,标准不是更多,嗯,标准。对我们来说,问题是 MySQL 自动增量与 Oracle 序列,MySQL LIMIT 与 Oracle Rowumber(),也许还有一两个奇怪的函数。正如@mjv 指出的那样,大多数其他东西都应该很容易转移,以一些编辑为模,以确保我们使用 SQL-92。更大的问题是某些查询可能需要在每个 DBMS 中进行不同的手动优化。