-1

2 つの varchar フィールドを持つデータベースを読み書きする単純なアプリケーションを Java Spring で作成しました。

package learn.spring.example.dao;

import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

@Component
public class  PersonStoreDao implements PersonInter{
    @Autowired
    private JdbcTemplate jdbc;

    public Long saveData(Person person){
    final String querySample="insert into PersonName(first_name, last_name)       values (?, ?)";
   jdbc.update(new PreparedStatementCreator() {
       public PreparedStatement prepStatement(Connection c) throws SQLException {
        PreparedStatement prep = c.prepareStatement(querySample);
        prep.setString(1, person.getFirstName());
        prep.setString(2, preson.getSecondName());
        return prep;
        }
      ,key}
       }
}

クラス Person は単純な Bean クラスであり、PersonName は 2 つのフィールドを持つデータベースのテーブルです。これについていくつか質問があります。

最初の質問は、何かが間違っているかどうかです

jdbc 変数と @Component の前に @Autowired を使用すると、どのような影響がありますか?

このプロジェクトに関連付けられた xml ファイルに正しく埋め込むにはどうすればよいですか?

データベースに接続できますが、書き込みができません。データベースが読み取りだけでなく書き込みもできるようにするにはどうすればよいですか?

4

2 に答える 2

1

@AutoWiredは、現在のBeanに必要な他のBeanを定義するアノテーション方法です。たとえば、次を見てください。

<bean id="person" class="com.Person">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="myDataSource" />
</bean>

ご覧のとおり、次のスニペットでは、Personクラス内にrefBeanを定義する必要がありました。ただし、@ AutoWiredを使用すると、jdbcTemplateがPersonクラスに自動的に挿入されるため、これを排除できます。

ここで注意しなければならないことの1つは、インターフェースタイプによって自動配線を試みていて、アプリケーションに多くの実装がある場合、どのバージョンの実装を注入するかをSpringに伝えるために、@Qualifierの概念を使用する必要があるということです。あなたの現在の豆に。

@Componentについては、Beanを@Componentとして定義することにより、アノテーションが付けられたすべてのBeanをスキャンし、Springコンテキストで使用できるようにするようにSpringContainerに指示します。これを行うことにより、XMLファイル内でBeanを定義する必要はありません。@ Componentと@Configurationの詳細については、次のスレッドを参照してください。

データベースに接続できないという問題に関しては、JDBCTemplateの接続方法を確認できるように、使用している現在のアプリケーションコンテキストXMLファイルを提供してください。

于 2013-03-24T02:01:03.970 に答える
1

jdbc 変数と @Component の前に @Autowired を使用すると、どのような影響がありますか?

これらにより、Spring アノテーションベースのワイヤリング プロセッサは、これがワイヤリングする必要があるクラスであり、変数に値を注入する必要があることを認識しjdbcます。

このプロジェクトに関連付けられた xml ファイルに正しく埋め込むにはどうすればよいですか?

かもね。配線は注釈プロセッサによって行われます。JdbcTemplateおそらく、XML ファイルで宣言したタイプの Bean が注入されます。

データベースに接続できますが、書き込みができません。データベースが読み取りだけでなく書き込みもできるようにするにはどうすればよいですか?

あなたは XML を見せてくれませんでしたが、そこに問題があるのではないかと思います。おそらく、DataSource で JdbcTemplate Bean を指定しており、DataSource は読み取りアクセスのみを許可するデータベース アカウントに接続しています。その場合は、別のデータベース アカウントを使用するか、使用しているアカウントに必要なアクセス権を付与する必要があります。

于 2013-03-24T01:59:10.860 に答える