자바 공부/[자바] 기본 공부

[SPRING] Mapper

햅2024 2024. 12. 12. 21:39

1. Spring Boot

  • Spring의 각종 설정 요소들을 간편하게 관리
  • 개발의 복잡성, 설정 난이도, 웹서버+빌드, 배포
    -> 이런 것들을 간편하게 처리
  • 디렉토리 설명
    • src/main/java : 서버단의 java 파일
    • src/test/java : 단위 테스트 java 파일
    • src/main/resources : 설정 파일 및 View
    • resources/static : css, js, image, font 경로
    • resources/template : html 파일 경로
    • pom.xml : 라이브러리 의존성 관리
    • application.properties : 서버 및 DB 설정 파일

 


Maria DB 설치

 

https://mariadb.org/download/?t=mariadb&p=mariadb&r=11.6.2&os=windows&cpu=x86_64&pkg=msi&mirror=blendbyte

 

Download MariaDB Server - MariaDB.org

REST API Release Schedule Reporting Bugs … Continue reading "Download MariaDB Server"

mariadb.org

 

우클릭 -> 새로생성 -> 데이터베이스

 

 

 

#JDBC Config
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.jdbc-url = jdbc:mariadb://localhost:9933/web
spring.datasource.username = root
spring.datasource.password = 1234

 

src/main/java에서 com/koreait/board/mybatis 패키지 생성

MyBatisConfig.java code 복사

package com.koreait.board.mybatis;

import java.io.IOException;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

import lombok.RequiredArgsConstructor;

@Configuration  // Config(설정) 관련 클래스
@RequiredArgsConstructor
@MapperScan("com.mega.boardnew.mapper")
public class MyBatisConfig {
	
	// 커넥션 풀 및 MyBatis에 필요한 요소들을 메모리에 할당하고 관리
	// XML과 java 연동에 필요한 경로 관리
	private final ApplicationContext applicationContext;
	
	// 1. Property 가져오기
	// @Bean
	// @Configuration 또는 @Component가 작성된 클래스의 메서드에 사용
	// 메서드의 리턴 객체를 Spring 컨테이너에 등록
	@Bean
	@ConfigurationProperties(prefix="spring.datasource")
	public HikariConfig hikariConfig() { return new HikariConfig(); }
	
	// 2. DataSource 설정
	@Bean
	public DataSource dataSource() {
		HikariDataSource hds = new HikariDataSource(hikariConfig());
		return hds;
	}
	
	// 3. SQL Session Factory
	@Bean
	public SqlSessionFactory sqlSessionFactory() throws IOException {

		SqlSessionFactoryBean sfb = new SqlSessionFactoryBean();
		sfb.setDataSource(dataSource());
		
		// SQL을 작성할 xml 경로 설정
		sfb.setMapperLocations(applicationContext.getResources("classpath*:/mapper/*.xml"));
		//sfb.setConfigLocation(applicationContext.getResource("classpath:/config/config.xml"));
		
		try {
			SqlSessionFactory factory = sfb.getObject();
			// DB는 대소문자 구분이 없으므로 컬럼명을 _로 연결하여 만든다.
			// _로 연결된 변수를 CamelCase로 바꾸는 설정을 true로 입력
			// open_date(DB) -> openDate(Java)
			factory.getConfiguration().setMapUnderscoreToCamelCase(true);
			return factory;
		}
		catch(Exception e) { e.printStackTrace(); }
		
		return null;
	}
	
}

 


 

mybatis 테스트 해보기

src/test/java -> com.koreait.board.mybatis 패키지 생성 ->  MyBatisConfigTest.java 

package com.koreait.board.mybatis;

import java.sql.Connection;

import javax.sql.DataSource;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import lombok.extern.slf4j.Slf4j;


@SpringBootTest
@Slf4j
public class MyBatisConfigTest {

	@Autowired
	private DataSource dataSource;
	
	@Test
	public void testDataSource() {
		try{
			Connection conn = dataSource.getConnection();
			log.info("Data Source Connection : " + conn);
		}
		catch(Exception ex){
			ex.printStackTrace();
		}
	}
}


 

src/main/java -> com.koreait.board 에 새로운 com.koreait.board.mapper 패키지 생성

해당 패키지에 TimeMapper.java 인터페이스 생성

package com.koreait.board.mapper;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

@Mapper //MyBatis 연결
public interface TimeMapper {

	//getTime1() 이란 함수를 해당 select 문으로 정의
	@Select("SELECT SYSDATE() FROM DUAL")
	public String getTime1();
}

 


package com.koreait.board.mybatis;

import java.sql.Connection;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import lombok.extern.slf4j.Slf4j;


@SpringBootTest
@Slf4j
public class MyBatisConfigTest {
	
	@Autowired
	private SqlSessionFactory sqlSessionFactory;
	
	@Test
	public void testSqlSessionFactory() {
		try{
			Connection conn = dataSource.getConnection();
			log.info("Data Source Connection : " + conn);
			SqlSession sqlSession = sqlSessionFactory.openSession(true);
			log.info("SQL Session : " + sqlSession);
		}
		catch(Exception ex){
			ex.printStackTrace();
		}
	}
}


TimeMapper Test

src/test/java -> com.koreait.board.mapper 패키지 생성 -> TimeMapperTest.java Class생성

src/main/resource -> mapper 폴더 생성 -> TimeMapper.xml 파일 생성

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 연결할 인터페이스 정보를 namespace에 기술 -->
<mapper namespace="com.koreait.board.mapper.TimeMapper">
	<select id="getTime2" resultType="string">
		SELECT SYSDATE() FROM DUAL
	</select>
</mapper>

 

 


package com.koreait.board.mapper;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import com.koreait.board.util.MyUtil;

import lombok.extern.slf4j.Slf4j;

@SpringBootTest
@Slf4j
public class TimeMapperTest {

	@Autowired
	private TimeMapper mapper;

	@Test
	public void testGetTime2() {
		log.info("------------------------");
		log.info("Current Time 2 : " + MyUtil.BOLD + mapper.getTime2() + MyUtil.END);
		log.info("------------------------");
	}
}

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 연결할 인터페이스 정보를 namespace에 기술 -->
<mapper namespace="com.koreait.board.mapper.TimeMapper">
	<select id="getTime2" resultType="string">
		SELECT 'HAPPY HAPPY' FROM DUAL
	</select>
</mapper>

board (3).zip
0.04MB