簡單的 JDBC 操做主要有:java
JdbcTemplatespring
簡單使用以下所示。sql
springboot 會自動執行 resources 文件夾下的 data.sql 和 schema.sql。數據庫
CREATE TABLE FOO (ID INT IDENTITY, BAR VARCHAR(64));
INSERT INTO FOO (ID, BAR) VALUES (1, 'a'); INSERT INTO FOO (ID, BAR) VALUES (2, 'b');
@Autowired private JdbcTemplate jdbcTemplate; @Autowired private SimpleJdbcInsert simpleJdbcInsert; public void insertData() { Arrays.asList("a", "b").forEach(bar -> { jdbcTemplate.update("INSERT INTO FOO (BAR) VALUES (?)", bar); }); HashMap<String, String> row = new HashMap<>(); row.put("BAR", "c"); Number id = simpleJdbcInsert.executeAndReturnKey(row); log.info("ID of c: {}", id.longValue()); }
其中 simpleJdbcInsert
的初始化以下所示:springboot
@Bean public SimpleJdbcInsert simpleJdbcInsert(JdbcTemplate template) { return new SimpleJdbcInsert(template) .withTableName("FOO").usingGeneratedKeyColumns("ID"); }
public void listData() { log.info("Count: {}", jdbcTemplate.queryForObject("SELECT COUNT(*) FROM FOO", Long.class)); // 查詢數據並把每一行轉換成String List<String> bars = jdbcTemplate.queryForList("SELECT BAR FROM FOO", String.class); bars.forEach(bar -> { log.info("BAR: {}", bar); }); // 查詢數據並把每一行轉換成Foo List<Foo> foos = jdbcTemplate.query("SELECT * FROM FOO", new RowMapper<Foo>() { @Override public Foo mapRow(ResultSet resultSet, int i) throws SQLException { return Foo.builder() .id(resultSet.getLong(1)) // 序號從1開始 .bar(resultSet.getString(2)) .build(); } }); foos.forEach(foo -> { log.info("FOO: {}", foo); }); }