web-dev-qa-db-ja.com

Spring FrameworkのJdbcTemplateクラスを使用してINSERTステートメントを実行する方法

Springでは、 JdbcTemplate を使用してテーブルにデータを挿入するにはどうすればよいですか。誰でも私にこれを行うためのコードサンプルを提供してください。

40
user469999

jdbcTemplate.update(String sql, Object... args) メソッドを使用:

_jdbcTemplate.update(
    "INSERT INTO schema.tableName (column1, column2) VALUES (?, ?)",
    var1, var2
);
_

または jdbcTemplate.update(String sql, Object[] args, int[] argTypes) 、引数をSQLタイプに手動でマップする必要がある場合:

_jdbcTemplate.update(
    "INSERT INTO schema.tableName (column1, column2) VALUES (?, ?)",
    new Object[]{var1, var2}, new Object[]{Types.TYPE_OF_VAR1, Types.TYPE_OF_VAR2}
);
_
40
user11153

JdbcTemplateを複数の場所で使用する予定がある場合は、そのためのSpring Beanを作成することをお勧めします。

Java Configを使用すると、次のようになります。

@Configuration
public class DBConfig {

   @Bean
   public DataSource dataSource() {
      //create a data source
   }

   @Bean
   public JdbcTemplate jdbcTemplate() {
      return new JdbcTemplate(dataSource());
   }

   @Bean
   public TransactionManager transactionManager() {
      return new DataSourceTransactionManager(dataSource());
   }

}

次に、そのJdbcTemplateを使用するリポジトリは次のようになります。

@Repository
public class JdbcSomeRepository implements SomeRepository {

   private final JdbcTemplate jdbcTemplate ;

   @Autowired
   public JdbcSomeRepository(JdbcTemplate jdbcTemplate) {
      this.jdbcTemplate = jdbcTemplate;
   } 

   @Override
   @Transactional 
   public int someUpdate(SomeType someValue, SomeOtherType someOtherValue) {
      return jdbcTemplate.update("INSERT INTO SomeTable(column1, column2) VALUES(?,?)", someValue, someOtherValue)
   }
}

私が使用したJdbcTemplateの更新メソッドは here にあります。

7
geoand

スプリングブートを使用する場合、DataSourceクラスを作成する必要はありません。application.propertiesでデータurl/username/password/driverを指定するだけで、その後@Autowiredで簡単にできます。

@Repository
public class JdbcRepository {

    private final JdbcTemplate jdbcTemplate;

    @Autowired
    public DynamicRepository(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public void insert() {
        jdbcTemplate.update("INSERT INTO BOOK (name, description) VALUES ('book name', 'book description')");
    }
}

application.propertiesの例:

#Basic Spring Boot Config for Oracle
spring.datasource.url=jdbc:Oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=YourHostIP)(PORT=YourPort))(CONNECT_DATA=(SERVER=dedicated)(SERVICE_NAME=YourServiceName)))
spring.datasource.username=username
spring.datasource.password=password
spring.datasource.driver-class-name=Oracle.jdbc.OracleDriver

#hibernate config
spring.jpa.database-platform=org.hibernate.dialect.Oracle10gDialect

次に、pom.xmlにドライバーと接続プールの依存関係を追加します

<dependency>
    <groupId>com.Oracle</groupId>
    <artifactId>ojdbc7</artifactId>
    <version>12.1.0.1</version>
</dependency>

<!-- HikariCP connection pool -->
<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
    <version>2.6.0</version>
</dependency>

詳細については official doc をご覧ください。

3
Searene

datasourceを使用するには、JdbcTemplateが必要です。

JdbcTemplate template = new JdbcTemplate(yourDataSource);

template.update(
    new PreparedStatementCreator() {
        public PreparedStatement createPreparedStatement(Connection connection)
            throws SQLException {

            PreparedStatement statement = connection.prepareStatement(ourInsertQuery);
            //statement.setLong(1, beginning); set parameters you need in your insert

            return statement;
        }
    });
2
Sezin Karli

挿入と更新/削除の両方に更新を使用できます

enter image description here

enter link description here

0
jcrshankar