티스토리 뷰

 

 

- 전자정부 프레임워크 이클립스 사용
- Postgresql, MariaDB 연결
- 기존에 Postgresql이 연결되어있지만, 추가로 MariaDB를 프로젝트에 연결해야함

(CommonMapper에서 postgresql이나 oracle 둘 중 하나의 디비로 나눠줌)

 

 

 

1. pom.xml에 dependency 추가하기

 

 

https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client

위의 사이트에서 원하는 버전에 맞는 Maven dependency를 추가할 수 있다.

<!-- Postgresql -->
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.3.5</version>
</dependency>

<!-- MariaDB -->
<dependency>
    <groupId>org.mariadb.jdbc</groupId>
    <artifactId>mariadb-java-client</artifactId>
    <version>2.7.1</version>
</dependency>

 

 

 

 

 

 

2. context-datasource.xml

 

DBMS의 유형, 호스트/IP, 포트번호, id, pw, DB명에 대한 정보가 필요하다.

 

아래와 같이 각각의 DB에 맞게 빈을 생성해주면 된다.

이때 bean id 값은 다르게 설정해야한다.

 

(bean: 스프링 컨테이너에 의해 생성되는 자바의 객체)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:jdbc="http://www.springframework.org/schema/jdbc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/jdbc  http://www.springframework.org/schema/jdbc/spring-jdbc-4.0.xsd">
	    
    <!-- postgresql -->
    <bean id="dataSource-pgsql" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="org.postgresql.Driver"/>
        <property name="url" value="jdbc:postgresql://[호스트/ip주소]:[포트번호]/[db명]" />
        <property name="username" value="test"/>
        <property name="password" value="1234"/>
    </bean>
    
    <!-- mariadb -->
    <bean id="dataSource-gnss" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="org.mariadb.jdbc.Driver"/>
        <property name="url" value="jdbc:mariadb://[호스트/ip주소]:[포트번호]/[db명]" />
        <property name="username" value="test"/>
        <property name="password" value="1234"/>
    </bean>
</beans>

 

 

 

 

3. context-mapper

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
	<!-- Postgresql -->
	<!-- SqlSession setup for MyBatis Database Layer -->
	<bean id="sqlSession-pgsql" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource-pgsql" />
		<property name="configLocation" value="classpath:/egovframework/sqlmap/sql-mapper-config.xml" />
		<property name="mapperLocations" value="classpath:/egovframework/sqlmap/pgsql/mappers/*.xml" />
	</bean>
	
	<!-- MariaDB -->
	<!-- SqlSession setup for MyBatis Database Layer -->
	<bean id="sqlSession-gnss" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource-gnss" />
		<property name="configLocation" value="classpath:/egovframework/sqlmap/sql-mapper-config.xml" />
		<property name="mapperLocations" value="classpath:/egovframework/sqlmap/gnss/mappers/*.xml" />
	</bean>
    
	<!-- 전체 범위 ->
	<!-- MapperConfigurer setup for MyBatis Database Layer with @Mapper("deptMapper") in DeptMapper Interface -->
 	<bean class="egovframework.rte.psl.dataaccess.mapper.MapperConfigurer">
		<property name="basePackage" value="kr.go.jeju.jsgm" />
	</bean>
    
</beans>

 

 

 

 

 

4. sqlmap 관련 폴더 추가 및 xml 추가

 

sqlmap 하위 폴더를 디비별로 나누었다.

gnss라고 되어있는 부분이 MariaDB라고 보면 된다.

 

 

 

 

 

 

 

폴더를 생성했으면 test.xml 파일도 생성해야한다.

test.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="gnss.mappers.gnssTest">

 

 

 

 

 

5. GnssAbstractMapper클래스 추가 

 

common패키지 하위에  GnssAbstractMapper.java 클래스 파일을 생성함

 

@Repository("mapper-gnss")

을 제대로 설정해주기!

 

Postgresql도 @Resource 부분만 다르고 코드는 같다.

 

package kr.go.jeju.jsgm.common.service;

import java.lang.reflect.Field;

@Repository("mapper-gnss")
public class GnssAbstractMapper extends EgovAbstractMapper{

	@Resource(name = "sqlSession-gnss")
    public void setSqlSessionFactory(SqlSessionFactory sqlSession) {
    	super.setSqlSessionFactory(sqlSession);
    }
    
    public String getQuery(String queryId, Object obj) throws Exception{
		BoundSql boundSql = getSqlSession().getConfiguration().getMappedStatement(queryId).getSqlSource().getBoundSql(obj);
		String sql = boundSql.getSql();
		
		Object paramObj = boundSql.getParameterObject();

		if(paramObj == null){
			sql=sql.replaceFirst("\\?", "''");
		}else{           

			if(paramObj instanceof Integer 
					|| paramObj instanceof Long
					|| paramObj instanceof Float
					|| paramObj instanceof Double){
				
				sql=sql.replaceFirst("\\?", paramObj.toString());
				
			}else if(paramObj instanceof String){
				sql=sql.replaceFirst("\\?", "'" + paramObj + "'");
			}else if(paramObj instanceof Map){
				List<ParameterMapping> paramMapping = boundSql.getParameterMappings();
				
				for(ParameterMapping mapping : paramMapping){
					String propValue = mapping.getProperty();       
					Object value = ((Map<?, ?>)paramObj).get(propValue);
					
					if(value instanceof String){
						sql=sql.replaceFirst("\\?", "'" + value + "'");
					}else{
						sql=sql.replaceFirst("\\?", value.toString());
					}
					
				}
			}else{
				List<ParameterMapping> paramMapping = boundSql.getParameterMappings();
				
				Class<? extends Object> paramClass = paramObj.getClass();
				
				for(ParameterMapping mapping : paramMapping){
					
					String propValue = mapping.getProperty();       
					Field field = paramClass.getDeclaredField(propValue);
					field.setAccessible(true);
					
					Class<?> javaType = mapping.getJavaType();
					if(String.class == javaType){
						sql=sql.replaceFirst("\\?", "'" + field.get(paramObj) + "'");
					}else{
						sql=sql.replaceFirst("\\?", field.get(paramObj).toString());
					}
				}
			}
			
		}
		sql = sql.replace("\t", "");
		sql = sql.replace("\n", " ");
		System.out.println(sql);
		return sql;
	}
}

 

 

 

 

Ref.

https://kwongas.tistory.com/entry/egov-%EB%8B%A4%EC%A4%91-DB-%EC%84%A4%EC%A0%95-DB-2%EA%B0%9C-%EC%9D%B4%EC%83%81-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0

 

#egov - 다중 DB 설정 DB 2개 이상 설정하기

이번 주제는 EgovFramework 전자 정부 프레임워크에서 Database mysql, oracle, maria, 등등 여러 Database server에 접속하는 방법을 알아보겠습니다! 저는 virtuoso라는 Database와 mysql Database 2개를 연동..

kwongas.tistory.com

https://dog-developers.tistory.com/19

 

Spring Framework JDBC 환경설정

Spring Framework JDBC 환경설정 학습 목표 DB설정 및 JDBC Driver 설치 Spring JDBC 설치 및 DataSource 설정 사용자관리 프로젝트 테스트 1.DB설정 및 JDBC Driver 설치 1-1 MySQL 다운 및 설치 https://dog-de..

dog-developers.tistory.com

 

'Spring' 카테고리의 다른 글

취약점 점검 오류 수정 | Sparrow  (0) 2023.01.10
[mybatis] if 조건문 사용하기  (0) 2022.09.14
이클립스 target파일 제외하기  (0) 2022.04.21
mybatis에서 selectKey 사용해보기  (0) 2022.04.04
AJAX 통신 사용해보기  (0) 2022.04.04
댓글