MyBatis

MyBatis는 자바 퍼시스턴스 프레임워크의 하나로 XML이나 Annotation을 사용한다.

그리고 SQL Mapper를 이용하여 자바의 객체를 SQL문과 연결하여 빠르고 편리하게 DB에 접근할 수 있게 해줍니다.

MyBatis는 소스 코드와 SQL문을 분리하여 간결성과 유지보수성이 향상되고 복잡한 쿼리나 다이나믹한 쿼리에 강합니다.

MyBatis 아키텍처

서비스에서 DAO를 호출하고 MyBatis를 사용합니다.

 

MyBatis를 사용하는 데이터 액세스 계층

MyBatis는 Data Access Layer에서 사용하는 프레임워크입니다..

그림과 같이 Controller에서 Service를 호출하고 Service가 DAO 계층에 있는 메소드를 호출하면 DAO에서 MyBatis를 호출합니다.

 

MyBatis의 주요 컴포넌트의 역할

  • MyBatis 설정파일 (SqlMapConfig.xml) : 데이터베이스의 접속 주소 정보나 Mapping 파일의 경로 등의 고정된 환경정보를 설정
  • SqlSession FactoryBuilder : MyBatis 설정 파일을 바탕으로 SqlSessionFactory를 생성한다.
  • SqlSessionFactory : SqlSession을 생성한다.
  • SqlSession : 핵심적인 역할을 하는 클래스로서 SQL실행이나 트랜잭션 관리를 실행한다.
  • mapping 파일 (user.xml) : SQL문과 OR Mapping을 설정한다.

 

'Web > Spring' 카테고리의 다른 글

[Spring] DAO 와 DTO  (0) 2020.12.25
[Spring] Spring MVC 구조  (0) 2020.12.25
[Spring] DI (Dependency Injection, 의존성 주입)  (0) 2020.12.17
[Spring] Maven 과 Gradle  (0) 2020.12.13
[Spring] Spring Framework 와 Spring Boot  (0) 2020.12.13

알고리즘을 풀면서 입출력 때문에 시간의 차이가 나는 경우가 꽤 있었기에, BufferedReaderd와 BufferedWriter에 대해 간단히 설명하겠습니다.

 

Scanner

Scanner scanner = new Scanner(System.in);
int x = scanner.nextInt();

Scanner로 입력받는 데에 한계를 느낄 때 BufferedReader를 사용하면 됩니다.

 

BufferedReader

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));

String s = bufferedReader.readLine();
int x = Integer.parseInt(bufferedReader.readLine());

readLine() 함수를 이용해서 읽어올 경우 String의 리턴 값을 가집니다. 그렇기 때문에 parseInt() 함수를 이용하여 String 값을 int형으로 파싱 해 주었습니다. 또한 예외처리를 꼭 해주어야 하는데 대개 throws IOException을 통하여 작업합니다.

 

Scanner의 경우 nextInt()를 입력하면 공백 다음 숫자를 받기 때문에 어려움이 있지만, BufferedReader를 사용하면 

StringTokenizer를 이용하여 String을 특정 구분자(delimeter) 값을 통해 공백을 기준으로 문자열을 나눕니다.

 

StringTokenizer

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());

int a = Integer.parseInt(stringTokenizer.nextToken());
int b = Integer.parseInt(stringTokenizer.nextToken());

StringTokenizer에 nextToken() 함수를 쓰면 bufferedReader.readLine()을 통해 입력받은 값을 공백 기준으로 구분하여

순서대로 호출합니다.

 

BufferedWriter

BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.in));

bufferedWriter.write("Hello\n");
bufferedWriter.flush();
bufferedWriter.close();

일반적으로 System.out.println을 이용하면 자동 줄 바꿈을 해주지만, bufferedWriter.write()는 자동 줄 바꿈이 없기 때문에 \n을 작성해주어야 한다. 마지막에 flush() / close()함수를 작성해주지 않을 경우 제대로 출력이 되지 않을 수도 있습니다.

Scanner 클래스

Scanner 객체를 생성하려면 다음과 같이 생성자에 System.in 매개값을 주면 된다.

Scanner scanner = new Scanner(System.in);

 

Scanner 클래스에서 next(), nextLine() 메서드는 String 타입으로 리턴해준다.

다음 예제를 통해 이 둘 메소드의 차이를 알아보자

 

next()와 nextLine() 메소드의 차이

public class Example {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
        
		System.out.println("nextLine: ");
		string str1 = scanner.nextLine();
		System.out.println(str1);
        
		System.out.println("next: ");
		string str2 = scanner.next();
		System.out.println(str2);
	}
}
nextLine :
안녕하세요 반갑습니다
안녕하세요 반갑습니다
next : 
안녕하세요 반갑습니다
안녕하세요

nextLine()과 next()메소드의 차이는 nextLine()메소드는 Enter를 치기 전까지 쓴 문자열을 모두 리턴한다는 것이고 next() 메소드는 Space 즉 공백 전까지 입력받은 문자열을 리턴한다는 것이다.

공백이 있는 한줄을 리턴받고 싶으면 nextLine() 메소드를 사용하고, 한 단어만 리턴받고 싶으면 next() 메소드를 사용하면 된다.

Maven

  • pom.xml을 이용한 정형화된 빌드 시스템

  • 개발환경이 다르더라도 pom.xml을 공유하면 정상적으로 실행된다.

  • 새로운 기능을 쉽게 설치할 수 있고 업데이트할 수 있다.

  • 개발 가이드 라인을 제공

Gradle

  • Groovy기반으로 만들어진 빌드 도구

  • 멀티 프로젝트의 빌드 지원하기 위해 설계 되었기 때문에 멀티 프로젝트에 사용하기 좋다.

  • pom 파일 없이 연결되는 의존성 관리 지원

Gradle이 Maven보다 좋은 이유

  • Build라는 동적인 요소를 XML로 정의하기에는 어려운 부분이 많다.

  • Gradle는 동적인 빌드를 Groovy 스크립트로 플러그인을 호출하거나 직접 코드를 짜면 된다.

예제

Maven

Gradle

'Web > Spring' 카테고리의 다른 글

[Spring] DAO 와 DTO  (0) 2020.12.25
[Spring] Spring MVC 구조  (0) 2020.12.25
[Spring] DI (Dependency Injection, 의존성 주입)  (0) 2020.12.17
[Spring] MyBatis 란?  (0) 2020.12.15
[Spring] Spring Framework 와 Spring Boot  (0) 2020.12.13

+ Recent posts