오랜만에 글을 쓴다. 또 해외에 다녀오느라 글쓰는게 늦었다..
오늘은 JdbcTemplate 을 이용해서 쉽게 Database와 통신해보는 걸 포스팅 할 생각이다.
Java를 배우신 분들이면 아마 Jdbc를 이용해서 Database 통신을 해봤을 것이다. 복습한다는 생각으로 Jdbc 에 대해 아주 간단하게 설명해보겠다. 아래 그림을 보자.
JDBC 는 Java Databse Connectivity의 줄임말로 Java에서 Database 프로그래밍을 하기 위해 사용되는 API 이다.
Driver를 DB에 맞게 로딩해주면 Database 종류에 상관 없이 사용할 수 있고 Connection 객체를 이용해 database를 연결해주고 PreparedStatement 나 Statement 객체를 이용해 SQL 문을 작성하고 전송한 뒤 close 메서드를 이용해 자원을 해제한다.
다들 아시겠지만 그래도 !! 처음 보는 사람들을 위해 예제 하나 작성해보겠다.
1
2
3
4
5
6
7
8
9
10
11
12
|
@Repository
public class MemberDao implements MemberDaoImpl {
private final static String URL = "jdbc:mysql://[IP주소]:3306/[DB명]?useSSL=false";
private final static String USER_ID = "[유저 id]";
private final static String USER_PW = "[유저 password]";
private final static String MEMBER_INSERT_QUERY = "INSERT INTO member (memId, memPw, memMail) values (?, ?, ?)";
private Connection conn = null;
private PreparedStatement pstmt = null;
|
나는 보통 Driver, URL, DB 계정 그리고 쿼리문은 상수로 만들어 놓고 시작한다. (나중에 이값을 바꿔줘야할 때 찾기 귀찮다.)
아 위의 설정은 스프링 설정 파일 (root-context.xml) 에 아래와 같이 설정해도 된다.
1
2
3
4
5
6
|
<beans:bean id ="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<beans:property name="jdbcUrl" value="jdbc:mysql://[ip주소]:3306/[db 명]?useSSL=false" />
<beans:property name="user" value="[계정명]"/>
<beans:property name="password" value="[계정명]"/>
</beans:bean>
|
그리고 Connection 과 PreparedStatement 도 선언해두자.
이번에는 실제 member라는 table에 삽입을 하는 메서드를작성해보자.
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
32
33
34
35
|
@Override
public int memberInsert(Member member) {
int result = 0;
try {
Class.forName(DRIVER);
conn = DriverManager.getConnection(URL, USER_ID, USER_PW);
pstmt = conn.prepareStatement(MEMBER_INSERT_QUERY);
pstmt.setString(1, member.getMemId());
pstmt.setString(2, member.getMemPw());
pstmt.setString(3, member.getMemMail());
result = pstmt.executeUpdate();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (pstmt != null) {
}
if (conn != null) {
}
} catch (SQLException e) {
e.printStackTrace();
}
}
return result;
}
|
이렇게 .... 길다.... 단지 insert 하나하는데 이렇게 길다 .... 이걸 매번 해줘야한다니 참 스트레스였다.
한번 쯤 써보셨으면 위의 말이나 소스코드가 무슨 말인지 이해 되실거라 생각한다. 오늘은 JDBC를 설명하려고 글을 쓰는게 아니니 이정도만 설명하고 넘어가도록 하겠다.
오늘은 Jdbc의 저런 일련의 과정을 한방에 해결할 수 있는 JdbcTemplate에 대해 공부해볼꺼다.
이 JdbcTemplate을 이용해서 Driver 로딩, Database 연결, 자원해제 이런 행위를 Spring Framework에 다 맡겨버리고, 우리는 Query 만 다루면 된다.
먼저 이걸 쓰기 위해서는 DataSource라는 녀석을 먼저 알아야 한다. 얘는 데이터베이스 연결과 관련된 정보 (Driver, DB IP 주소, 계정 정보) 를 가지고 있는 녀석인데 스프링 이나 c3p0로 에서 제공하는 DriverManagerDataSource라는 클래스를 쓰면 된다.
자, 그럼 대망의 JdbcTemplate 예제 소스를 공개하겠다!!
먼저 이걸 사용하기 위해서는 pom.xml을 살짝 수정해줘야한다.
1
2
3
4
5
6
7
8
9
10
|
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>3.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5</version>
</dependency>
|
이런 식으로 dependency만 추가해주면된다. 하나만 추가하면 되는데 둘 다 보여주기 위해서 추가했다.ㅎㅎ
( 아! 뭐 하나만 더 얘기하고 가자면 ... c3p0는 커넥션 풀이라는 걸 쓸때 쓰면된다고 생각하면 된다)
이제 자바소스를 보자 .
1
2
3
4
5
6
7
8
9
10
11
12
|
@Repository
public class MemberDao implements MemberDaoImpl {
private final static String URL = "jdbc:mysql://[IP주소]:3306/[DB명]?useSSL=false";
private final static String USER_ID = "[유저 id]";
private final static String USER_PW = "[유저 password]";
private final static String MEMBER_INSERT_QUERY = "INSERT INTO member (memId, memPw, memMail) values (?, ?, ?)";
private com.mchange.v2.c3p0.DriverManagerDataSource dataSource;
//private org.springframework.jdbc.datasource.DriverManagerDataSource dataSource;
|
아까전에 있던 Connection 이나 PreparedStatement 그리고 여기선 선언 안했지만 ResultSet 까지 다 제거해주고 저 DataSource 객체만 선언하자 !
그리고 위에서 보이는 DB 관련 정보를 DataSource에 세팅을 해줘야한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
public MemberDao() {
//c3p0
dataSource = new DriverManagerDataSource();
dataSource.setDriverClass(DRIVER);
dataSource.setJdbcUrl(URL);
dataSource.setUser(USER_ID);
dataSource.setPassword(USER_PW);
//spring
/*
dataSource = new org.springframework.jdbc.datasource.DriverManagerDataSource();
dataSource.setDriverClassName(DRIVER);
dataSource.setUrl(URL);
dataSource.setUsername(USER_ID);
dataSource.setPassword(USER_PW);
*/
jdbcTemplate = new JdbcTemplate();
jdbcTemplate.setDataSource(dataSource);
}
|
1
2
3
4
|
@Autowired
public UserDao(ComboPooledDataSource dataSource) {
the.template = new JdbcTemplate(dataSource)
}
|
이렇게 생성자에 dataSource를 한번만 세팅해주면 ~~~~~ 두번은 안해도 된다 !! ㅎㅎㅎ c3p0 나 spring이나 세팅하는 방법은 뭐 거기서 거기다. 그리고 그 dataSource를 jdbcTemplate에 세팅해주면 준비 끝!!
자...!! 그다음은 아까 member table에 삽입을 하는 메서드를 JdbcTemplate를 이용해서 작성해보자.
1
2
3
4
5
6
7
8
9
|
@Override
public int memberInsert(Member member) {
int result = 0;
result = jdbcTemplate.update(MEMBER_INSERT_QUERY, member.getMemId(), member.getMemPw(), member.getMemMail());
return result;
}
|
와우 ... 아까 그 길던 소스가 ... 세 줄로 줄었다. ㅎㅎㅎ
오늘 포스팅은 여기까지 해야겠다. 그럼 오늘도 즐코~~~~
'Develop > Spring' 카테고리의 다른 글
[Spring] Interceptor 를 이용한 페이지 전환 구현 (2) (0) | 2019.10.30 |
---|---|
[Spring] Interceptor 를 이용한 페이지 전환 구현 (1) (0) | 2019.10.27 |
[Spring] Redirect를 이용하여 특정 페이지로 전환하기 (2) (0) | 2019.09.28 |
[Open API] SOAP 란? (1) | 2019.09.25 |
[Open API] Open API 란? (1) | 2019.09.25 |
댓글