목표: 이름 입력시 이메일을 조회해오는 테스트 페이지 만들기
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');
※ 본문의 예제 소스
'전자정부표준프레임워크(eGovFrame)' 카테고리의 다른 글
[eGovFrame] log4j, log4jdbc-log4j2 설정 (1) | 2023.01.17 |
---|---|
[eGovFrame] 설치/새 프로젝트 만들기/실행 (0) | 2023.01.12 |