Step-by-Step

[7] 구현 - MyBatis 사용 본문

프로젝트/Dreamers (Blog)

[7] 구현 - MyBatis 사용

희주(KHJ) 2023. 2. 19. 00:06

📜이전📜

[6] 구현 - 간단히 프로젝트 구조 설정

 

 

Spring에서 데이터베이스와 연결하는 대표적인 방법 2가지

1. JPA 

  • Java Persistence API - ORM(Object Relational Mapping) 표준 기술 
  • Java의 객체와 관계형 DB를 맵핑하는 방식
  • 객체 만들고 필드명 위에 @Column("데이터베이스 필드명") 해주면 데이터베이스에서 알아서 뽑아가고, 건네주는 방식

2. MyBatis

  • 개발자가 직접 쿼리문 작성
  • SQL쿼리들을 한 구성파일에 구성하여 프로그램 코드와 SQL을 분리할 수 있는 장점 지님

 

JPA는 안드로이드 스튜디오 구현당시 retrofit2 사용할때 잠깐 편리함을 느꼈지만,

MyBatis를 더 잘 다뤄보고 싶은 마음에 다시 MyBatis 선택

 

 

 

 

언제나 첫 시작은 설정할 요소들이 많다

 

 

 

 

build.gradle

 

implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.0'

 

 

Application.properties

 

# MySQL 설정 
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# DB Source URL 
spring.datasource.url=jdbc:mysql://localhost:3306/DB이름

# DB username 
spring.datasource.username=DB사용자이름

# DB password 
spring.datasource.password=DB비밀번호

#mybatis
mybatis.mapper-locations=mybatis/mapper/*.xml

 

  • 나는 이 부분에 설정해서 mybatis/mapper/ *.xml로 설정함

 

 

SqlSession

 

@Configuration
@PropertySource("classpath:/application.properties")
@MapperScan(basePackages="com.webapp.dreamers.mapper",sqlSessionFactoryRef = "SqlSessionFactory")
public class DBConfig {

    @Autowired
    private ApplicationContext applicationContext;

    @Bean
    @ConfigurationProperties(prefix="spring.datasource.hikari")
    public HikariConfig hikariConfig() {
        return new HikariConfig();
    }

    /*
    @Bean(name = "dataSource")
    public DataSource dataSource() throws Exception {
        DataSource dataSource = new HikariDataSource(hikariConfig());
        return dataSource;
    }
    */
        
    @Bean(name = "SqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        sqlSessionFactoryBean.setTypeAliasesPackage("com.webapp.dreamers.domain");
        sqlSessionFactoryBean.setMapperLocations(applicationContext.getResources("classpath:mybatis/mapper/*Mapper.xml"));
        return sqlSessionFactoryBean.getObject();
    }

    @Bean(name = "sqlSession")
    public SqlSessionTemplate sqlSessionTemplate(@Qualifier("SqlSessionFactory")SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
   
    
}
  • sqlSession :  핵심적인 역할을 하는 클래스로서 SQL 실행 및 트랙잭션 관리를 실행함
  • Mapper.xml 인식해서 SQL을 실행시키기 위해 필요한 sqlSession
  • 주석처리된 dataSource는 위에 application.properties에 설정해 두었으니 필요없음
  • getResource에서 *Mapper.xml로 하면 ~Mapper로 끝나는 xml 파일명만 인식
  • 설명참조 : https://byul91oh.tistory.com/232
  • 공식문서 : https://mybatis.org/spring/ko/sqlsession.html

 

 

Mapper (Interface)

 

@Mapper
public interface UserMapper {
	public void register(UserDTO userDTO);
}

 

Mapper (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">
<mapper namespace="com.webapp.dreamers.mapper.UserMapper">
	
	<insert id="register">
		INSERT INTO user(user_id, user_name, user_pw) VALUES (#{userid},#{username},#{password})
	</insert>
	
</mapper>

 

 

 

실행

데이터 넣어서 전송

 

데이터 넣기 성공!

 

 

 

 

++ 아무것도 보내지 않은 경우

400 반환

 Bad_Request 응답 옴 (이전 글 참조)

 

 

Comments