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 설치
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>
'자바 공부 > [자바] 기본 공부' 카테고리의 다른 글
| [SPRING] DB 등록 (1) | 2024.12.19 |
|---|---|
| [SPRING] 게시글 추가, 리스트 불러오기 (0) | 2024.12.18 |
| [SPRING] Lombok 라이브러리 (1) | 2024.12.11 |
| [SPRING] 스프링 프레임워크 기초 (4) | 2024.12.10 |
| [vue.js] 날씨 앱 만들기 (0) | 2024.12.09 |
