์์ Jdbc์ ๋์ผํ ํ๊ฒฝ์ค์ ์ ํ๋ฉด ๋๋ค.
์คํ๋ง JdbcTemplate๊ณผ MyBatis ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ JDBC API์์ ๋ณธ ๋ฐ๋ณต ์ฝ๋๋ฅผ ๋๋ถ๋ถ ์ ๊ฑฐํด์ค๋ค.
ํ์ง๋ง SQL์ ์ง์ ์์ฑํด์ผ ํ๋ค.
์คํ๋ง JdbcTemplate ํ์ ๋ฆฌํฌ์งํ ๋ฆฌ
JdbcTemplateMemberRepository.class
public class JdbcTemplateMemberRepository implements MemberRepository {
private final JdbcTemplate jdbcTemplate;
public JdbcTemplateMemberRepository(DataSource dataSource) {
jdbcTemplate = new JdbcTemplate(dataSource);
}
DataSoruce
DataSource๋?
- DB์ ๊ด๊ณ๋ ์ปค๋ฅ์ ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ผ๋ฉฐ ๋น์ผ๋ก ๋ฑ๋กํ์ฌ ์ธ์๋ก ๋๊ฒจ์ค๋ค.
- → ์ด ๊ณผ์ ์ ํตํด Spring์ DataSource๋ก DB์์ ์ฐ๊ฒฐ์ ํ๋ํ๋ค.
DataSource ๋ DB์ ์ฐ๊ฒฐ์ ํด์ฃผ๋ ์ญํ ์ ํ๊ณ
์คํ๋ง์ DataSoruce๋ฅผ ํตํด DB์์ Connect๋ฅผ ํ๋ํ๋ค
์ ๋ฆฌ
spring-jdbc๋ฅผ ์ด์ฉํด์ plain jdbc์ ๋จ์ ์ ๋ณด์ํ๋ฉฐ ํต์ฌ ๋ก์ง์๋ง ์ง์คํ ์ ์๋๋ก ํ๋ค. ์ด๋ Spring-jdbc์ ์ฌ๋ฌ ์ ๊ทผ๋ฐฉ๋ฒ์ค ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ jdbcTemplate์ ์ ํํ๋ค.
DataSource๋ฅผ ๋น์ผ๋ก ๋ฑ๋กํ๊ณ ์ด๋ฅผ jdbcํ ํ๋ฆฟ์ ์ฃผ์ ํ๋ค. ์ด๋ฌํ ๊ณผ์ ์ ํตํด ๋ฐ์ดํฐ์์ค๋ ๋๋น์ ์ฐ๊ฒฐ์ ํ๋ํ๋ค. ์ด๋ค ๋๋น๋ฅผ ์ฌ์ฉํ๋๋์ ๋ฐ๋ผ ๋๋น์ ๋ง๋ jdbc driver๊ฐ ์กด์ฌํ๋ค.
jdbcํ ํ๋ฆฟ์ด jdbc๋๋ผ์ด๋ฒ๋ฅผ ์ด์ฉํด์ DB์ ์ ๊ทผํ๋ค.
JdbcTemplate
JDBC์ ์ฌ์ฉ์ ๋จ์ํํ๊ณ ์ผ๋ฐ์ ์ธ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ๋๋ฐ ๋์์ด ๋๋ค.
๊ฐ๋ฐ์๊ฐ JDBC๋ฅผ ์ง์ ์ฌ์ฉํ ๋ ๋ฐ์ํ๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐ๋ณต ์์ ์ ๋์ ์ฒ๋ฆฌํด์ค๋ค.
์ฝ๊ฒ ๋งํด JdbcTemplate์ ๊ฐ๋ฐ์๊ฐ JDBC ๊ธฐ์ ์ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋์์ฃผ๋ ํด๋์ค์ด๋ค.
3. ์ฟผ๋ฆฌ ์์ฑ ๋ฐ ์คํ
JdbcTemplate ํด๋์ค๋ SELECT ์ฟผ๋ฆฌ ์คํ์ ์ํ query() ๋ฉ์๋๋ฅผ ์ ๊ณตํฉ๋๋ค. ์๋ ๋ฉ์๋๋ค์ ์์ฃผ ์ฌ์ฉ๋๋ ์ฟผ๋ฆฌ ๋ฉ์๋๋ค์ ๋๋ค.
- List<T> query(String sql, RowMapper<T> rowMapper)
- List<T> query(String sql, Object[] args, RowMapper<T> rowMapper)
- List<T> query(String sql, RowMapper<T> rowMapper, Object... args)
query() ๋ฉ์๋๋ sql ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ๋ฐ์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ณ RowMapper๋ฅผ ์ด์ฉํด์ ResultSet์ ๊ฒฐ๊ณผ๋ฅผ ์๋ฐ ๊ฐ์ฒด๋ก ๋ณํํฉ๋๋ค. <T>๋ ์ด๋ค ํ์ ๋ ์ฌ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
@Override
public Optional<Member> findById(Long id) {
List<Member> result = jdbcTemplate.query("select * from member where id = ?", memberRowMapper(), id);
return result.stream().findAny();
}
private RowMapper<Member> memberRowMapper() {
return (rs, rowNum) -> {
Member member = new Member();
member.setId(rs.getLong("id"));
member.setName(rs.getString("name"));
return member;
};
๋จ์ ๋ฐ์ดํฐ ํ์ ์ด ์๋ ๊ฐ์ฒด๋ฅผ ์กฐํํ๋ ค๋ฉด ์ด๋ป๊ฒ ํ ๊น?
์ฌ๊ธฐ์ RowMapper๋ฅผ ํ์ฉํด ๊ฐ์ฒด๋ฅผ ์กฐํํ ์ ์๋ค.
RowMapper๋?
RowMapper๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐํ ๊ฒฐ๊ณผ์ธ ResultSet์ ๊ฐ์ฒด๋ก ๋ณํํด์ฃผ๋ ํด๋์ค์ด๋ค.
RowMapper์ mapRow()๋ผ๋ ๋ฉ์๋๋ ์๋์ ๊ฐ์ด ์ ์๋์ด ์๋ค.
T mapRow(ResultSet rs, int rowNum) throws SQLException;
ResultSet rs์ ๊ฒฐ๊ด๊ฐ์ ๋ด์์ ์ฌ์ฉ์๊ฐ ์ํ๋ ๊ฐ์ฒด์ ๋ด๋๋ค. rowNum์ ๋ฐ๋ณต๋๋ ๋ฃจํ ์ค ํ์ฌ ํ์ ๋ฒํธ๋ฅผ ๋ํ๋ธ๋ค.
์ฆ ์๋์ ๊ฐ์ด ๋์ํ๋ค.
public Item mapRow(ResultSet rs, int rowNum) throws SQLException {
// ResultSet ๊ฐ์ Item ๊ฐ์ฒด์ ์ ์ฅ
Item item = new Item();
item.setId(rs.getLong("id"));
item.setItemName(rs.getString("item_name"));
item.setPrice(rs.getInt("price"));
// item ๋ฐํ
return item;
};
@Override
public Member save(Member member) {
SimpleJdbcInsert jdbcInsert = new SimpleJdbcInsert(jdbcTemplate);
jdbcInsert.withTableName("member").usingGeneratedKeyColumns("id");
Map<String, Object> parameters = new HashMap<>();
parameters.put("name", member.getName());
Number key = jdbcInsert.executeAndReturnKey(new
MapSqlParameterSource(parameters));
member.setId(key.longValue());
return member;
}
@Override
public Optional<Member> findById(Long id) {
List<Member> result = jdbcTemplate.query("select * from member where id = ?", memberRowMapper(), id);
return result.stream().findAny();
}
@Override
public Optional<Member> findByName(String name) {
List<Member> result = jdbcTemplate.query("select * from member where name = ?", memberRowMapper(), name);
return result.stream().findAny();
}
@Override
public List<Member> findAll() {
return jdbcTemplate.query("select * from member", memberRowMapper());
}
https://code-lab1.tistory.com/277
'Spring > Spring ์ ๋ฌธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์คํ๋ง ์ ๋ฌธ - (18) ์คํ๋ง ๋ฐ์ดํฐ JPA (0) | 2023.01.28 |
---|---|
์คํ๋ง ์ ๋ฌธ - (17) JPA(Java Persistence API) (0) | 2023.01.28 |
์คํ๋ง ์ ๋ฌธ - (15) ์คํ๋ง ํตํฉ ํ ์คํธ (0) | 2023.01.27 |
์คํ๋ง ์ ๋ฌธ - (14) ์คํ๋ง DB ์ ๊ทผ ๊ธฐ์ / ์์ Jdbc (0) | 2023.01.26 |
์คํ๋ง ์ ๋ฌธ - (13) ํ์ ์น ๊ธฐ๋ฅ (0) | 2023.01.22 |