标签: ibatis

iBatis,spring,如何记录执行的sql?

我正在使用带弹簧框架的iBatis.我想记录iBatis在我说出类似内容时执行的sql

Employee e = (Employee) getSqlMapClientTemplate().queryForObject("emp_sql", emp);
Run Code Online (Sandbox Code Playgroud)

上面的代码行将在我拥有的ibatis sql文件中查找"emp_sql"id.然后运行对应于"emp_sql"的查询.我想记录此查询.

我有以下log4j xml属性文件.

<appender name="sqlLogAppender" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="file" value="/disk1/logs/sql.log"/>
    <param name="datePattern" value="'-'yyyy-MM-dd'.txt'"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%m %n"/>
    </layout>
   <filter class="org.apache.log4j.varia.LevelRangeFilter">
        <param name="LevelMin" value="DEBUG"/>
    </filter>
</appender>

<logger name="log4j.logger.com.ibatis">
    <level value="DEBUG"/>
    <appender-ref ref="sqlLogAppender"/>
</logger>


<logger name="log4j.logger.java.sql.Connection">
    <level value="DEBUG"/>
    <appender-ref ref="sqlLogAppender"/>
</logger>

<logger name="log4j.logger.java.sql.PreparedStatement">
    <level value="DEBUG"/>
    <appender-ref ref="sqlLogAppender"/>
</logger>
Run Code Online (Sandbox Code Playgroud)

我仍然无法获得ibatis执行的sql.配置有问题吗?我应该说

<appender name="sqlLogAppender" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="file" value="/disk1/logs/sql.log"/>
    <param name="datePattern" value="'-'yyyy-MM-dd'.txt'"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%m %n"/>
    </layout>
   <filter class="org.apache.log4j.varia.LevelRangeFilter">
        <param name="LevelMin" value="DEBUG"/>
    </filter>
</appender>

<logger …
Run Code Online (Sandbox Code Playgroud)

java logging spring ibatis

18
推荐指数
1
解决办法
4万
查看次数

如何在iBATIS中使用IN子句?

我正在使用iBATIS来创建select语句.现在我想用iBATIS实现以下SQL语句:

SELECT * FROM table WHERE col1 IN ('value1', 'value2');
Run Code Online (Sandbox Code Playgroud)

使用以下方法,语句未正确准备且没有返回结果:

SELECT * FROM table WHERE col1 IN #listOfValues#;
Run Code Online (Sandbox Code Playgroud)

iBATIS似乎重组了这个列表并尝试将其解释为字符串.

如何正确使用IN子句?

java sql ibatis

17
推荐指数
2
解决办法
4万
查看次数

使用mybatis"MapperRegistry不知道类型接口"异常

我正在使用注释设置mybatis,并获得这个有用的例外

org.apache.ibatis.binding.BindingException:MapperRegistry不知道类型接口org.foo.Bar

谷歌搜索没有找到任何东西,也没有找到用户指南.我错过了什么?

java ibatis mybatis

15
推荐指数
3
解决办法
4万
查看次数

如何使用Ibatis返回插入内容(使用RETURNING关键字)

我正在使用iBatis/Java和Postgres 8.3.当我在ibatis中插入时,我需要返回id.
我使用下表来描述我的问题:通过运行create语句自动生成
CREATE TABLE sometable ( id serial NOT NULL, somefield VARCHAR(10) );
Sequence sometable_id_seq.

目前我使用以下sql map:

<insert id="insertValue" parameterClass="string" >
 INSERT INTO sometable ( somefield ) VALUES ( #value# );
 <selectKey keyProperty="id" resultClass="int">
  SELECT last_value AS id FROM sometable_id_seq
 </selectKey>
</insert>
Run Code Online (Sandbox Code Playgroud)

看来这是检索新插入的id的ibatis方式.Ibatis首先运行INSERT语句,然后它询问序列的最后一个id.
我怀疑这将适用于许多并发插入.(在这个问题中讨论过)

我想在ibatis中使用以下语句:
INSERT INTO sometable ( somefield ) VALUES ( #value# ) RETURNING id;

但是当我尝试在<insert>sqlMap中使用它时,ibatis不会返回id.它似乎需要<selectKey>标签.

所以这里有一个问题:

我如何在ibatis上使用上述声明?

java postgresql ibatis

14
推荐指数
2
解决办法
4万
查看次数

如何传递多个参数并使用它们?

嗨,我是myBatis的新手.

我正在使用MyBatis和Spring和mybatis-spring.

如何将两种不同类型的对象作为参数传递,如何在查询中使用它们的属性?

<update id="update" parameterType="A, B"> <!-- @@? -->
  UPDATE SOME WHERE x=A.x AND y=B.y <!-- @@? -->
</update>
Run Code Online (Sandbox Code Playgroud)

spring ibatis mybatis

14
推荐指数
2
解决办法
3万
查看次数

通过Java JDBC使用iBATIS的Oracle SQL DATE转换问题

我目前正在使用Java中的iBATIS来解决Oracle SQL DATE转换问题.

我使用的是Oracle JDBC瘦驱动程序ojdbc14版本10.2.0.4.0.iBATIS版本2.3.2.Java 1.6.0_10-rc2-b32.

问题围绕这个SQL片段返回的DATE类型列:

SELECT *
FROM   TABLE(pk_invoice_qry.get_contract_rate(?,?,?,?,?,?,?,?,?,?)) order by from_date
Run Code Online (Sandbox Code Playgroud)

包过程调用返回一个包含在TABLE中的ref游标,然后很容易读取结果集,就好像是对表的select查询一样.

在PL/SQL Developer中,返回的SQL DATE类型的FROM_DATE列之一具有一天中的时间精度:

Tue Dec 16 23:59:00 PST 2008
Run Code Online (Sandbox Code Playgroud)

但是当我通过iBATIS和JDBC访问它时,该值仅保留精确到白天:

Tue Dec 16 12:00:00 AM PST 2008
Run Code Online (Sandbox Code Playgroud)

这样显示时更清晰:

本来应该:

1229500740000 milliseconds since epoch
Tuesday, December 16, 2008 11:59:00 PM PST
Run Code Online (Sandbox Code Playgroud)

但是得到这个:

1229414400000 milliseconds since epoch
Tuesday, December 16, 2008 12:00:00 AM PST
(as instance of class java.sql.Date)
Run Code Online (Sandbox Code Playgroud)

无论我尝试什么,我都无法公开通过Java JDBC和iBATIS返回的这个DATE列的完整精度.

iBATIS映射的是:

FROM_DATE : 2008-12-03 : class java.sql.Date
Run Code Online (Sandbox Code Playgroud)

目前的iBATIS映射是这样的:

<result property="from_date" jdbcType="DATE" javaType="java.sql.Date"/>
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

<result property="from_date" jdbcType="DATETIME" …
Run Code Online (Sandbox Code Playgroud)

java oracle ibatis date jdbc

13
推荐指数
2
解决办法
6万
查看次数

是否有带注释的iBATIS 3的综合示例或教程?

是否有带注释的iBATIS 3 的综合示例或教程?

我特别感兴趣的是从基于XML的映射器配置转向使用纯Java注释,其中SQL语句通常采用或返回复杂的数据结构.

此外,在我看到的样本中,当从基于XML的映射器转移到基于注释的映射器接口时,配置文件是如何被调整的还不清楚.

java annotations ibatis mybatis

13
推荐指数
0
解决办法
2191
查看次数

How to understand Open Source projects/libraries?

There are few open source projects/APIs/libraries that we use in our project (Spring, Struts, iBatis etc.) and I want to understand their design and how they work internally.

了解这些项目的最佳方法是什么?请注意,我已经在我的项目中使用这些库.我知道这些库的输入输出交互/配置.我不明白的是这些API /库如何在内部工作.

我面临的问题是:

  1. 查找库的入口类.有什么方法可以让我知道库的入门类 - 这是一个踢完整个API的东西吗?
  2. 在Eclipse中使用的工具/插件,用于概述库的设计.浏览图书馆的每一课,都是一项非常艰巨的任务.是否有任何想要推荐的工具可以在Eclipse中生成API的类图.

提前致谢!!


更新:我需要一些关于eclipse插件的输入,它可以帮助我获得库的概述/类图

java eclipse spring ibatis struts2

13
推荐指数
1
解决办法
1269
查看次数

MySql.Data.MySqlClient.MySqlException:超时已过期

最近,我的网络应用程序中的特定页面引发了

异常详细信息:MySql.Data.MySqlClient.MySqlException:超时已过期.操作完成之前经过的超时时间或服务器没有响应.

虽然我使用Ibtais作为持久层,但会发生此错误.我重新启动了MySql服务实例但是我得到了同样的错误.它没有发生在早期,但最近经常发生.

部署在服务器上的所有Web应用程序都使用Ibatis,并且DB服务器保留在安装IIS的同一台计算机上.大约有8000条记录,其中大约300到500个将在页面加载时被过滤

有关问题原因的任何见解?

c# mysql ibatis query-optimization timeoutexception

13
推荐指数
2
解决办法
3万
查看次数

插入时的iBatis Discriminator

我有一个抽象类Example和具体的子类来配合它.我使用鉴别器数据库中提取数据,如下所示:

<resultMap id="ExampleResultMap" class="Example">
    <discriminator column="stateCode" javaType="java.lang.String">
        <subMap value="AL" resultMap="AlabamaStateResultMap"/>
        <subMap value="AR" resultMap="ArkansasStateResultMap"/>
        [...]
    </discriminator>
</resultMap>

<resultMap extends="ExampleResultMap" 
           id="AlabamaStateResultMap"
           class="AlabamaState"/>
<resultMap extends="ExampleResultMap" 
           id="ArkansasStateResultMap"
           class="ArkansasState"/>
[...]
Run Code Online (Sandbox Code Playgroud)

因此,我有一个AlabamaState对象(抽象Example对象的子类),在他身上没有任何属性.这是设计的,但要点是我没有任何唯一标识对象类型的属性 - 如果没有这种情况我没有理由.

(注意:这些类不是空的,它们是行为的,因此重构它们不是一种选择.)

如何将其保存回数据库?

理想情况下,将是一个DiscriminatorParameterMapS,但似乎并没有成为一个.

据我所知,有许多不受欢迎的解决方案,其中包括:

  • 放弃并在我的所有返回静态字符串的子类上添加"getType()"方法.在这种情况下,AL.(请注意,我非常努力地避免在我的所有代码中都需要这个,所以这个= OOD-defeat).
  • 创建一个"DB"对象,它就像我的大而复杂的对象,但碰巧还有一个额外的字符串,说"哦,顺便说一下,我的TYPE是AL".
  • 在插入对象之前,将我想要保留的所有20个属性提取到HashMap中.
  • 其他一些疯狂的事情就像使用toString()或其他东西来帮助我.

可能我会选择第一个选项,但这看起来很荒谬,不是吗?如果iBatis可以创建它,它不应该能够坚持下去吗?我真正需要的是插入的鉴别器.

我运气不好,还是我只是忽略了一些明显的东西?

java ibatis

13
推荐指数
1
解决办法
2353
查看次数