0

マイバティス:

何がうまくいかないのかわからない..しかし、基本的な SelectOne は結果を返していません。

マッパー:

<select id="getBackLog" parameterType="string"
    resultType="string">
select data_key from yfs_task_q where task_q_key = #{value}
</select>

方法:

dataKey = (文字列) session.selectOne("OMSWatchMappers.getBackLog", agent); logger.debug("@Backlog=" + dataKey);

ログ:

02:01:34.786 [main] DEBUG o.a.i.t.jdbc.JdbcTransaction - Openning JDBC Connection
02:01:35.890 [main] DEBUG o.a.i.d.pooled.PooledDataSource - Created connection 2092843500.
02:01:35.961 [main] DEBUG c.b.o.r.OMSWatchMappers.getBackLog - ooo Using Connection   [oracle.jdbc.driver.T4CConnection@7cbe41ec]
02:01:35.961 [main] DEBUG c.b.o.r.OMSWatchMappers.getBackLog - ==>  Preparing: select data_key from yfs_task_q where task_q_key = ? 
02:01:36.126 [main] DEBUG c.b.o.r.OMSWatchMappers.getBackLog - ==> Parameters: 201101070640191548867209(String)
02:01:36.249 [main] DEBUG OMSWatchDAOImpl - @Backlog=null
02:01:36.250 [main] DEBUG o.a.i.t.jdbc.JdbcTransaction - Resetting autocommit to true on JDBC Connection [oracle.jdbc.driver.T4CConnection@7cbe41ec]
02:01:36.250 [main] DEBUG o.a.i.t.jdbc.JdbcTransaction - Closing JDBC Connection [oracle.jdbc.driver.T4CConnection@7cbe41ec]
02:01:36.250 [main] DEBUG o.a.i.d.pooled.PooledDataSource - Returned connection 2092843500 to pool.

このレコードはデータベースに存在します。

select data_key from yfs_task_q where task_q_key = '201101070640191548867209';

DATA_KEY               
------------------------
201101070636011548866830 

パラメータを直接追加するようにマッパーを変更すると、結果が返されます。

マッパー:

<select id="getBackLog" parameterType="string"  resultType="string">
select data_key from yfs_task_q where task_q_key = '201101070640191548867209'
</select>

ログ:

02:38:52.746 [main] DEBUG c.b.o.r.OMSWatchMappers.getBackLog - ==>  Preparing: select     data_key from yfs_task_q where task_q_key = '201101070640191548867209' 
02:38:52.942 [main] DEBUG c.b.o.r.OMSWatchMappers.getBackLog - ==> Parameters: 
02:38:53.096 [main] DEBUG OMSWatchDAOImpl - @Backlog=201101070636011548866830 

ここに欠けている基本的なものがあります。指摘する際の助けは大歓迎です。

4

3 に答える 3

1

問題が見つかりました.. DB 列は CHAR(30) で、文字列オブジェクトを Mybatis に渡していました。WHERE 句の比較が失敗していました ...

ColValue [201101070640191548867209 ] <> Input [201101070640191548867209]

クエリを次のように変更しました

select data_key from yfs_task_q where trim(task_q_key) = #{value}

MyBatis に col 値の埋め込みスペースを強制的に無視させるように設定できるフラグ/構成があるかどうかを確認するために、さらに調査を行う必要があります。

mybatis coig について知っている人がいたら、同じように投稿してください。しかし、投稿されたこの問題については、原因が見つかり、先に進むことができます:)

注: これらの列が VARCHAR ではなく CHAR である理由がわかりません。これはサード パーティのアプリ テーブルです。

于 2013-10-25T00:03:49.093 に答える
-1

id.trim()文字ベースのwhere句の列で機能するPass asおよび。

于 2014-03-16T05:27:20.047 に答える