Chapter 3
Core Questions
How to use JdbcTemplate
insertselect How to use SimpleJdbcInsertHow to get the generated key
using JdbcTemplateusing 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
;
}
public List
<MyObject> findAll() {
return jdbc
.query("select * from table",
(rs
, i
) -> );
}
public MyObject
save(MyObject myObject
) {
jdbc
.update("insert into table(...) values (?, ...)",
myObject
.get
..(),
myObject
.get
..(), ...);
return myObject
;
}
public long save(MyObject myObject
) {
PreparedStatementCreator psc
;
KeyHolder keyHolder
;
psc
= new PreparedStatementCreatorFactory(
"insert into ...", Types
.SOMETYPE
, ...)
.newPreparedStatementCreator(Arrays
.asList(...));
keyHolder
= new GeneratedKeyHolder();
jdbc
.update(psc
, keyHolder
);
return keyHolder
.getKey().longValue();
}
}
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();
}
public long save(MyObject myObject
) {
Map
<String, Object> values
= mapper
.convertValue(myObject
, Map
.class);
values
.put(..., ...);
...
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? *