[Spring 3.0] Maven Repository(메이븐), Java의 JDBC
by 무작정 개발2022.03.25(64일 차)
오늘은 기존에 썼던 JDBC, 스프링의 JDBC, MyBatis와 Maven에 대해 학습하였다.
스프링은 기본적으로 사용하는 lib는 프로젝트를 생성할 때마다 자동으로 설치해준다.
하지만 우리가 따로 사용할 lib는 못 받는데 그 lib를 다운로드하는 곳이
Maven Repository이다. 여기에는 개발할 때 필요한 lib가 저장되어있다.
그래서 사용할 때 요청만 하면 된다.
이번 글에서는 Maven과 Java의 JDBC에 대해 정리할 것이다. 다음 글에서는 스프링의 JDBC, MyBatis에 대해 정리
추가적으로 Maven, Gradle의 차이점이 궁금하다면 하단 글 참고
Maven 이란?
Maven은 프로젝트를 만들 때 가장 많이 사용하는 빌드 툴 중 하나이다.
Maven을 사용하면 손쉽게 lib를 추가하고 관리해주고, 의존성 체크를 해준다.
Java의 JDBC
1. 새 프로젝트 생성
2. DB 생성하기 - CMD창에서 작성
create table custom
(id number,
name char(10),
age number);
3. Maven을 통한 lib(라이브러리 설치)
- Maven을 설치하는 방법은 여러 가지이다. Maven을 사용하면 버전에 따른 lib 간에 의존성 문제 문제를 해결해준다.
- 기존에는 필요한 lib파일을 직접 설치하고 넣어줬는데 Maven을 사용하면 손쉽게 lib를 추가할 수 있다.
- pom.xml : Maven의 환경설정 파일이다. 여기에 설정된 라이브러리 버전이 있고, 여기서 소스를 넣으면 자동으로 lib가 추가된다.
- Maven 저장소 : https://mvnrepository.com/
(1) 위의 주소에서 필요한 lib 찾기
- 여기에 있는 odjbc(오라클)는 버전이 안 맞아 하단에 소스를 추가할 것이다.
(2) pom.xml에 소스 추가하기
- 위에 체크된 박스 부분을 클릭하면 자동으로 소스가 복사가 된다.
- 복사한 소스를 pom.xml에 붙여 넣기 하면 자동으로 lib(라이브러리)가 추가된다.
<!-- commons-dbcp -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!-- commons-pool -->
<dependency>
<groupId>commons-pool</groupId>
<artifactId>commons-pool</artifactId>
<version>1.6</version>
</dependency>
<!-- ojdbc -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.4</version>
</dependency>
(3) - lib가 잘 추가되었는지 확인하기
- 경로 : C:\Users\. m2\repository
- commons-dbcp/commons-pool이 성공적으로 설치되었다.
4. CustomDTO 클래스 생성 및 작성
- DTO : 단지 데이터를 담는 그릇의 역할일 뿐 값은 그저 전달되어야 할 대상
package com.exe.springJdbcTemplate;
public class CustomDTO {
private String id;
private String name;
private int age;
// getter/setter 생성
}
5. app-context.xml 복사
- 원래 윈치 : src/main/resources > META-INF > spring
- 복사 위치 : src/main/java
(1) 상단에 소스 추가
- 사용자 정의 문법을 작성하기 위함 : xmlns:p="http://www.springframework.org/schema/p"
- 짝으로 사용하기에 다음 추가 : http://www.springframework.org/schema/p
(2) 스프링에게 DB 위치 정보를 알려주는 소스 작성
- DB를 연결하는 객체
- app-context.xml에 작성하면 된다.
<!-- DB연동은 어노테이션이 안된다.-->
<!-- spring 바깥의 기능이라 spring의 bean객체로 객체생성해주어야함. -->
<!-- 1. DB위치정보 등록 -->
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close"
p:driverClassName="oracle.jdbc.driver.OracleDriver"
p:url="jdbc:oracle:thin:@localhost:1521:xe"
p:username="suzi"
p:password="a123"/>
<!-- p 위에 만듬 context복사해서 / 제어의 역전IOC -->
(3) 의존성 주입 (DI)
- 메서드를 이용한 의존성 주입 (자세한 것은 하단 CustomDAO 참고 / DAO에도 소스를 추가할 것이다.)
<!-- JDBC 의존성 주입 -->
<bean id="customDAO" class="com.exe.springJdbcTemplate.CustomDAO">
<property name="dataSource" ref="dataSource"/>
</bean>
6. CustomDAO 클래스 생성 및 작성
- JDBC
- 데이터 입력
- 기존에 사용했던 Java의 JDBC라서 설명은 생략하겠다. 자세한 설명은 이전 JDBC 관련 글 참고
package com.exe.springJdbcTemplate;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import javax.sql.DataSource;
//JDBC
public class CustomDAO {
private DataSource dataSource;
//의존성 주입 - 이 메서드가 app-context.xml로 가서 프로퍼티 네임에 set이 빼고 들어감
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
Connection conn = null;
//데이터 저장
public int insertData(CustomDTO dto) {
int result = 0;
PreparedStatement pstmt = null;
String sql;
try {
conn = dataSource.getConnection();
sql = "insert into custom (id,name,age) values (?,?,?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, dto.getId());
pstmt.setString(2, dto.getName());
pstmt.setInt(3, dto.getAge());
result = pstmt.executeUpdate();
pstmt.close();
} catch (Exception e) {
System.out.println(e.toString());
}
return result;
}
//데이터 수정
public int updateData(CustomDTO dto) {
int result = 0;
PreparedStatement pstmt = null;
String sql;
try {
conn = dataSource.getConnection();
sql = "update custom set name=?,age=? where id=?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, dto.getName());
pstmt.setInt(2, dto.getAge());
pstmt.setString(3, dto.getId());
result = pstmt.executeUpdate();
pstmt.close();
} catch (Exception e) {
System.out.println(e.toString());
}
return result;
}
//데이터 삭제
public int deleteData(String id) {
int result = 0;
PreparedStatement pstmt = null;
String sql;
try {
conn = dataSource.getConnection();
sql = "delete custom where id=?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
result = pstmt.executeUpdate();
pstmt.close();
} catch (Exception e) {
System.out.println(e.toString());
}
return result;
}
//모든 데이터 출력
public List<CustomDTO> getList(String id) {
List<CustomDTO> lists = new ArrayList<CustomDTO>();
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql;
try {
conn = dataSource.getConnection(); //DB연결자
sql = "select id,name,age from custom";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
rs = pstmt.executeQuery();
while(rs.next()) {
CustomDTO dto = new CustomDTO();
dto.setId(rs.getString("id"));
dto.setName(rs.getString("name"));
dto.setAge(rs.getInt("age"));
lists.add(dto);
}
rs.close();
pstmt.close();
} catch (Exception e) {
System.out.println(e.toString());
}
return lists;
}
//하나의 데이터 출력
public CustomDTO getReadData(String id) {
CustomDTO dto = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql;
try {
conn = dataSource.getConnection(); //DB연결자
sql = "select id,name,age from custom where id=?";
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
if(rs.next()) {
dto = new CustomDTO();
dto.setId(rs.getString("id"));
dto.setName(rs.getString("name"));
dto.setAge(rs.getInt("age"));
}
rs.close();
pstmt.close();
} catch (Exception e) {
System.out.println(e.toString());
}
return dto;
}
}
7. CustomMain.java 클래스 생성 및 작성
package com.exe.springJdbcTemplate;
import java.util.List;
import org.springframework.context.support.GenericXmlApplicationContext;
//콘솔이라 main클래스 만들어
public class CustomMain {
public static void main(String[] args) {
//콘솔에서는 이 소스가 필요하다.
GenericXmlApplicationContext context =
new GenericXmlApplicationContext("app-context.xml");//app-context.xml객체생성
//DB연동할려면 DAO가 필요하다.
// context에 만들어진 객체가 들어가있음
//customDAO라는 이름으로 만들어진 Bean객체를 가져와서 dao에 넣음
//이건 일반 JDBC
//CustomDAO dao = (CustomDAO)context.getBean("customDAO");
CustomDTO dto;
dto = new CustomDTO();
//insert
dto.setId("333");
dto.setName("아이유");
dto.setAge(27);
dao.insertData(dto);
System.out.println("insert 완료");
//select(모든 데이터 검색)
/* List<CustomDTO> lists = dao.getList();
for(CustomDTO dto1 : lists) {
System.out.printf("%s %s %d\n",
dto1.getId(),dto1.getName(),dto1.getAge());
}
System.out.println("select 완료.."); */
//OneSelect(하나의 데이터 검색)
/* dto = dao.getReadData("111");
if(dto!=null) {
System.out.printf("%s %s %d\n",
dto.getId(),dto.getName(),dto.getAge());
}
System.out.println("OneSelect 완료..."); */
//update(데이터 수정)
/*dto = new CustomDTO();
dto.setId("222");
dto.setName("정인성");
dto.setAge(28);
dao.updateData(dto);
System.out.println("update 완료..."); */
//delete(데이터 삭제)
/*dao.deleteData("222");
System.out.println("delete 완료.."); */
}
}
이제 위의 insert 된 데이터는 주석 처리된 데이터 검색, 데이터 삭제 등을 주석을 제거하고 main을 실행하면
데이터가 변경되는 것을 cmd 창을 통해 알 수 있을 것이다.
예시로 insert를 제외하고 나머지는 주석 처리 후 main을 실행한 결과이다.
'Back-End > Spring Legacy' 카테고리의 다른 글
[Spring 3.0] 스프링 3.0 + MyBatis 연동 (0) | 2022.03.27 |
---|---|
[Spring 3.0] 스프링JDBC (0) | 2022.03.26 |
[Spring 3.0] 의존성 주입(DI) - 수동 (0) | 2022.03.24 |
STS 3 설치 및 세팅 핵심 정리 - Spring3.0 시작! (0) | 2022.03.24 |
[Spring 2.5] 게시판 CRUD 만들기 (0) | 2022.03.23 |
블로그의 정보
무작정 개발
무작정 개발