μΉμ 2. λ°μ΄ν° μ κ·Ό κΈ°μ - μ€νλ§ JdbcTemplate μκ° μλ£!!
JdbcTemplate μ₯μ
μ€μ μ νΈλ¦¬ν¨
spring-jdbc λΌμ΄λΈλ¬λ¦¬μ ν¬ν¨λμ΄ μλλ°, μ΄ λΌμ΄λΈλ¬λ¦¬λ μ€νλ§μΌλ‘ JDBCλ₯Ό μ¬μ©ν λ κΈ°λ³ΈμΌλ‘ μ¬μ©λλ λΌμ΄λΈλ¬λ¦¬λ€.λ°λ³΅ λ¬Έμ ν΄κ²°
JdbcTemplateμ ν νλ¦Ώ μ½λ°± ν¨ν΄μ μ¬μ©ν΄μ, JDBCλ₯Ό μ§μ μ¬μ©ν λ λ°μνλ λλΆλΆμ λ°λ³΅ μμ μ λμ μ²λ¦¬ν΄μ€λ€.
statementλ₯Ό μ€λΉνκ³ μ€νstatement, resultset μ’
λ£κ°λ°μλ SQLμ μμ±νκ³ , μ λ¬ν νλΌλ―Έν°λ₯Ό μ μνκ³ μλ΅ κ°μ λ§€ννκΈ°λ§ νλ©΄ λλ€.
JdbcTemplate λ¨μ
template.queryForObject()
RowMapperλ λ°μ΄ν°λ² μ΄μ€μ λ°ν κ²°κ³ΌμΈ ResultSetμ κ°μ²΄λ‘ λ³ννλ€.EmptyResultDataAccessException μμΈκ° λ°μνλ€.IncorrectResultSizeDataAccessException μμΈκ° λ°μνλ€.template.query()
RowMapperλ λ°μ΄ν°λ² μ΄μ€μ λ°ν κ²°κ³ΌμΈ ResultSetμ κ°μ²΄λ‘ λ³ννλ€.μμλλ‘ λ°μΈλ©
JdbcTemplateμ κΈ°λ³ΈμΌλ‘ μ¬μ©νλ©΄ νλΌλ―Έν°λ₯Ό μμλλ‘ λ°μΈλ©νλ€.
νλΌλ―Έν°λ₯Ό μμλλ‘ λ°μΈλ©νλ κ²μ νΈλ¦¬νμ§λ§, μμκ° λ§μ§ μμμ λ²κ·Έκ° λ°μν μλ μλ€.
μ΄λ¦ μ§μ λ°μΈλ©
JdbcTemplateμ μ΄λ° λ¬Έμ λ₯Ό 보μνκΈ° μν΄ NamedParameterJdbcTemplateμ΄λΌλ, μ΄λ¦μ μ§μ ν΄μ νλΌλ―Έν°λ₯Ό λ°μΈλ©νλ κΈ°λ₯μ μ 곡νλ€.
μ΄λ¦ μ§μ νλΌλ―Έν°
νλΌλ―Έν°λ₯Ό μ λ¬νλ €λ©΄ Mapμ²λΌ key, value λ°μ΄ν° ꡬ쑰λ₯Ό λ§λ€μ΄μ μ λ¬ν΄μΌ νλ€.
μ¬κΈ°μ keyλ νλΌλ―Έν° μ΄λ¦, valueλ ν΄λΉ νλΌλ―Έν°μ κ°μ΄ λλ€.
μ΄λ¦ μ§μ λ°μΈλ©μμ μμ£Ό μ¬μ©νλ νλΌλ―Έν°μ μ’ λ₯λ ν¬κ² 3κ°μ§κ° μλ€.
BeanPropertyRowMapperλ ResultSetμ κ²°κ³Όλ₯Ό λ°μ μλ° λΉ κ·μ½μ λ§μΆ° λ°μ΄ν°λ₯Ό λ³ννλ€.
μλ₯Ό λ€μ΄, λ°μ΄ν°λ² μ΄μ€μμ μ‘°νν κ²°κ³Όκ° select id, priceλΌκ³ νλ©΄ λ€μκ³Ό κ°μ μ½λλ₯Ό μμ±ν΄μ€λ€.
Item item = new Item();
item.setId(rs.getLong("id"));
item.setPrice(rs.getInt("price"));
λ°μ΄ν°λ² μ΄μ€μμ μ‘°νν κ²°κ³Ό μ΄λ¦μ κΈ°λ°μΌλ‘ setId(), setPrice()μ²λΌ μλ° λΉ νλ‘νΌν° κ·μ½μ λ§μΆ λ©μλλ₯Ό νΈμΆνλ κ²μ΄λ€.
λ³μΉ asλ₯Ό μ¬μ©ν΄μ SQL μ‘°ν κ²°κ³Όμ μ΄λ¦μ λ³κ²½ν μ μλ€.
λ°μ΄ν°λ² μ΄μ€μ μ»¬λΌ μ΄λ¦κ³Ό κ°μ²΄ μ΄λ¦μ΄ λ€λ₯Ό λ λ³μΉμ ν΅ν΄ ν΄κ²°ν μ μλ€. μλ₯Ό λ€μ΄, λ°μ΄ν°λ² μ΄μ€μλ member_nameμ΄λΌ λμ΄ μλλ°, κ°μ²΄μ usernameμ΄λΌκ³ λμ΄ μλ€λ©΄ λ€μκ³Ό κ°μ΄ ν΄κ²°ν μ μλ€.
select member_name as username
μλ° κ°μ²΄λ μΉ΄λ© νκΈ°λ²μ μ¬μ©νλ€. λ°λ©΄ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€μμλ μ£Όλ‘ μ€λ€μ΄ν¬ νκΈ°λ²μ μ¬μ©νλ€.
BeanPropertyRowMapperλ μ€λ€μ΄ν¬ νκΈ°λ²μ μΉ΄λ©λ‘ μλ λ³νν΄μ€λ€. λ°λΌμ select item_nameμΌλ‘ μ‘°νν΄λ setItemName()μ λ¬Έμ μμ΄ κ°μ΄ λ€μ΄κ°λ€.
JdbcTemplateμ INSERT SQLμ μ§μ μμ±νμ§ μμλ λλλ‘ SimpleJdbcInsertλΌλ νΈλ¦¬ν κΈ°λ₯μ μ 곡νλ€.
withTableName: λ°μ΄ν°λ₯Ό μ μ₯ν ν
μ΄λΈ λͺ
μ μ§μ νλ€.usingGeneratedKeyColumns: keyλ₯Ό μμ±νλ PK μ»¬λΌ λͺ
μ μ§μ νλ€.usingColumns: INSERT SQLμ μ¬μ©ν 컬λΌμ μ§μ νλ€. νΉμ κ°λ§ μ μ₯νκ³ μΆμ λ μ¬μ©νλ€. μλ΅ κ°λ₯νλ€.JdbcTemplate: μμ κΈ°λ° νλΌλ―Έν° λ°μΈλ©μ μ§μνλ€.
NamedParameterJdbcTemplate: μ΄λ¦ κΈ°λ° νλΌλ―Έν° λ°μΈλ©μ μ§μνλ€. (κΆμ₯)
SimpleJdbcInsert: INSERT SQLμ νΈλ¦¬νκ² μ¬μ©ν μ μλ€.
SimpleJdbcCall: μ€ν μ΄λ νλ‘μμ λ₯Ό νΈλ¦¬νκ² νΈμΆν μ μλ€.
βοΈ μ€νλ§ DB 2νΈ - λ°μ΄ν° μ κ·Ό νμ© κΈ°μ μΉμ
0~2 μ 리 μλ£
βοΈ HTTP vs HTTPS μ 리 μλ£ (λλμ΄...)