본문 바로가기

웹/Back-end

[Spring Legacy] 개발환경 구축하기 - ④ DB연동, MyBatis연동

먼저 DB가 깔려있어야 스프링에 DB연동 작업을 진행할 수 있다.

 

DB에는 오라클, MySQL, 마리아DB 등 종류가 다양한데, 이번엔 오라클 DB를 설치하고 스프링에 연동하도록 하겠다.

 

[Database] 마리아 DB ? 오라클 ? Mysql ?

오늘은 Database 차이에 대해서 간단히 정리해보겠습니다. 1. 마리아 DB 마리아DB는 오픈소스 데이터베이스입니다. 마리아DB는 관계형 데이터베이스의 초기 개발자 일부가 참여하여 Mysql의 

letitkang.tistory.com

 

최신 오라클 XE는 18c인데 설치 작업에 참고할만한 자료가 아직 많지 않아 

예전 버전인 Oracle XE(Express Edition)11g로 다운받아 설치했다. 

 

(최신 버전을 한 번 다운받았다가, 설치가 원할히 되지 않아 

다시 구버전으로 재설치하는 과정에서 생겼던 문제들이 있어서 정리해두었으니 ☞여기서 참고)

 

 

 

스프링 프로젝트에서 변하지 않는 상수값이나 DB접속정보 등은 properties 파일에 두고

xml이나 java파일에서 읽고 사용한다. 

따라서, 1) 먼저 properties 파일을 생성해주고,

2) root-context.xml에서 property-placeholder를 작성해준다. 


1) src/main/resources에 db.properties 파일을 생성

 

db.properties에 작성할 내용 오라클 DB정보이다(아래 참고).

url 경로listener.ora파일을 참고해서 작성하면 된다. 

출처: 오라클 Listener 버전 및 url, 포트번호 확인

 

 

 

2) root-context.xml에서 property-placeholder 작성

PropertyPlaceholderConfigurer에 property의 이름과 경로를 지정해주고,

db.properties의 설정 값을 읽을 수 있도록 DataSource를 등록해준다.

 

<?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 https://www.springframework.org/schema/beans/spring-beans.xsd">
	
	<!-- Root Context: defines shared resources visible to all other web components -->
	
	<!-- db.properties 읽어오기 -->
 	<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="location">
			<value>classpath:db.properties</value>
		</property>
	</bean>
	
	<!-- db.properties의 설정 값을 읽어서 setting -->
 	<bean id="dataSource"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="${driver}" />
		<property name="url" value="${url}" />
		<property name="username" value="${user}" />
		<property name="password" value="${password}" />
	</bean>

 

root-context.xml에서 properties에 등록된 변수를 사용할 때는 위와 같이 ${변수명}의 형식으로 사용하고, 

 

java 파일에서 properties에 등록된 변수를 사용할 경우에는

Value어노테이션을 사용한다.

@Value("${db.username}") 

private String dbUser;

 

 

 

 

MyBatis연동

MyBatis는 SQL매핑 프레임워크이다. JDBC의 지루한 작업을 피하는 용도로 사용.

 

출처: https://shlee0882.tistory.com/205

 

1) pom.xml 에 라이브러리 추가

 

		<!-- Mybatis -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.4.6</version>
		</dependency>
		
		<!-- Mybatis-Spring -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.3.0</version>
		</dependency>
		
		<!-- spring-jdbc 추가 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>

 

 

2) root-context.xml에 SQLSessionFactory 추가

 

MyBatis의 핵심 객체인 SQLSession, SQLSessionFactory를 사용하기 위한 설정.

SQLSessionFactory는 내부적으로 SQLSession을 만들어내는 존재이고,

SQLSession은 개발 시, DB와 Connection을 생성하거나 원하는 SQL을 전달하고, 결과를 리턴받을 수 있게 하는 객체이다. 

 

MyBatis 사용을 위한 SQLSessionFactory  커넥션을 추가한다.

	<!-- sqlSessionFactory -->
 	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="configLocation" value="classpath:mybatis-config.xml" />
	</bean>
 
	<!-- sqlSession -->
 	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
		<constructor-arg index="0" name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>

 

 

3) resources폴더 아래  mybatis-config.xml파일을 추가한다.

 

<?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>
	<settings>
		<setting name="jdbcTypeForNull" value="NULL" />
	</settings>
	<typeAliases>
		<typeAlias type="com.hpark3.mcdelivery.vo.MemberVO" alias="memberVO"/>

	</typeAliases>
	<mappers>
		<mapper resource="mapper/memberMapper.xml" />

	</mappers>
</configuration>

 

 

4) Namespaces 설정

 

예전에 프로젝트 진행시에는 하지 않았던 작업인데

온라인 상에서 충돌방지 설정을 위한 거라고 써있길래 이번에는 추가해주었다.

 

 

5) VO 생성

 

VO는 DB의 정보를 객체화시키는 용도이다.

앞서 설치했던 lombok라이브러리를 활용하여 매우 간단하게 작성할 수 있다.

 

@Data 어노테이션은 Getter, Setter, RequiredArgsConstructor, ToString, EqualsAndHashCode를 한번에 설정해준다.

package com.hpark3.mcdelivery.vo;

import lombok.Data;

@Data
public class MemberVO {

	// DB에 등록된 칼럼
	private String userid;
	private String userpwd;
}

 

 

6) Board-Mapper.xml 작성

 

DAO와 연동하기 위한 SQL 쿼리문을 작성해준다.

<?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="com.hpark3.mcdelivery.dao.MemberMapper">
	<insert id="signup" parameterType="memberVO">
		insert into
			MEMBER
		values(
			#{userid},
			#{userpwd}
		)
	</insert>
	
	<select id="login" parameterType="memberVO" resultType="memberVO">
		select *
		from
			MEMBER
		where
			userid = #{userid}
			and userpwd = #{userpwd}
	</select>
	
	<select id="checkid" parameterType="string" resultType="int">
		SELECT
			COUNT(*)
		FROM
			member
		WHERE
			userid = #{userid}
	</select>
</mapper>

 

 

7) DAO 작성

 

MemberMapper.java

package com.hpark3.mcdelivery.dao;

import com.hpark3.mcdelivery.vo.MemberVO;

public interface MemberMapper {
	public int signup(MemberVO vo);
	public MemberVO login(MemberVO vo);
	public int checkid(String userid);
}

 

MemberDAO.java

package com.hpark3.mcdelivery.dao;

import javax.servlet.http.HttpSession;

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

import com.hpark3.mcdelivery.vo.MemberVO;

@Repository
public class MemberDAO {
	
	@Autowired
	private SqlSession sqlSession;
	
	//회원가입
	public boolean signup(MemberVO vo) {
		try {
			MemberMapper mapper = sqlSession.getMapper(MemberMapper.class);
			if(mapper.signup(vo) != 0) return true;
		}catch(Exception e) {
			e.printStackTrace();
		}
		return false;
	}
	
	// 로그인
	public boolean login(MemberVO vo, HttpSession session) {
		try {
			MemberMapper mapper = sqlSession.getMapper(MemberMapper.class);
			if(mapper.login(vo) != null) {
				session.setAttribute("userid", vo.getUserid());
				return true;
			}
		}catch(Exception e) {
			e.printStackTrace();
		}
		return false;
	}
	
	// 로그아웃
	public boolean logout(HttpSession session) {
		session.invalidate();
		return true;
	}
	
	// ID 중복확인
	public int checkid(String userid) {
		int result = 0;
		try {
			MemberMapper mapper = sqlSession.getMapper(MemberMapper.class);
			result = mapper.checkid(userid);
		}catch(Exception e) {
			e.printStackTrace();
		}
		return result;
	}	
}

 

 

 

 

Mybatis 를 사용하는 데이터 액세스 계층 흐름도

 

 

 

 

 

 

참고자료

https://velog.io/@emawlrdl/Spring-project-%EC%A0%9C%EC%9E%91-%EA%B3%BC%EC%A0%95-8yk5n8bogp

 

Spring project 제작 과정 ( CRUD 기능구현 예제)

먼저 개발 환경을 설치하여야 한다. 툴 : Spring Tool Suite 3.9.5 (이클립스) -> 이클립스 상단매뉴 Help -> MarketPlace -> STS 설치.. WAS(Web Application Server) = 아파치 톰캣 was에 대한 설명 참조 : https://gmlwjd9405.gi

velog.io

https://ktko.tistory.com/entry/Spring-properties-%EC%9D%BD%EC%96%B4%EC%98%A4%EA%B8%B0

 

[스프링/Spring] properties 읽어오기

properties 읽어오기(3가지) 1) PropertyPlaceholderConfigurer를 이용한 properties 파일 읽어오기 2) context:property-placeholder를 이용한 properties 파일 읽어오기 3) 와 Spring EL을 이용한 properties..

ktko.tistory.com

https://twofootdog.github.io/Spring-Spring-MVC%EC%97%90%EC%84%9C-properties-%ED%8C%8C%EC%9D%BC%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0/

 

[Spring]Spring MVC에서 properties 파일을 이용하여 설정하기 | 두발로걷는개

Spring MVC 프로젝트에서 properties 파일을 이용하여 설정하기

twofootdog.github.io

http://wiki.gurubee.net/pages/viewpage.action?pageId=12714036 

 

03.listener.ora, tnsnames.ora 샘플 - [정리]웹개발 강좌정리 - 개발자, DBA가 함께 만들어가는 구루비 지

 

wiki.gurubee.net