본문 바로가기

전자정부표준프레임워크(eGovFrame)

[eGovFrame] MariaDB 연결

개발환경: 전자정부표준프레임워크(eGovFrame) 3.10.0

 

목표: 이름 입력시 이메일을 조회해오는 테스트 페이지 만들기

 

1. pom.xml에 주석 처리되어있는 아래 dependency를 주석 해제한다.

<dependency>
	<groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.31</version>
</dependency>

 

2. pom.xml에 아래 내용을 추가한다.

<!-- MariaDB 연동을 위해 아래 dependency 추가 -->
<dependency>
	<groupId>org.mariadb.jdbc</groupId>
	<artifactId>mariadb-java-client</artifactId>
	<version>2.4.1</version>
</dependency>
		
<dependency>
	<groupId>commons-dbcp</groupId>
	<artifactId>commons-dbcp</artifactId>
	<version>1.4</version>
</dependency>

 

3. 프로젝트 폴더 내 패키지 생성

- resources 밑으로 egovframework/spring 패키지 생성.

- resources 밑으로 mappers/dbTest 패키지 생성.

- com.basic.eGovFrame 밑으로 dao, service/impl 패키지 생성.

프로젝트 구조

 

4. /resources/egovframework/spring 경로에 context-mapper.xml 파일 생성한 후 아래 내용을 입력.

- mapperLocations 의 value값에 classpath:/mappers/**/*.xml 로 입력하면 mappers/모든패키지/모든파일명.xml에 해당하는 파일은 모두 xml파일로 읽어들인다는 뜻이다.

<?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">
	
	<bean class="egovframework.rte.psl.dataaccess.mapper.MapperConfigurer">
		<property name="basePackage" value="com.research.eGovFrame" />
	</bean>
	
	<!-- mybatis SqlSessionFactoryBean -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- DB 접속을 위한 설정 -->
		<property name="dataSource" ref="dataSource" />
		<!-- query가 있는 xml파일 위치 -->
		<property name="mapperLocations" value="classpath:/mappers/**/*.xml" />
	</bean>

	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
		<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg>
	</bean>
    
</beans>

 

5. /resources/egovframework/spring 경로에 context-datasource.xml파일 생성 후 아래 내용을 입력.

- url의 value에 'jdbc:mariadb://ip주소:3306/DB명'을 입력한다. ex) jdbc:mariadb://localhost:3306/egovframe

- username에 아이디를 입력한다.

- password에 비밀번호를 입력한다.

<?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">
	
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="org.mariadb.jdbc.Driver"/>
        <property name="url" value="jdbc:mariadb://ip주소:3306/DB명" />
        <property name="username" value="아이디"/>
        <property name="password" value="비밀번호"/>
    </bean>
    
</beans>

 

6. /resource/mappers/dbTest 경로에 xml파일을 생성한 후 테스트할 쿼리를 입력한다.

- namespace는 dao에서 호출할 xml파일의 주소이다.

- id는 쿼리문을 찾을 주소.

- 파라미터를 map형식으로, return타입을 string으로 하겠다는 의미.

- #{name}은 map형식으로 넘어온 파라미터 중에서 key가 name인 값을 가져다 사용하겠다는 의미이다.

<?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="mappers.dbTest.dbTestMapper">

	<select id="search_email" resultType="String" parameterType="hashMap">
		select email
		from tb_users
		where name = #{name}
	</select>

</mapper>

 

7. /webapp/WEB-INF/jsp/dbTest.jsp 생성

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html5>
<html lang="ko">
<head>
	<title>Home</title>
	<script src="https://code.jquery.com/jquery-3.6.3.js" integrity="sha256-nQLuAZGRRcILA+6dMBOvcRh5Pe310sBpanc6+QBmyVM=" crossorigin="anonymous"></script>
</head>
<body>

<input id="name" type="text" placeholder="이름을 입력해주세요."/>
<button id="search_email">이메일찾기</button>
<div id="result_email"></div>



<script>
$(document).ready(function() {
	
	$(document).on('click', '#search_email', function() {
		search_email();
	});
	
});

function search_email() {
	
	var params = {};
	
	params.name = $('#name').val();
	
	$.ajax({
	    method: "POST"
	    ,url: "/dbTest/search_email"
	    ,dataType : "json"
	    ,data: JSON.stringify(params)
	    ,contentType: "application/json; charset=UTF-8"
	    ,success: function(data){
	    	
	    	console.log(data);
	    	
	    }
	    ,error : function(jqXHR, textStatus, errorThrown){
	    	
	    	console.log("error...");
	    	
	    }
	});
	
}

</script>

</body>

</html>

 

8. com.basic.eGovFrame.controller.dbTestController.java 생성

package com.basic.eGovFrame.controller;

import java.util.Locale;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.basic.eGovFrame.service.dbTestService;
import com.google.gson.Gson;

@Controller
public class dbTestController {
	
	private static final Logger log = LoggerFactory.getLogger(dbTestController.class);
	
	@Autowired
	private dbTestService dbTestService;
	
	@RequestMapping(value = "/dbTest", method = RequestMethod.GET)
	public ModelAndView home(Locale locale, Model model) {
		ModelAndView mav = new ModelAndView();
		mav.setViewName("jsp/dbTest");
		
		return mav;
	}
	
	@ResponseBody
    @RequestMapping(value = "/dbTest/search_email", method= {RequestMethod.POST}, produces = "application/json; charset=UTF-8")
    public String search_email(@RequestBody Map<String, Object> params, HttpServletRequest req) {
		Gson gson = new Gson();
		String result = "";
		
		try {
			
			result = dbTestService.search_email(params);
			
			params.clear();
			params.put("data", result);
			params.put("status", "000");
			params.put("msg", "성공");
		} catch (Exception e) {
			params.clear();
			params.put("status", "-100");
			params.put("msg", "실패");
		}
		
		return gson.toJson(params);	
	}
	
}

 

9. com.basic.eGovFrame.service.dbTestService.java 생성

package com.basic.eGovFrame.service;

import java.util.Map;

public interface dbTestService {

	public String search_email(Map<String, Object> params);

}

 

10. com.basic.eGovFrame.service.impl.dbTestServiceImpl.java 생성

package com.basic.eGovFrame.service.impl;

import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.basic.eGovFrame.dao.dbTestDao;
import com.basic.eGovFrame.service.dbTestService;

@Service
public class dbTestServiceImpl implements dbTestService{

	@Autowired
	private dbTestDao dbTestDao;
	
	@Override
	public String search_email(Map<String, Object> params) {
		return dbTestDao.search_email(params);
	}

}

 

11. com.basic.eGovFrame.dao.dbTestDao.java 생성

package com.basic.eGovFrame.dao;

import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@Repository
public class dbTestDao {
	
	@Autowired
    private SqlSession SqlSession;
	
	public String search_email(Map<String, Object> params) {
		return SqlSession.selectOne("mappers.dbTest.dbTestMapper.search_email", params);
	}

}

 

12. 테스트

- dbTest.jsp에서 이름을 입력하고 '이메일찾기'를 누르면 db에 있는 email값이 data에 담겨 return된다.

정상적으로 동작한다.

 

+ 본문에서 사용된 테스트db 생성 구문

-- egovframe 데이터베이스 구조 내보내기
CREATE DATABASE IF NOT EXISTS `egovframe` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
USE `egovframe`;

-- 테이블 egovframe.tb_users 구조 내보내기
CREATE TABLE IF NOT EXISTS `tb_users` (
  `users_uid_seq` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL DEFAULT '0' COMMENT '이름',
  `email` varchar(50) NOT NULL DEFAULT '0' COMMENT '이메일주소',
  PRIMARY KEY (`users_uid_seq`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;

-- 테이블 데이터 egovframe.tb_users:~2 rows (대략적) 내보내기
DELETE FROM `tb_users`;
INSERT INTO `tb_users` (`users_uid_seq`, `name`, `email`) VALUES
	(1, '김철수', 'test@naver.com'),
	(2, '김영희', 'test2@gmail.com');

 

※ 본문의 예제 소스

basic_eGovFrame.zip
0.03MB