Chapter 3
Core Questions
- How to use
JdbcTemplate
- insert
- select
- How to use
SimpleJdbcInsert
- How to get the generated key
- using
JdbcTemplate
- using
SimpleJdbcInsert
- using
- 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? *