Springでは、 JdbcTemplate を使用してテーブルにデータを挿入するにはどうすればよいですか。誰でも私にこれを行うためのコードサンプルを提供してください。
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}
);
_
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 にあります。
スプリングブートを使用する場合、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 をご覧ください。
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;
}
});