我正在使用带弹簧框架的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) 我正在使用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子句?
我正在使用注释设置mybatis,并获得这个有用的例外
org.apache.ibatis.binding.BindingException:MapperRegistry不知道类型接口org.foo.Bar
谷歌搜索没有找到任何东西,也没有找到用户指南.我错过了什么?
我正在使用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上使用上述声明?
嗨,我是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) 我目前正在使用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) 是否有带注释的iBATIS 3 的综合示例或教程?
我特别感兴趣的是从基于XML的映射器配置转向使用纯Java注释,其中SQL语句通常采用或返回复杂的数据结构.
此外,在我看到的样本中,当从基于XML的映射器转移到基于注释的映射器接口时,配置文件是如何被调整的还不清楚.
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 /库如何在内部工作.
我面临的问题是:
提前致谢!!
更新:我需要一些关于eclipse插件的输入,它可以帮助我获得库的概述/类图
最近,我的网络应用程序中的特定页面引发了
异常详细信息:MySql.Data.MySqlClient.MySqlException:超时已过期.操作完成之前经过的超时时间或服务器没有响应.
虽然我使用Ibtais作为持久层,但会发生此错误.我重新启动了MySql服务实例但是我得到了同样的错误.它没有发生在早期,但最近经常发生.
部署在服务器上的所有Web应用程序都使用Ibatis,并且DB服务器保留在安装IIS的同一台计算机上.大约有8000条记录,其中大约300到500个将在页面加载时被过滤
有关问题原因的任何见解?
我有一个抽象类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对象的子类),在他身上没有任何属性.这是设计的,但要点是我没有任何唯一标识对象类型的属性 - 如果没有这种情况我没有理由.
(注意:这些类不是空的,它们是行为的,因此重构它们不是一种选择.)
如何将其保存回数据库?
理想情况下,将是一个Discriminator为ParameterMapS,但似乎并没有成为一个.
据我所知,有许多不受欢迎的解决方案,其中包括:
AL.(请注意,我非常努力地避免在我的所有代码中都需要这个,所以这个= OOD-defeat).可能我会选择第一个选项,但这看起来很荒谬,不是吗?如果iBatis可以创建它,它不应该能够坚持下去吗?我真正需要的是插入的鉴别器.
我运气不好,还是我只是忽略了一些明显的东西?