JDBC 操作

简单的 JDBC 操作主要有:

JdbcTemplate

  • query
  • queryForObject
  • queryForList
  • update
  • execute

简单使用如下所示。

初始化数据库

springboot 会自动执行 resources 文件夹下的 data.sql 和 schema.sql。

schema.sql

CREATE TABLE FOO (ID INT IDENTITY, BAR VARCHAR(64));

data.sql

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 的初始化如下所示:

@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);
    });
}
posted @ 2019-11-01 22:00  Just_for_Myself  阅读(138)  评论(0编辑  收藏