무작정 개발.Vlog

[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과 Gradle의 차이점

 

[빌드 도구] Maven과 Gradle의 차이점

이번에는 Java 빌드 도구인 Maven과 Gradle의 차이점에 대해 정리할 것이다. [ 목적 ] 최근까지 빌드 도구를 Maven만 사용하였고, 최근에 Gradle을 사용하게 되었다. 단순히 Gradle이 더 최신 빌드 도구라는

backendcode.tistory.com

 

Maven 이란?

 

Maven은 프로젝트를 만들 때 가장 많이 사용하는 빌드 툴 중 하나이다.

Maven을 사용하면 손쉽게 lib를 추가하고 관리해주고, 의존성 체크를 해준다.

 

 

Java의 JDBC

 

1. 새 프로젝트 생성

1. 새 프로젝트 생성1. 새 프로젝트 생성
1. 새 프로젝트 생성

 

2. DB 생성하기 - CMD창에서 작성

create table custom
(id number,
name char(10),
age number);

custom 테이블 생성
custom 테이블 생성

 

3. Maven을 통한 lib(라이브러리 설치)

  • Maven을 설치하는 방법은 여러 가지이다. Maven을 사용하면 버전에 따른 lib 간에 의존성 문제 문제를 해결해준다.
  • 기존에는 필요한 lib파일을 직접 설치하고 넣어줬는데 Maven을 사용하면 손쉽게 lib를 추가할 수 있다.
  • pom.xml : Maven의 환경설정 파일이다. 여기에 설정된 라이브러리 버전이 있고, 여기서 소스를 넣으면 자동으로 lib가 추가된다.
  • Maven 저장소 : https://mvnrepository.com/

 

(1) 위의 주소에서 필요한 lib 찾기

  • 여기에 있는 odjbc(오라클)는 버전이 안 맞아 하단에 소스를 추가할 것이다.

Commons DBCP 1.4
Commons DBCP 1.4
Commons Pool 1.6
Commons Pool 1.6

 

(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이 성공적으로 설치되었다.

추가된 lib 경로
추가된 lib 경로

 

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) 상단에 소스 추가

위치
작성 위치

(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을 실행한 결과이다.

insert를 제외하고 나머지는 주석 처리 후 main을 실행한 결과
insert를 제외하고 나머지는 주석 처리 후 main을 실행한 결과

 

반응형

블로그의 정보

무작정 개발

무작정 개발

활동하기