Spring boot 환경에서 postgreSql DB를 연동하여 정보를 가져오려고 한다.
MyBatis 사용을 위한 설정
- MyBatis 설정 <configuration></configuration > : mybatis-config.xml 에서 설정함.
- SqlSessionFactory : DatabaseConfig.java 에서 설정함
- SQL 맵핑 <mapper></mapper> : dataMapper.xml에 쿼리문을 작성함
1. 라이브러리
build.gradle에 의존성 추가
implementation "org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.1"
implementation "org.mybatis:mybatis-spring:1.3.1"
implementation "org.mybatis:mybatis:3.4.5"
implementation "org.postgresql:postgresql:9.4.1209.jre6"
2. mybatis 설정 파일 추가
resources > mybatis 밑에 mybatis-config.xml 생성
내용
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="jdbcTypeForNull" value="NULL" />
<setting name="mapUnderscoreToCamelCase" value="true" />
</settings>
</configuration>
jdbcTypeForNull : JDBC타입을 파라미터에 제공하지 않을때 null값을 처리한 JDBC타입을 명시한다. 일부 드라이버는 칼럼의 JDBC타입을 정의하도록 요구하지만 대부분은 NULL, VARCHAR 나 OTHER 처럼 일반적인 값을 사용해서 동작한다.
mapUnderscoreToCamelCase : 전통적인 데이터베이스 칼럼명 형태인 A_COLUMN을 CamelCase형태의 자바 프로퍼티명 형태인 aColumn으로 자동으로 매핑하도록 함
3. jdbc datasource 설정
resources 밑에 application.yml 생성
내용
spring:
profiles:
active: local
---
# local development server
spring:
profiles: local
datasource:
jdbc-url: jdbc:postgresql://localhost:5432/dbName
driver-class-name: org.postgresql.Driver
username: test
password: test@!
4. DB 접속 및 sqlSession 설정
패키지 밑에 DataBaseConfig 생성
내용
package com.export.config;
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.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
@Configuration
//////매퍼 xml 파일이 바라볼 패키지 설정
@MapperScan(value="com.export.mapper.*", sqlSessionFactoryRef = "sqlSessionFactory")
public class DataBaseConfig {
/////application.yml에 설정한 정보를 가져와 dataSource 빈 생성
@Primary
@Bean(name = "dataSource")
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
@Primary
@Bean(name = "sqlSessionFactory")
public SqlSessionFactory sqlSessionFactoryBean(
@Autowired @Qualifier("dataSource") DataSource dataSource,
ApplicationContext applicationContext) throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(dataSource);
factoryBean
.setConfigLocation(applicationContext.getResource("classpath:mybatis/mybatis-config.xml"));
factoryBean
.setMapperLocations(applicationContext.getResources("classpath:mybatis/mapper/*.xml"));
return factoryBean.getObject();
}
@Primary
@Bean(name = "sqlSession")
public SqlSessionTemplate sqlSession(
@Autowired @Qualifier("sqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
@Primary
@Bean(name = "transactionManager")
public DataSourceTransactionManager transactionManager(
@Autowired @Qualifier("dataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}
설정은 끝
매퍼 xml 파일 예시
resources > mybatis > 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.export.mapper.DataMapper">
<select id="select11" parameterType="DataDto" resultType="Integer">
SELECT COUNT(*)
FROM ${tableName}
WHERE ${dataTimeColumn} BETWEEN TO_TIMESTAMP(#{startTime},'YYYY-MM-DD') AND TO_TIMESTAMP(#{endTime},'YYYY-MM-DD')
</select>
</mapper>
'코딩 관련 > MyBatis' 카테고리의 다른 글
[ibatis] multiple checkbox / 체크박스 value 여러개 쿼리 / ibatis 반복문 / ibatis 변수 반복 / 체크박스 여러개 (0) | 2023.04.17 |
---|---|
[MyBatis] Mapped Statements collection already contains value for... (0) | 2021.02.09 |
[MyBatis] 언더바 camelcase mybatis 자동매핑 (0) | 2021.02.02 |
[MyBatis]MyBatis resultType HashMap 반환하기 (0) | 2020.12.16 |
[MyBatis] 배열 파라미터 / list 사용하는 쿼리 / 반복문 쿼리 (0) | 2020.10.20 |