問題タブ [spring-mybatis]

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 に答える
12859 参照

java - 一見正しいマッピングの MyBatis TooManyResultsException

この問題を解決するために、多くのコードを削減しました。

このコレクションを機能させるためにさまざまなことを試みると、このエラーが引き続き発生します。

ネストされた例外は org.apache.ibatis.exceptions.TooManyResultsException です: selectOne() によって 1 つの結果 (または null) が返されることが期待されていましたが、見つかりました: 2

関連するオブジェクトは次のとおりです。

メソッド呼び出しとのインターフェースがあります:

そして私の結果マッパー:

クエリは次の結果を返します (注: 上記のコードには「measurement_amount」しかありませんが、実際の最終結果セットがどのように見えるかを含めて、これら 2 行を取得したい/必要な理由を示すのに役立ててください):

コレクションを取り出すと、マッパーを動作させることができます。javaType を使用してみましたが、コレクションで複合キーを使用してみましたが、それでも機能しませんでした。私はアイデアを使い果たし、たくさんのヘルプ投稿を調べましたが、何も目立ちませんでした.

mybatis および mybatis-spring の UTD バージョンで Spring Boot を使用しています

0 投票する
0 に答える
220 参照

spring - Spring JavaConfig を使用した SqlSessionTemplate のスコープ付きプロキシはありません

MyBatis Mappers をシリアライズ可能にしようとしています (ちょっと)。そのためにSqlSessionTemplateは、Java構成を介して(シリアル化できないもの)をスコープ付きプロキシにラップするだけです...

残念ながら、SqlSessionTemplate のスコープ付きプロキシが作成されているように見えるため、これは機能しませんが、最終的にマッパーに注入されるものは依然として標準SqlSessionTemplateであり (その周りのプロキシではありません)、何らかの形でプロキシをエスケープしています。問題の部分は、このメソッドからのようorg.mybatis.spring.SqlSessionTemplateです...

もちろん、thisここでは元のSqlSessionTemplateオブジェクトを参照しており、その周りのプロキシは参照していません。

スコープ プロキシをマッパーに強制する方法はありますか?

もちろん、うまくいくのは単にマッパー自体をスコープ付きプロキシにすることですが、それはエレガントで簡潔ではないようです (マッパーの自動スキャンをスキップし、代わりに各マッパーを手動で宣言する必要があります)。そのため、問題のあるオブジェクトを作成することをお勧めしますスコープ付きプロキシ。MapperProxyそれ自体はすでにシリアライズ可能であり、シリアライズできるため、SqlSessionTemplate.

編集:もちろん、SqlSessionTemplateにデフォルトのコンストラクターが付属していないという問題もあります。これも問題になりますが、一度に1つずつ...

0 投票する
3 に答える
1886 参照

java - 同じトランザクションで @Transactional を使用して挿入されたデータを取得します

1 つのメソッド (has) にデータを挿入していますが、同じデータを取得しようとすると@Transactional(propagation = Propagation.Required)、他のメソッド (has @Transactional(propagation = Propagation.Required)) に null が返されます。

どちらの方法もサービス層に書かれています@Transactional (rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)

同じトランザクションに挿入されたデータを取得する方法。何かのようなもの :-

0 投票する
1 に答える
8474 参照

spring-mvc - MyBatis SQLクエリ用にSpringでLog4jを設定するには?

mybatis 3.3.0 と mybatis-spring 1.2.3 を使用した Spring MVC プロジェクトがあり、プロジェクトで log4j を構成したいと考えています。mybatis-config.xmlまた、mybatis sql セッション ファクトリのセットアップには使用していません。したがって、次の設定は使用できません。

だから、私は私の中に次の設定を持っています

spring-context.xml

そして、このlog4j.xmlを構成しました

上記の構成は、実行された SQL クエリまたは準備されたステートメントを出力しません。したがって、mybatis のログページとこの回答に記載されているように、xml 構成の代わりに log4j.properties を使用しました。

log4j.properties

pom.xml からも common-logging を削除しました。しかし、それもうまくいかないようです。

  • すべてのSQLクエリ(PreparedStatements)を出力するようにMyBatisを設定するには?
  • MyBatis が log4j を検出しない場合、MyBatis にデフォルトのロギング フレームワークとして log4j を使用するように指示する方法はありますmybatis-config.xmlか?
0 投票する
1 に答える
241 参照

mybatis - Javars と MyBatis の統合に関するヘルプが必要

MyBatis と Javars (Spring を使用) を統合して動作させるのに問題があります。http://javers.org/documentation/spring-integration/の指示に従い、Aspect のセットアップを取得し、エンティティ クラスにアノテーションを付けて Javars に登録し、MyBatis インターフェースに @Repository と @JaversAuditable で正しくアノテーションを付けました適切な方法ですが、まだ動作していません。Javars アスペクトにブレークポイントを設定しても、何もトリガーされません。

また、 http://www.mybatis.org/mybatis-3/configuration.html#pluginsに従って、MyBatis プラグイン インターセプターを使用して別の方法で行ったこともあります(その後、http://www.mybatis.org/を使用しました)。コミットの基本的な例としてspring/xref-test/org/mybatis/spring/ExecutorInterceptor.htmlを参照してください)。しかし、それがトリガーされている間、それは私が期待したことをしていません。基本的には、どのエンティティがコミットされているかを含むのではなく、ブール値を取る commit メソッドの側面にすぎません。update/insert MyBatis メソッドにインターセプターを追加し、それを ThreadLocal などに保存して、コミット/ロールバックが呼び出されたときに必要に応じて Javars に渡すことができると思いますが、それは面倒です。

これらの 2 つの方法のいずれかで見逃したものを誰かが見ることができない限り、ここからどこへ行くべきかわかりません。

0 投票する
1 に答える
3266 参照

mybatis - MyBatis バルクオペレーターのパフォーマンス

MyBatis-spring + Java を使用しました。1 回のトランザクションで 10000 件を超えるレコードをテーブルに挿入する必要があります。それを行うために、私はマッパーを使用しました:

そして、このステートメントに List を渡します。2000 ~ 3000 レコードの処理は非常に遅くなりますが、10000 レコードは 4 分以上挿入されます (タイムアウト間隔を長くする必要があります)。同じ 10000 レコードが PgAdmin を介して同じ DB に 10 秒未満で挿入されます。この操作の処理をトレースしてみたところ、ボトルネックが見つかりました

StatementHandler は数分、prepareStatement は数分で計算されます。なぜそれが起こるのか理解しています。各レコードに 9 つのフィールドを持つ 10000 レコード。これらの 100k フィールドはすべて、パラメーターとしてステートメントに挿入する必要があります。そして、どうすればこのプロセスを加速できますか?

アップデート:

sqlFactory と @Transactional の "BATCH" モードを使用してバッチ保存を実装します。これは、mybatis-spring XML 構成の構成です。

次に、「バッチ」メソッドを実装しました。

mapper - エンティティの XML マッパーです。

それは速く働いています