먼저 DB가 깔려있어야 스프링에 DB연동 작업을 진행할 수 있다.
DB에는 오라클, MySQL, 마리아DB 등 종류가 다양한데, 이번엔 오라클 DB를 설치하고 스프링에 연동하도록 하겠다.
최신 오라클 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파일을 참고해서 작성하면 된다.
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의 지루한 작업을 피하는 용도로 사용.
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;
}
}
참고자료
https://velog.io/@emawlrdl/Spring-project-%EC%A0%9C%EC%9E%91-%EA%B3%BC%EC%A0%95-8yk5n8bogp
https://ktko.tistory.com/entry/Spring-properties-%EC%9D%BD%EC%96%B4%EC%98%A4%EA%B8%B0
http://wiki.gurubee.net/pages/viewpage.action?pageId=12714036
'웹 > Back-end' 카테고리의 다른 글
[Spring-Eclipse] 스프링, 이클립스 사용 팁/문제해결 (0) | 2021.06.16 |
---|---|
[DB] 오라클 DB 설치 오류 해결 및 삭제 (0) | 2021.06.13 |
[Spring] 스프링의 주요 특징 - POJO, 의존성주입, AOP (0) | 2021.06.11 |
[Spring Legacy] 개발환경 구축하기 - ③ xml 파일 설정 (0) | 2021.06.09 |
[Spring] 스프링 MVC 프로젝트의 기본 구조와 동작 순서 (0) | 2021.06.08 |