Spring in Action 5th edition Chapter 3

本文详细讲解了如何使用Spring JdbcTemplate进行数据库操作,包括插入、选择记录及获取自动生成的键。同时,介绍了SimpleJdbcInsert的用法,以及其与JdbcTemplate在插入操作上的对比。此外,还探讨了JDBC与JPA的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Chapter 3

Core Questions

  • How to use JdbcTemplate
    • insert
    • select
  • How to use SimpleJdbcInsert
  • How to get the generated key
    • using JdbcTemplate
    • using SimpleJdbcInsert
  • What is the difference between JDBC and JPA.
How to use JdbcTemplate
@Repository
public MyRepository implements SomeRepoInterface {
  private final JdbcTemplate jdbc;
  @Autowired
  public MyRepository(JdbcTemplate jdbc) {
    this.jdbc = jdbc;
  }
  
  //select use query() method
  public List<MyObject> findAll() {
    return jdbc.query("select * from table", 
                      (rs, i) -> /*code to map to the target class*/);
  }
  
  //insert use update() method
  public MyObject save(MyObject myObject) {
    jdbc.update("insert into table(...) values (?, ...)",
              myObject.get..(),
              myObject.get..(), ...);
    return myObject;
  }
  
  //insert and get generated key
  public long save(MyObject myObject) {
    
    PreparedStatementCreator psc;
    KeyHolder keyHolder;
    
    psc = new PreparedStatementCreatorFactory(
      "insert into ...", Types.SOMETYPE, .../*define the types*/)
      .newPreparedStatementCreator(Arrays.asList(.../*values go here*/));
    keyHolder = new GeneratedKeyHolder();
    
    jdbc.update(psc, keyHolder);
    
    return keyHolder.getKey().longValue(); //getKey() method returns Number type.
  }
}
How to use SimpleJdbcInsert
@Repository
public class MyRepository implements MyRepoInterface {
  
  private final JdbcTemplate jdbc;
  private final SimpleJdbcInserter inserter;
  private final ObjectMapper mapper;
  
  @Autowired
  public MyRepository(JdbcTemplate jdbc) {
    this.jdbc = jdbc;
    this.inserter = new SimpleJdbcInserter()
      .withTableName("MyTable")
      .usingColumns("Column1", ...)
      .usingGeneratedKeyColumns("Column 1", ...);
    this.mapper = new ObjectMapper();
  }
  
  //insert and get the key
  public long save(MyObject myObject) {
    Map<String, Object> values = mapper.convertValue(myObject, Map.class);
    values.put(..., ...); //for some fields may not be converted 
    ...
    return inserter.executeAndReturnKey(values).longValue();
  }      
}

Other Questions

  • What is H2 database? *
  • What does @Repository include? *
  • Comparison over field injection, constructor injection, and setter injection. *
  • What is “bolierplate code”? *
Comparison over field injection, constructor injection, and setter injection. *

https://www.javacodegeeks.com/2019/02/field-setter-constructor-injection.html

{ Readability }

field > constructor > setter

{ Immutability }

ONLY constructor support immuatbility.

{ State Safe }

What is state safe? *

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值