일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- framework
- 엘라스틱서치
- 개발
- 프레임워크
- 클린코드
- Spring
- cleancode
- 코딩
- Java
- 애자일기법
- 코딩테스트
- 코드
- 그리디알고리즘
- 백준
- Elasticsearch
- 읽기쉬운코드
- 애자일
- 그리디
- 개발자
- 데이터베이스
- 스프링
- API
- database
- spring boot
- Baekjoon
- 알고리즘
- 자바
- 애자일프로그래밍
- JPA
- ES
- Today
- Total
튼튼발자 개발 성장기🏋️
#13 : JDBC (Java DataBase Connectivity) 본문
Database를 연동하게 된다면, 우리는 코드 상에서 query를 날리는 로직이 필요할 것이다. 그렇다면 우리가 해야할 일은 다음과 같을 것이다.
드라이버 로드 -> connection 생성 (혹은 DB pool 사용) -> DB 연결 -> sql auery 실행 -> 자원해제
데이터베이스에 접근 할 때마다 상기 내용과 같은 작업이 반복적으로 이루어져야만 한다는 이야기다. 이를 해결하기 위해 JDBC를 사용하는 것이다.
spring JDBC를 사용하기 위해 spring-jdbc maven lib이 필요하다. 찾는 방법은 이전 글의 maven Repository를 참고하자.
이후 데이터베이스 설정을 해야한다. servlet-context.xml을 열어서 bean 설정을 해주자. 까먹었다면 이전 글을 다시 보자.
<beans:bean name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
<beans:property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<beans:property name="url" value="jdbc:oracle:thin:@localhost:3664:dotori" />
<beans:property name="username" value="dotori" />
<beans:property name="password" value="dotori" />
</beans:bean>
<beans:bean name="template" class="org.springframework.jdbc.core.JdbcTemplate">
<beans:property name="dataSource" ref="dataSource" />
</beans:bean>
JdbcTemplat의 객체가 필요하고 setter가 필요하다는 것을 바로 알 수 있다. 이제 JDBC를 위한 코드를 살펴보자.
public class DB {
public static JdbcTemplate template;
}
@Controller
public class HomeController {
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
public JdbcTemplate template;
@Autowired
public void setTemplat(JdbcTemplate template) {
this.template = template;
DB.template = this.template;
}
@RequestMapping("/")
public ModelAndView home(Member member) {
ModelAndView modelView = new ModelAndView();
modelView.setViewName("home");
return modelView;
}
}
public class TestDao {
DataSource dataSource;
JdbcTemplate template;
public TestDao() {
template = DB.template;
}
public ArrayList<TestDto> list() {
String query = "select * from TEST_TABLE";
return (ArrayList<TestDto>) template.query(query, new BeanPropertyRowMapper<TestDto>(TestDto.class));
}
public TestDto dto(String key) {
String query = "select * from TEST_TABLE where key = ?";
return template.queryForObject(query, new BeanPropertyRowMapper<TestDto>(TestDto.class));
}
public void update(final String key) {
String query = "update TEST_TABLE set key = testKey where key = ?";
template.update(query, new PreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps) throws SQLException {
ps.setString(1, String.valueOf(key));
}
});
}
public void write(final String key, final String name) {
template.update(new PreparedStatementCreator() {
String query = "insert into TEST_TABLE (key, name) values (?, ?)";
@Override
public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
PreparedStatement statment = con.prepareStatement(query);
statment.setString(1, key);
statment.setString(2, name);
return null;
}
});
}
public void modify(final String key, final String name) {
String query = "update TEST_TABLE set key = ?, name = ?";
template.update(query, new PreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps) throws SQLException {
ps.setString(1, key);
ps.setString(2, name);
}
});
}
public void delete(final String key) {
String query = "delete from TEST_TABLE where key = ?";
template.update(query, new PreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps) throws SQLException {
ps.setString(1, key);
}
});
}
}
Controller에서 @Autowired 어노테이션으로 JdbcTemplate 객체를 생성하고 Const화 시키고 있다. 그리고 그 template은 dao에서 받아 DB에 접근할 때 사용하며, select, delete, update 등 어떤 query를 날리느냐에 따라 코드가 다르다. 이에 대한 예제는 상기 코드와 같이 작성해보았다.
query를 xml에서 설정하는 방법(MyBatis)이 있는데 기억이 가물가물하다.. 이래서 사람은 꾸준히 공부해야하는 동물인가보다. 하핳ㅎ
'Framework > spring' 카테고리의 다른 글
#15 : 상속 없이 repository를 만들자 (0) | 2020.05.24 |
---|---|
#14 : JPA 시작 (0) | 2020.05.18 |
#12 : spring 관련 docs 및 API 참고 자료 (0) | 2020.05.08 |
#11 : 서버의 필수 로직 [validation check] (0) | 2020.05.08 |
#10 : redirect [필요하면 리다이렉트 시키자.] (0) | 2020.05.07 |