티스토리 뷰
- 전자정부 프레임워크 이클립스 사용
- 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://dog-developers.tistory.com/19
'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 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Centos7에서 Postgresql12 설치
- Postgis
- svn프로젝트불러오기
- 리눅스폐쇄망
- getRow
- apachepoi
- createRow
- 폐쇄망에서rpm설치
- shp2pgsql
- mybatisif
- 공간데이터
- su postgres 안됨
- Some resources were not updated.
- yumrepository
- Geoserver
- 인터넷안되는환경에서설치
- 공간데이터병합
- OpenLayers
- jdbcType
- postgis 설치
- 리눅스
- setForceFormulaRecalculation
- 부하측정
- yumdownloader
- 폐쇄망에서패키지설치
- SVN
- Postgresql12
- getCell
- 엑셀POI
- CreateCell
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함