파게로그

[Spring MVC] 서비스 객체 사용하기 본문

콤퓨타 왕기초/Spring

[Spring MVC] 서비스 객체 사용하기

파게 2021. 5. 1. 15:20

Maven dependencies에 com.oracle.database.jdbc ojdbc를 추가한다.

 

그렇다면 EmpService라는 객체를 어떻게 생성할 것인가?

EmpController 내부에서 직접 EmpService 객체를 new 키워드를 통해 생성하는 대신,

Spring스럽게 별도로 생성하여 IoC Container에 담아서 DI를 해준다.

물론 이를 위해서 인스턴스 변수와 setter를 설정해두어야 한다.

 

dispatcher-servlet.xml

<bean id="/emp" class="com.ddoongi.web.controller.EmpController">
	<property name="empService" ref="empService" />
</bean>

<bean id="empService" class="com.ddoongi.web.service.EmpService"></bean>

 

그리고 DB를 시험해보기 위해 사용할 Emp라는 클래스는 알아서 만들어두자.

아래와 같이, Controller에서 EmpService는 직접 생성되는 것이 아니라 이미 Spring을 통해 DI가 완료되어 있는 상태이다. 바로 empService.getEmpList();와 같이 메서드를 사용할 수 있다. JSP를 잘 다룰 줄 몰라서 리스트에서 하나만 꺼내어 ModelAndView 객체에 Object로 추가하도록 해두었다.

 

EmpController.java

package com.ddoongi.web.controller;

import java.sql.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import com.ddoongi.web.entity.Emp;
import com.ddoongi.web.service.EmpService;

public class EmpController implements Controller {
	
	private EmpService empService;

	@Override
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		ModelAndView mv = new ModelAndView("/emp");
		List<Emp> list = empService.getEmpList();
		String name = list.get(2).getEname();
		int empno = list.get(2).getEmpno();
		Date hiredate = list.get(2).getHiredate();
		mv.addObject("name", name);
		mv.addObject("empno", empno);
		mv.addObject("hiredate", hiredate);
		return mv;
	}
	
	public void setEmpService(EmpService empService) {
		this.empService = empService;
	}	
}

 

 

이번 실험(?)의 목적인 JDBC는 getEmpList()가 실행되는 과정에 모두 담겨있는데, empService는 다음과 같다.

별다른 특별한 건 없고...

아마도 JDBC와 관련하여 앞으로 문제가 될 만한 것은 리소스 관리일 듯하다. 아직은 잘 모르지만 연결을 계속해서 열었다가 닫았다가 하는 것도 비효율적일 것이고... 뭔가 효율적인 방법들이 있을 듯하다.

 

package com.ddoongi.web.service;

import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import com.ddoongi.web.entity.Emp;

public class EmpService {
	// JDBC driver info
	static final String JDBC_DRIVER = "oracle.jdbc.driver.OracleDriver";
	static final String DB_URL = "jdbc:oracle:thin:@localhost:1521/xepdb1";

	// DB credentials
	static final String USER = "c##berry";
	static final String PASS = "straw";

	public List<Emp> getEmpList() throws ClassNotFoundException {
		Class.forName(JDBC_DRIVER);
		System.out.println("Connecting to DB, Creating statement");
		try (
				Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
				Statement stmt = conn.createStatement();
		) {
			System.out.println("DB connected, Statement created successfully");
			String sql = "SELECT * FROM berry.emp";
			ResultSet rs = stmt.executeQuery(sql);

			List<Emp> empList = new ArrayList<>();
			
			while (rs.next()) {
				int empno = rs.getInt("empno");
				String ename = rs.getString("ename");
				Date hiredate = rs.getDate("hiredate");
				
				Emp emp = new Emp(empno, ename, hiredate);
				
				empList.add(emp);
			}
			
			return empList;
		} catch (SQLException se) {
			/* handle errors for JDBC */
			se.printStackTrace();
		} catch (Exception e) {
			/* handle errors for Class.forName */
			e.printStackTrace();
		}
		
		return null;
	}
}

 

Comments