問題タブ [jdbi]
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.
dao - JDBI DAO インスタンスは再利用できますか?
dao
インスタンスは再利用できますか? それとも、使用するたびにインスタンス化する必要がありますか?
コードから、DB トランザクションの維持を担当しているように見えます。ただし、DropWizard の例は次のとおりです。
したがって、同じリソース内で、dao のこのインスタンスがすべてのパスで再利用されます。つまり、2 つのリクエストが同じリソースに対して (おそらく 2 つのパスで) 行われた場合、両方とも同じ dao インスタンスを使用します。これは問題になりませんか?
java - jdbi は春の dao Bean になることができますか?
JDBI抽象クラスから拡張されたDAOクラスをSpring beanとして登録するには? JDBI + Spring JdbcTemplate + Spring Transactions を一緒に使いたい
java - How to implement an audit interceptor in jdbi?
Is there a way to implement the Audit Interceptor concept from Hibernate in JDBI ? Audit Interceptor example
jdbi - SQL オブジェクト API - すべての列を取得しますか?
データ アクセス オブジェクトの次のコード行で SQL オブジェクト API を使用して、ID が提供されたものと一致する SQL テーブルの行から名前フィールドを取得しています。
それはすべてうまく機能しますが、名前だけでなく、そのレコードのすべての列、テーブル内のその行のすべてのフィールドを返したい場合は、一体どうすればよいでしょうか?
私は使ってみました:
しかし、それは正しくありません。id フィールドのみを返すように見えました (おそらくテーブルの最初の列であり、私のメソッドは文字列を返すのでしょうか?)
とにかく、私はこれについてのアイデアがすべてありません。私が得ることができるすべての助けに感謝します.
情報のリクエストを受け取ったときの追加情報:
これは、dao を呼び出すコントローラー内のメソッドのメソッド シグネチャです。
ご覧のとおり、dao の findNameByID メソッドと同様に、文字列を返します...
私がやりたいことは、メソッド シグネチャを使用して ID を渡し、可能であればすべての列を 1 つの素敵な JSON オブジェクトとして取得することですか?
sql - JDBI Fluent クエリの問題
Dropwizard で JDBI を使用していますが、流暢なクエリに問題があります。次のようなAPIエンドポイントがあります。
次の 3 つのクエリを記述しないようにする必要があります。
これは、メソッド getAccount の実装に 3 つの if チェックがあることも意味します... ニックネームあり、電子メールなし、電子メールあり、ニックネームなし、電子メールあり、ニックネームで、3 つのクエリのどれを実行するかを決定します。別のルックアップ パラメーター (accountId など) を追加すると、実行するクエリを決定するために 6 つのクエリ (可能性ごとに 1 つ) と 6 つの if ステートメントが必要になります。
JDBIでこれを回避する簡単な方法はありますか? @Define の可能性を調べましたが、これには SQL インジェクションのリスクがあります。電子メールとニックネームはどちらも文字列です。
理想的には、クエリは 1 つだけ必要です。
ニックネームが null の場合、ニックネームの要件は無視され、メールからクエリが送信されます。このようなことは可能ですか?
編集/更新:
コードを少しクリーンアップするために、これを実行しました。
@Define を使用するように JDBI ダオを更新しました。これにより、6 つのクエリ (クエリ フィールドが 3 つあるため、ケースごとに 1 つのクエリ) と、6 つの if ステートメントを 1 つのクエリと 3 つの if ステートメントに減らすことができます。
クエリロジックをDAOに保持したいので、defineを使用する必要はありません。このようなことがまったく可能であれば、それは素晴らしいことです:
java - SQL オブジェクト API - すべての行?
テーブル内のすべての行を取得するのに問題があります - 以下に、1 つの行を返し (これは機能します)、それをユーザー オブジェクトにマップする方法のコードを示します。
コントローラーコード
DAO コード:
それは素晴らしいことですが、リスト内のすべての User レコードを返す別のクエリを作成する必要があります。
助けてくれてありがとう!
postgresql - (JDBI/Dropwizard) PostgreSQL から自動インクリメントされた ID を取得するときの PSQLException
dropwizard プロジェクトをセットアップしようとしていますが、行き詰っています。@GetGeneratedKeys で自動生成された id フィールドを取得しようとすると、次の例外が発生します。
リクエストは単純な JSON リクエストです
データベースへの INSERT は成功しますが、ステートメントは生成された ID ではなく名前の値を返すようです。どうすればこれを解決できますか?
私は postgresql を使用しています。テーブル プロジェクトには、nextval('project_id_seq'::regclass) を持つ主キー フィールド「id」が含まれています。私が使用するPOJO、DAO、およびリソースクラスは次のとおりです。
===============
アップデート
これは、id 列がテーブルの最初の列ではないという事実に関連していることがわかりました。列名は。この問題は、 @GetGeneratedKeysが org.skife.jdbi.v2.util.LongMapper.FIRST を返す org.skife.jdbi.v2.PrimitivesMapperFactory を使用している org.skife.jdbi.v2.sqlobject.FigureItOutResultSetMapper を使用しているために発生します。このマッパーは 、メソッド extractByIndex(...) を介してjava.sql.ResultSet.getLong(1)を呼び出して、生成された ID を取得していますが、これは私の場合は ID ではありません...
データベースの列を再編成することで問題を解決しますが、可能であれば堅牢な実装が必要です: @GetGeneratedKeys アノテーションを使用するときに id 列の列名を指定する方法はありますか? (org.skife.jdbi.v2.util.LongMapper クラスには、extractByName(...) というメソッドも含まれています)
mysql - コードを書くときに列を知らずに MYSQL データベースの行を更新しますか?
SQL オブジェクト API を使用してデータベース内のデータを操作していますが、厄介な問題が発生しました。
ユーザーがフロントエンドを使用している場合、値などを入力し、ドロップダウンなどから選択してから、[適用] をクリックしてすべての変更をデータベースに保存できます。問題は、テーブル内でどの列が変更されるのか本当にわからないことです。書き込みごとに。
(インターネットによると)テーブルを更新するコードは次のとおりです。
しかし、どのフィールドが更新されるかわからないので、列名を含めることはできませんか?
大変助かりました、ありがとうございます。
java - JDBI dropwizard でカスタム where 条件を使用する
dropwizard を使用して JDBI を探索しようとしています。カスタム コードは次のとおりです。
以下のコードで呼び出そうとしています
そして問題を下回ります
これは文字列として渡されているため、引用符の問題が発生しています。このようにして、すべてのクエリで共通の where 句コードを実現しようとしています。私の質問は1.この問題を解決する方法です。2. これは、このようにコーディングする適切な方法ですか、それともプリペアド ステートメントを使用できますか。はいの場合、どのように。
よろしくお願いします:)