如何使用 SpringFramework 中的 JdbcTemplate 类执行 INSERT 语句

在 Spring 中,如何使用 JdbcTemplate在表中插入数据。有没有人可以提供一个代码样本做到这一点。

171725 次浏览

JdbcTemplate一起工作需要 datasource

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;
}
});

使用 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,那么最好为它创建一个 SpringBean。

使用 JavaConfig,它将是:

@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 的 update 方法可以在 给你中找到。

如果使用 spring-boot,则不需要创建 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>

有关更多细节,请参见 官方文件

我们可以同时对插入和更新/删除使用 update

enter image description here

enter link description here

您可以选择使用 NamedParameterJdbcTemplate(当您有许多参数时,命名可能很有用)

Map<String, Object> params = new HashMap<>();
params.put("var1",value1);
params.put("var2",value2);
namedJdbcTemplate.update(
"INSERT INTO schema.tableName (column1, column2) VALUES (:var1, :var2)",
params
);