본문 바로가기

개발/Java & Spring

[Spring] Mybatis + MariaDB(MySQL) - AWS RDS + javaconfig -졸업프로젝트[5]

스프링 부트를 써본 뒤로 자바 설정에 익숙해져서 자바로 하려고했는데,

전부 다 자바 설정파일로 되어있는건 정말 다 한 개 도 찾을 수 없었다 ㅠ__ㅠ

전부 다 xml 아니면 xml+java 어흑 ,, 어찌저찌 부트했던 기억으로 해쑴!



pom.xml

<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.0.7.RELEASE</version>
</dependency>
	
	<!-- https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client -->
<dependency>
    <groupId>org.mariadb.jdbc</groupId>
    <artifactId>mariadb-java-client</artifactId>
    <version>2.2.6</version>
</dependency>
	<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>1.3.2</version>
</dependency>


DataConfig.java   


package kr.ac.smu.mybatis;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.mybatis.spring.mapper.MapperFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.jdbc.datasource.SimpleDriverDataSource;

import kr.ac.smu.mybatis.mapper.CustomMapper;

@Configuration
@MapperScan(basePackages="kr.ac.smu.mybatis.mapper")
public class DataConfig {
	@Bean
    public DataSource dataSource() {
        SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
        dataSource.setDriverClass(org.mariadb.jdbc.Driver.class);
        dataSource.setUsername(username);
        dataSource.setUrl("jdbc:mariadb://DBurl(or RDS 엔드포인트)/dbName");
        dataSource.setPassword(패스워드);
        return dataSource;
    }

    @Bean
    public DataSourceTransactionManager transactionManager() {
        return new DataSourceTransactionManager(dataSource());
    }

    @Bean
    public SqlSessionFactoryBean sqlSessionFactory() throws Exception {
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource());
        return sessionFactory;
    }


}

여기서 신경써야할 건 @MapperScan 이다.

경로로 매퍼를 생성할 패키지 경로를 적어준다.



Mapper.java 


package kr.ac.smu.mybatis.mapper;

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

import kr.ac.smu.DTO.PreferenceDTO;

@Mapper
public interface CustomMapper {
	@Select("SELECT * FROM preference WHERE userId=#{userId} and customName=#{customName}")
	public PreferenceDTO selectByCustom(@Param("userId") String userId, @Param("customName") String customName);
	
	@Insert("INSERT INTO preference VALUES(#{pre.userId},#{pre.id},#{pre.flag},#{pre.custom},#{pre.customName}")
	public void insertPreference(@Param("pre") PreferenceDTO pre);
}	

보통 java config라고 써있고 sql문은 xml파일로 따로 쓰던데,

나는 개인적으로 이게 더 편한 것 같다. xml로 하면 인터페이스도 따로, sql문은 따로 해야하는데 이렇게 하면 그냥 한 클래스 파일에 가능함 ! 

DTO class는 사람마다 다를 것이므로 굳이 추가하지 앟겠다.


이제 이 상태로 외부에서 Mapepr autowired 한 뒤 해당 인터페이스를 실행하면 결과가 나온다!

aws ec2 sql 접속은 그렇게 커넥트 에러나서 생고생했는데 rds 로 바꾸니까 바로되더라 허무 ㅠ__ㅠ 뭐가 문제일까 훔