반응형
<if test="payIngYn == 'Y'">
</if>

또는

<if test="payIngYn.equals('Y')">
</if>

한글자를 IF 문에 넣었더니, 항상 에러가 났다.

Cause: java.lang.NumberFormatException: For input string: "Y"

항상 그냥 다른 방식으로 우회해서 가다가, 아무리 생각해도 이건 말이 안되고 뭔가 방법이 있을 것 같아 찾아보았다. (여기서 기억나는건, 전에 한번 MyBatis 에서 select문을 해왔을 때, 그 값이 Y 였을 때,  JAVA에서 찍어보니 숫자 1 로 찍혀있던 기억이 난다. char를 숫자로 인식하나보다 라는 생각을 했던 기억이난다. 그런데 그 이유는 JAVA의 CHAR형태는 실제로 문자의 코드값을 저장하기 때문이라고 한다.)  

이건, MyBatis 의 문제가 아니고, OGNL(Object Graph Navigation Language)의 문제라고 한다.  MyBatis는 XML element 를 줄이고 다양한 조건을 처리하기 위해서 OGNL 표현 방식을 사용한다. (꿀팁! jsp 에서 주로 사용하는 JSTL 표현식이 OGNL 이기 때문에 이에 익숙한 사람은 MyBatis 조건문에 이를 적용하면 된다!)

반응형

싱클쿼테이션(') 으로 어떤 값을 감싼 경우, 이건 property 가 아니라고 명시해주는거지 '문자열'이라고 명시하는게 아니다. 그러면, 이를 자료형이 아니라 문자열 이라고 MyBatis에게 명시해주기 위해서는 더블쿼테이션(")으로 감싸주어 힌트를 주면된다.

그래서 결론! 해결책!

1. 싱클쿼테이션과 더블쿼테이션 위치를 변경
<if test='payIngYn=="Y"'>

2. 더블쿼테이션을 HTML 코드로 변경
<if test="payIngYn == &quot;Y&quot;">

3. toString() 함수를 이용해 String 형으로 변환
<if test="payIngYn == 'Y'.toString()">

1번을 추천한단다. (대신, 1번을 사용할 경우 == 대신에 equals 함수를 추천한다
반응형
반응형

1. JSP 에서 map 형태로 테이터를 만든다.

var infoMap = {};
var duration = '';
var addr = '';

infoMap = {duration :duration,
            addr :addr};

 

2. JSP 에서 만든 map 을 JSON.strigify() 해준다.

var rotnInfoStr = JSON.stringify(infoMap);

 

3. FormData 에 붙여준다.

var programData = new FormData();
programData.append("keyName", rotnInfoStr);

 

 4. AJAX로 전송

$.ajax({
    headers: {},
    url : 보낼 URL 주소,
    type: 'POST',
    data: programData,
    contentType : 'application/json',
    enctype: 'multipart/form-data',
    dataType : 'json',
    processData: false,
    contentType: false,
    success : function(data) {
       
    },
    error : function(data){
        
    }
})

 

이제!!! Controller 단!!!

반응형

5. codehaus 를 이용해 Parsing 했당 (google 에서 제공하는 simple-json 을 사용해봤는데, 전자정부프레임워크를 사용해서 인지, 인식을 못하더라 그래서 codehaus를 이용함)

import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;


@RequestMapping(value = 받는 URL 주소 , method = RequestMethod.POST)
@ResponseBody
public HashMap<String, Object> getFormDataTest(@RequestParam HashMap<String, Object> paramMap, MultipartHttpServletRequest request) {
    HashMap<String, Object> resultMap = new HashMap<String, Object>();
    if(paramMap != null) {
        String rotnMapString = paramMap.get("아까 적은 key 값").toString();
					
        try {
            ObjectMapper mapper = new ObjectMapper();
            resultMap = mapper.readValue(jsonString, new TypeReference<HashMap<String, Object>>() {});
        } catch (IOException e) {
            resultMap.put("isSuccess", isSuccess);
            resultMap.put("errorCode", "PARSING_ERROR");
            LOGGER.error("error occuring during parsing string to map in getMapFromString method. IOException error msg:{}", e.toString());
        }
    }
    return resultMap;
}

그러면 알아서 map 으로 잘 인식한다!!!!!

반응형
반응형

Interceptor.java

public class Interceptor extends HandlerInterceptorAdapter{
	
	private final static Logger LOGGER = LoggerFactory.getLogger(Interceptor.class);
	
	@Autowired
	AccessHistoryService accessHistoryService;
	
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
		
		HttpSession session = request.getSession();
		String ipAddress = Utils.getClientIp(request);
		
    	String prevURI = "";
    	
		if( request.getRequestURI() != null ) {
			if( session != null && session.getAttribute("prevURI") != null ) {
				LOGGER.debug("prev session:"+session.getAttribute("prevURI"));
				prevURI = session.getAttribute("prevURI").toString();
				if( request.getQueryString() != null ) prevURI += "?"+request.getQueryString();
				session.setAttribute("prevPrevURI", prevURI);
			}
			prevURI = request.getRequestURI();
			session.setAttribute("prevURI", prevURI);
			LOGGER.debug("URI =========================="+prevURI);
		}
		
		LOGGER.debug("preHandle =prevURI:"+prevURI);
        
		// 디바이스 종류
		String dvcType = "Desktop";
		if(request.getHeader("User-Agent") != null && request.getHeader("User-Agent").toUpperCase().indexOf("MOBILE") > 0 ) dvcType = "Mobile";
		
        // 접속한 브라우저 종류 가져오기
		String brwsType = Utils.getAccBrowserType(request);
		
		
		HashMap <String,Object> accHisMap = new HashMap<String, Object>();
		accHisMap.put("atryMbrId", "");						// 접속회원아이디
		accHisMap.put("cntnIpAddr", ipAddress);				// ip주소
		accHisMap.put("accUrlAddr", prevURI);				// uri 주소
		accHisMap.put("accPrmt", request.getQueryString());	// 접근 파라미터
		accHisMap.put("dvcType", dvcType);					// 디바이스 종류
		accHisMap.put("brwsType", brwsType);				// 브라우저 종류
		
        // 쿼리에 입력
		int res = accessHistoryService.insertAccessHistory(accHisMap);
		LOGGER.debug("acc history result:"+res);
	
		return true;
	}
	
	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		// TODO Auto-generated method stub
		super.postHandle(request, response, handler, modelAndView);
	}
	
}
반응형

context-properties.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:beans="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:security="http://www.springframework.org/schema/security"
	xmlns:util="http://www.springframework.org/schema/util"
	xmlns:task="http://www.springframework.org/schema/task"
	xsi:schemaLocation="http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
		http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.3.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">
	
	<beans:bean name="propertiesService" class="egovframework.rte.fdl.property.impl.EgovPropertyServiceImpl" destroy-method="destroy">
		<beans:property name="properties">
	        <beans:map>
	        	<beans:entry key="pageUnit" value="10"/>
	        	<beans:entry key="pageSize" value="10"/>
	        </beans:map>
		</beans:property>
	</beans:bean>
	
	
	<!-- <util:properties id="server" location="/WEB-INF/properties/server.properties"/> -->
	<beans:bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<beans:property name="locations">
        	<beans:list>
       			<beans:value>/WEB-INF/properties/server.properties</beans:value> 
        	</beans:list>
        </beans:property>
		
	</beans:bean>
	
	<util:properties id="server" location="/WEB-INF/properties/server.properties"/>
	
    
    <!-- interceptor 설정 부분 -->
	<interceptors>
		<interceptor>
			<mapping path="/**"/>
			<exclude-mapping path="/resources/**"/>
			<beans:bean id="commonInterceptor" class="com.kyobo.kdkb.common.interceptor.Interceptor">
			</beans:bean>
		</interceptor>
	</interceptors>
		
</beans:beans>

 

끄읏

반응형
반응형

환경: 전자정부프레임워크 (egov) , spring 4.3 version 을 사용

 

 

 

 

 

여기에서 공통 메세지를 관리하는 메세지들이 설정되어있음. 그

걸 사용하기 위해서는 아래와 같이 context-common.xml 의 bean 에 추가해줘야한다.

 

 

 

 

 

위와같이, messageSource로 message-common 이라는 파일을 모두 사용하겠다라고 넣어준다.

그 후에, jsp 에서 

 

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>

 

추가해준다,

 spring 이라는 prefix로 사용할 수 있다.

 

나는 메세지를 아래와 같이 설정해두었다.

{0} 은, 0번째의 값을 파라미터로 갖겠다 라는 의미이다. 

이렇게 해두니, 알아서 arguments에 넣어둔 '학생을 추가하는' 이라는 파라미터가 들어가서 에러메시지가 뜬 것을 확인 할 수 있다.

만약, 파라미터를 여러개 받고싶다! 하면, {0} {1} {2} 이렇게 사용해서 메시지를 설정한 다음 

호출 할 때, arguments='파라미터1, 파라미터2' 이렇게 넣으면 알아서 잘 호출된다!

 


하지만, 파라미터 받아서 쓰는 것은 권장하지 않는다고한다.
왜? 다국어 지원해야할때는 파라미터로 받아온 단어들도 어차피 다시 정의를 해줘야하기 때문이다.
반응형
반응형

1. spring 에서 프로젝트 생성

File > New > Spring Starter Project
프로젝트 기본 설정
의존성 선택

 

-Spring Boot DevTools: 스프링 부트에서 제공하는 개발 편의를 위한 모듈 >> 변경된 코드를 서버 또는 화면에 신속하게 반영해 결과를 확인하기 위해서 사용
-MyBatis Framework:  JDBC로 처리하는 상당 부분의 코드와 파라미터 설정, 결과 매핑을 대신해줌.
-Spring Web:  웹개발에 필요한 종속된 의존성 디스크립터들의 집합 >> webmvc, tomcat, logging

spring 프로젝트 생성 완료

2. vue 프로젝트 생성

cmd 창에서 좀전에 생성한 spring project 경로로 들어가 

여기서 알아둘 점은, 이 경로에 생성해도 괜찮지만 어차피 따로 build 를 해서 배포를 할 것이기 때문에 다른 경로에 생성해서 server로 연결해주면 그만이다!

vue creat 프로젝트명 

명령어를 사용하여 프로젝트를 생성해준다. 나는 개인적으로 나중에 라이브러리를 깔기 싫어서 manually 를 선택하여 아래와 같은 옵션들을 넣었다.

프로젝트 생성 완료

반응형

3. vue.config.js 설정

이제, axios 를 이용해서 backend server로 접근하기위해서 vue.config.js 에 설정을 넣어주어야한다. 

const { defineConfig } = require("@vue/cli-service");
module.exports = defineConfig({
  transpileDependencies: true,
  devServer: {
	port: 8081,	// 접속 포트 변경
	proxy: {
		"/api":{
			target: "http://localhost:8080",
			changeOrigin: true,
			pathRewrite: {
				'^/api': ''
			}
		}
	}, // devServer: back-end 내장 was의 주소를 작성하게 되면 된다.
}

});

여기서 backend 의 서버는 8080 포트로 돌릴꺼고 frontend의 서버는 8081로 돌릴꺼라는 설정을 이런식으로 넣어주면 된다. 그러면 axios 에서 url에 /api/원하는 url (backend 에서 지정할) 해주면 끄읏

반응형
반응형

eGov 프레임워크를 사용하면서 spring security 를 사용해보고있다. 그 과정에서 마주친 오류!

403에러:   Could not verify the provided CSRF token because your session was not found.    

무슨 에러인지 몰라서..... 다른 곳에서 에러를 마구 찾다가..... 함께 공부하고 있는 동료한테 물어봐서 해결했다... 

 

해결방법은 아주 간단!

form 태그안에 아래와 같은 input 을 넣어주면된다.

<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />

그러면 에러없이 끄읏!!

 

https://docs.spring.io/spring-security/reference/features/exploits/csrf.html

CSRF(Cross Stie Request Forgery)가 뭔지 알고 싶다면, 

은행사이트에 로그인하여 사이트를 이용하고 로그아웃을 안한 상태에서 다른 사이트에 접속했다고 가정하자. 그 다른 사이트에서 HTTP request를 통해서 우리 컴퓨터나 연동되어있는 은행의 cookies를 가져오는 form태그를 숨겨서 버튼 이벤트에 그 정보를 보내주는 걸어뒀을 수도 있다. 그걸 CSRF Attack 이라고 부른다.

그걸 막기위해 token 을 주어 그 사이트의 고유의 토큰을 가지고 있을 경우에만 form태그가 발동할 수 있게 지정해주는 작업을 넣어주는거다.

반응형

 

반응형
반응형

STS 를 다시 깔고 시작할때 자주 겪은 로딩이라 기록해둔다.

특히 java 파일에서 수정을 하고 저장을 누르면 화면이 멈추면서 아무것도 누를 수 없게 로딩이 걸린다. 그러고 로딩이 풀리고 아래의 process 를 뭐하고있나 보면, building, validating 을 진행하고있다... 

매번 수정을 할 때마다 building, validating 을 멈추게 하고 싶으면!!

첫번째, validation 끄기

window > preferences > Validation

Build 부분에 체크를 모두 disable 시켜준다.

두번째, 자동으로 매번 building 끄기

Project > Build Automatically 의 체크를 없애준다.

참고로, 바로 적용되는게 아니라 STS 를 껐다 켜줘야한다!!! 그러면 세상 살 것처럼 빨라진 걸 느낄 것 이다!

반응형

 

반응형
반응형

전자정부 표준프레임워크를 다운로드 하고 환경설정! 은 아래링크 글에서 설명했다.

https://minah-workmemory.tistory.com/21

 

eGov(전자정부 표준프레임워크) 3.10.0 시작하기

공식사이트 주소: https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:dev3.10:gettingstarted 0. 개발 환경 정보 OS - Windows 10, 7 이상 JDK - Java SE SDK 7.0 이상 IDE -  Eclipse 4.16.0 / JDK..

minah-workmemory.tistory.com

전자정부 표준프레임워크 공식 사이트 spring security architecture:

https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte:fdl:server_security:architecture 

전자정부 개발프레임워크의 Server Security는 컨테이너 기동시 적용되는 XML 기반 인증이 아닌 실시간 적용되는 DB기반의 JDBC 인증을 사용한다.

1. spring security 의존성 추가

※참고로 나는 Maven 프로젝트이다!!!!!

Spring Security 공식사이트:https://docs.spring.io/spring-security/site/docs/4.2.13.RELEASE/reference/htmlsingle/#maven

 pom.xml  

 상단에 <properties> 태그안에 <security.version> ... 추가 + 아래의 dependency를 추가

<properties>
    <spring.maven.artifact.version>4.3.25.RELEASE</spring.maven.artifact.version>
    <egovframework.rte.version>3.10.0</egovframework.rte.version>
    <security.version>4.2.3.RELEASE</security.version>
</properties>

<!-- ... other repository ... -->

<dependencies>
<!-- ... other dependency elements ... -->
	<dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-core</artifactId>
        <version>${security.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-web</artifactId>
        <version>${security.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-config</artifactId>
        <version>${security.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-taglibs</artifactId>
        <version>${security.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-test</artifactId>
        <version>${security.version}</version>
    </dependency>
</dependencies>

 

 web.xml   src/main/webapp/WEB-INF/web.xml

<!--보안 절차를 위해서는 모든 요청이 spring security 필터를 걸쳐가도록 함-->
<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
  <filter-name>springSecurityFilterChain</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>


<!--spring 폴더안에 context- 로 시작하는 xml을 읽을 수 있게  -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:egovframework/spring/context-*.xml</param-value>
</context-param>

 

context-security.xml  파일 추가  src/main/resources/egovframework/spring/context-security.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
	xmlns:beans="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">


	<http auto-config="true" use-expressions="false">
  		<intercept-url pattern="/**" access="ROLE_ADMIN" />
	</http>
	
	<authentication-manager>
	  <authentication-provider>
	    <user-service>
	      <user name="admin" password="admin" authorities="ROLE_ADMIN"/>
	      <user name="user" password="user" authorities="ROLE_USER"/>
	    </user-service>
	  </authentication-provider>
	</authentication-manager>
</beans:beans>

 

※ filter 를 추가한 후에,  maven > update project 를 한 후에 서버를 실행해서 화면을 보면 아래와 같이 나오는걸 확인할 수 있다. (기본으로 spring security 에서 제공하는 화면)

intercept-url 에서 모든 /** url 은 "ROLE_ADMIN"만 접근 할 수 있게 해놨기 때문에, user로 로그인하면 아래와 같은 승인을 거부했다는 화면이 뜬다.

※ Spring Security 버전 4 이후 부터는 모든 비밀번호는 암호화를 해야한 사용이 가능하다고 하니 만약 로그인이 안된다면, password="{noop}user" 이런색으로 {noop} 을 넣어주자 -> 암호화를 사용하지 않겠다는 의미

2. MyBatis를 이용하여 DB연동

xml 에 계정과 비밀번호를 직접 등록하지 않고, DB속에서 계정정보를 조회하여 로그인하는 방법을 구현해보자.

전자정부 표준프레임워크 공식사이트 MyBatis 적용 가이드 : 

https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte2:psl:dataaccess:mybatisguide 

mybatis-spring 연동: http://mybatis.org/spring/getting-started.html

pom.xml 버전 변경 & 의존성 추가

 <!-- mysql이나 oracle DB 사용시 아래 설정 추가 -->
<dependency>
    <groupId>com.googlecode.log4jdbc</groupId>
    <artifactId>log4jdbc</artifactId>
    <version>1.2</version>
    <exclusions>
        <exclusion>
            <artifactId>slf4j-api</artifactId>
            <groupId>org.slf4j</groupId>
        </exclusion>
    </exclusions>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client -->
<dependency>
    <groupId>org.mariadb.jdbc</groupId>
    <artifactId>mariadb-java-client</artifactId>
    <version>2.7.2</version>
</dependency>

<dependency>
    <groupId>commons-dbcp</groupId>
    <artifactId>commons-dbcp</artifactId>
    <version>1.4</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.31</version>
</dependency>
<!-- mybatis -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.2.4</version>
</dependency>
<!-- mybatis-spring -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>1.2.1</version>
</dependency>
<!-- SQL 로그를 보기 위한 라이브러리 -->
<dependency>
    <groupId>org.bgee.log4jdbc-log4j2</groupId>
    <artifactId>log4jdbc-log4j2-jdbc4</artifactId>
    <version>1.16</version>
</dependency>

mariaDB 를 사용할 것 이기 때문에 mariaDB 의 의존성이 추가되어있음

context-mapper.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">

	<!-- SqlSession setup for MyBatis Database Layer -->
	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<!-- vo bean에 저장해두기 위한 property -->
		<!-- <property name="configLocation" value="classpath:/egovframework/sqlmap/config/sql-mapper-config.xml" /> -->
		<property name="mapperLocations" value="classpath:/egovframework/sqlmap/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="egovframework.example.sample.service.impl" />
	</bean>
	
</beans>

이미 생성되어있는 내용이다. 

mybatis 를 사용할때 Mapper에 대한 정의들을 넣어두는 파일이다. 설명을 조금 붙이자면, 나는 VO를 따로 지정해서 하지않고 HashMap으로 데이터를 받아올 예정이라 propery name="configLocation"을 주석처리했다. 하지만 VO를 지정해서 사용하고 싶다면, sqlmap/config 폴더를 생성해서 아래와 같이 지정해 두면된다!

<?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>
    
    <typeAliases>
    	<typeAlias alias="empVO" type="egovframework.sample.emp.service.EmpVO" />
    	<typeAlias alias="deptVO" type="egovframework.sample.dept.service.DeptVO" />
    	<typeAlias alias="searchVO" type="egovframework.sample.common.SearchVO" />
    </typeAliases>
 
</configuration>

 

name="mapperLocations" 는 말그대로 실제로 실행될 쿼리들을 모아둔 xml파일들의 디렉토리를 지정해둔것이다. 맨 아래의 name="basePackage"는 위에 설명처럼 @Mapper 어노테이션을 가진 인터페이스의 자바 파일 디렉토리를 지정해둔것이다. mapperLocations 에 지정해 둔 것 처럼 sqlmap 폴더안에 mappers 폴더를 생성했다.

DB 생성

HeidiSQL (mariaDB) 에 데이터베이스 생성 (생성했다는 가정하에 진행하겠다. 참고는 아래 링크를 이용!): 

https://minah-workmemory.tistory.com/22?category=1000459 

 

HeidiSQL 에서 데이터베이스 생성, 테이블 생성

HeidiSQL (mariaDB) root로 접속한 후, 생성한 데이터베이스를 새로운 session 에 넣어주자. '사용자' 에는 아이디를 '암호'에는 비밀번호를 설정한 대로 넣어준다. 그러면 데이터베이스 쪽에 삼각형을 누

minah-workmemory.tistory.com

 

context-datasource.xml   에 hsql 이 있던 것을 넣어준다. 물론 본인의 DB 정보를 넣어줌.

(테스트 실행용은 주석처리!)

※ 나는 log4jdbc를 사용하고 싶어서 driverClassName 에 mariadb가 아닌거다. 만약 그렇지 않으면 driverClassName 에 "com.maradb.jdbc.Driver" 을 넣어주면 된다.

 

그 다음 글에서 Controller, Mapper, Service, ServiceImpl, DAO, VO 등을 생성해서 연결해보자!

반응형

 

반응형

+ Recent posts