Spring in Action 5th edition Chapter 3

    技术2022-07-11  82

    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; } //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? *

    Processed: 0.018, SQL: 9