72일 차 - @Component 애너테이션, mybatis 마이바티스 (23.04.11)

yvonne·2023년 4월 11일
0

📂Spring

목록 보기
4/18
post-thumbnail

🔎 @Component: 부모 | 스프링으로 하여금 IOC 컨테이너에 객체를 생성해서 넣어 놓으라는 의미

🔎 @Controller: 컨트롤러 객체

🔎 @Service: 커맨드 객체

🔎 @Repository: DAO

🔎 @Autowired: 주입 (함수를 이용하여 객체 입력) = IOC 컨테이너 안에 있는 객체를 찾아서 넣으라는 의미

📌 주입의 3가지 방식 
1. 생성자 주입 - 순환 참조를 방지할 수 있기 때문에 권장!
2. Setter 함수 주입 
3. 필드 주입





🔎 GenericXmlApplicationContext : 스프링




📝 스프링으로 Emp 리스트 보기

✔ EmpVO.java

<package edu.example.ex.vo;

import java.util.Date;

import org.springframework.stereotype.Component;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@AllArgsConstructor
@ToString
@Component

public class EmpVO { // 데이터베이스 내의 데이터를 객체화 시켜 메모리에 올리는 것
	private int empno;
	private String ename;
	private String job;
	private int mgr;
	private Date hiredate; // 자바 Date 클래스에서 제공되는 함수를 이용해서 활용할 수 있기때문에 Date형 활용
	private int sal;
	private int comm;
	private int deptno;

	public EmpVO() {
	} // default 생성자

}

✔ EmpDAO.java

package edu.example.ex.repository;

import java.util.List;

import org.springframework.stereotype.Repository;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.Timestamp;
import java.util.ArrayList;

import edu.example.ex.vo.EmpVO;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@Repository // 스프링안에 객체 생성해서 DAO를 넣어놓겠다는 의미
public class EmpDAO {

	private String url = "jdbc:oracle:thin:@localhost:1521:xe";
	private String uid = "scott";
	private String upw = "tiger";

	public EmpDAO() {

		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	public List<EmpVO> empSelect() {
		List<EmpVO> emps = new ArrayList<EmpVO>();

		Connection con = null;
		Statement stmt = null;
		ResultSet resultSet = null;

		try {
			String sql = "Select * from emp";

			con = DriverManager.getConnection(url, uid, upw);
			stmt = con.createStatement();
			resultSet = stmt.executeQuery(sql);

			while (resultSet.next()) {
				int empno = resultSet.getInt("empno");
				String ename = resultSet.getString("ename");
				String job = resultSet.getString("job");
				int mgr = resultSet.getInt("mgr");
				Timestamp hiredate = resultSet.getTimestamp("hiredate");
				int sal = resultSet.getInt("sal");
				int comm = resultSet.getInt("comm");
				int deptno = resultSet.getInt("deptno");

				EmpVO vo = new EmpVO(empno, ename, job, mgr, hiredate, sal, comm, deptno);
				emps.add(vo);
			}

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (resultSet != null)
					resultSet.close();

				if (stmt != null)
					stmt.close();

				if (con != null)
					con.close();

			} catch (Exception e) {
				e.printStackTrace();
			}
		}

		return emps;
	}

}

✔ EmpService.java

package edu.example.ex.service;

import java.util.List;

import edu.example.ex.vo.EmpVO;

public interface EmpService {
	public abstract List<EmpVO> getList();

}

✔ EmpServiceImpl.java

package edu.example.ex.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import edu.example.ex.repository.EmpDAO;
import edu.example.ex.vo.EmpVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@Service
@RequiredArgsConstructor // +@Autowired 하면 생성자 주입 (없으면 필드 주입)

public class EmpServiceImpl implements EmpService {
	@Autowired
	private final EmpDAO dao;

	@Autowired
	private EmpVO empVO;

	@Override
	public List<EmpVO> getList() {
		log.info("getList() ..");
		return dao.empSelect();
	}

}

✔ EmpController.java

package edu.example.ex.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import edu.example.ex.service.EmpService;
import edu.example.ex.vo.EmpVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

@Slf4j // 로그
@Controller
@RequestMapping("/emp/*")
@RequiredArgsConstructor

public class EmpController {
	@Autowired
	private final EmpService empService;

	@GetMapping("/empList")
	public String empList(EmpVO empVO, Model model) {
		log.info("empList() ..");

		model.addAttribute("emps", empService.getList());

		return "/emp/empList";
	}

}

✔ empList.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<table width="800" cellpadding="0" cellspacing="0" border="1">
		<tr>
			<th>empno</th>
			<th>ename</th>
			<th>job</th>
			<th>mgr</th>
			<th>hiredate</th>
			<th>sal</th>
			<th>comm</th>
			<th>deptno</th>
		</tr>
		<c:forEach var="emp" items="${emps}">
			<tr>
				<td>${emp.empno}</td>
				<td>${emp.ename}</td>
				<td>${emp.job}</td>
				<td>${emp.mgr}</td>
				<td>${emp.hiredate}</td>
				<td>${emp.sal}</td>
				<td>${emp.comm}</td>
				<td>${emp.deptno}</td>
			</tr>
		</c:forEach>

	</table>
</body>
</html>
  • 결과




📝 스프링으로 Emp별 세부 정보 보기

✔ EmpDAO.java

package edu.example.ex.repository;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Repository;

import edu.example.ex.vo.EmpVO;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@Repository // 스프링안에 객체 생성해서 DAO를 넣어놓겠다는 의미
public class EmpDAO {

	private String url = "jdbc:oracle:thin:@localhost:1521:xe";
	private String uid = "scott";
	private String upw = "tiger";

	public EmpDAO() {

		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	public List<EmpVO> empSelect() {
		List<EmpVO> emps = new ArrayList<EmpVO>();

		Connection con = null;
		Statement stmt = null;
		ResultSet resultSet = null;

		try {
			String sql = "Select * from emp";

			con = DriverManager.getConnection(url, uid, upw);
			stmt = con.createStatement();
			resultSet = stmt.executeQuery(sql);

			while (resultSet.next()) {
				int empno = resultSet.getInt("empno");
				String ename = resultSet.getString("ename");
				String job = resultSet.getString("job");
				int mgr = resultSet.getInt("mgr");
				Timestamp hiredate = resultSet.getTimestamp("hiredate");
				int sal = resultSet.getInt("sal");
				int comm = resultSet.getInt("comm");
				int deptno = resultSet.getInt("deptno");

				EmpVO vo = new EmpVO(empno, ename, job, mgr, hiredate, sal, comm, deptno);
				emps.add(vo);
			}

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if (resultSet != null)
					resultSet.close();

				if (stmt != null)
					stmt.close();

				if (con != null)
					con.close();

			} catch (Exception e) {
				e.printStackTrace();
			}
		}

		return emps;
	}

	public EmpVO contentView(int empno){
	      EmpVO emp = null;
	      
	      Connection connection = null;
	      PreparedStatement preparedStatement = null;
	      ResultSet resultSet = null;
	      
	      try {
	         String query = "select * from emp where empno = ?"; 
	         
	     	 connection = DriverManager.getConnection(url, uid, upw);
	         preparedStatement = connection.prepareStatement(query);
	         
	         preparedStatement.setInt(1, empno);         
	         resultSet = preparedStatement.executeQuery();
	         
	         while(resultSet.next()) {
	        		int eempno = resultSet.getInt("empno");
					String ename = resultSet.getString("ename");
					String job = resultSet.getString("job");
					int mgr = resultSet.getInt("mgr");
					Timestamp hiredate = resultSet.getTimestamp("hiredate");
					int sal = resultSet.getInt("sal");
					int comm = resultSet.getInt("comm");
					int deptno = resultSet.getInt("deptno");

					emp = new EmpVO(eempno, ename, job, mgr, hiredate, sal, comm, deptno);    
	         }   
	         
	      } catch (Exception e) {
	         e.printStackTrace();
	      } finally {
	         
	         try {
	            if(resultSet != null) 
	               resultSet.close();
	            
	            if(preparedStatement != null) 
	               preparedStatement.close();
	            
	            if(connection != null) 
	               connection.close();
	            
	         } catch (Exception e2) {
	            // TODO: handle exception
	            e2.printStackTrace();
	         }
	      }   
	      
	      return emp;      
	   }
}

✔ EmpService.java

package edu.example.ex.service;

import java.util.List;

import edu.example.ex.vo.EmpVO;

public interface EmpService {
	public abstract List<EmpVO> getList();

	public EmpVO get(int empno);

}

✔ EmpServiceImpl.java

package edu.example.ex.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import edu.example.ex.repository.EmpDAO;
import edu.example.ex.vo.BoardVO;
import edu.example.ex.vo.EmpVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@Service
@RequiredArgsConstructor // +@Autowired 하면 생성자 주입 (없으면 필드 주입)

public class EmpServiceImpl implements EmpService {
	@Autowired
	private final EmpDAO dao;

	@Autowired
	private EmpVO empVO;

	@Override
	public List<EmpVO> getList() {
		log.info("getList() ..");
		return dao.empSelect();
	}
	
	@Override
	public EmpVO get(int empno) {
		log.info("get(int empno) ..");
		
		return dao.contentView(empno);
	}

}

✔ EmpController.java

package edu.example.ex.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import edu.example.ex.service.EmpService;
import edu.example.ex.vo.BoardVO;
import edu.example.ex.vo.EmpVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

@Slf4j // 로그
@Controller
@RequestMapping("/emp/*")
@RequiredArgsConstructor

public class EmpController {
	@Autowired
	private final EmpService empService;

	@GetMapping("/empList")
	public String empList(EmpVO empVO, Model model) {
		log.info("empList() ..");

		model.addAttribute("emps", empService.getList());

		return "/emp/empList";
	}

	@GetMapping("/contentView")
	public String contentView(EmpVO empVO, Model model) {
		log.info("content_view() ..");
		int empno = empVO.getEmpno();
		empVO = empService.get(empno);

		model.addAttribute("contentView", empVO);

		return "/emp/contentView";
	}

}

✔ empList.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<table width="600" cellpadding="0" cellspacing="0" border="1">
		<tr>
			<th>empno</th>					
			<th>hiredate</th>		
		</tr>
		<c:forEach var="emp" items="${emps}">
			<tr>
				<td><a
					href="${pageContext.request.contextPath}/emp/contentView?empno=${emp.empno}">${emp.empno}</td>
				</a>
			
				<td>${emp.hiredate}</td>
			
			</tr>
		</c:forEach>
	</table>
</body>
</html>

✔ contentView.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

   <table id="list-table" width="500" cellpadding="0" cellspacing="0" border="1">
         <input type="hidden" name="empno" value="${contentView.empno}">
         <tr>
            <th> ename </th>
            <td> ${contentView.ename} </td>
         </tr>
         <tr>
            <th> job </th>
            <td> ${contentView.job} </td>
         </tr>
         <tr>
            <th> mgr </th>
            <td> ${contentView.mgr} </td>
         </tr>
         <tr>
            <th> hiredate </th>
            <td> ${contentView.hiredate} </td>
         </tr>
         <tr>
            <th> sal </th>
            <td> ${contentView.sal} </td>
         </tr>
         <tr>
            <th> comm </th>
            <td> ${contentView.comm} </td>
         </tr>
         <tr>
            <th> deptno </th>
            <td> ${contentView.deptno} </td>
         </tr>      
   </table>
</body>
</html>
  • 결과





📝 Mybatis 마이바티스


✔ BoardMapper.xml

<?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="edu.example.ex.mapper.BoardMapper">
	<select id="getList" resultType="edu.example.ex.vo.BoardVO"> <!-- id는 함수이름 resultType은 BoardVO -->
  	     <![CDATA[
      select * from mvc_board order by bGroup desc, bStep asc
   ]]>
	</select>
</mapper>

✔ BoardServiceImpl.java

package edu.example.ex.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import edu.example.ex.mapper.BoardMapper;
import edu.example.ex.repository.BoardDAO;
import edu.example.ex.vo.BoardVO;
import edu.example.ex.vo.GradeVO;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@Service
@RequiredArgsConstructor // +@Autowired 하면 생성자 주입 (없으면 필드 주입)

public class BoardServiceImpl implements BoardService {

	@Autowired
	private final BoardMapper mapper;

	@Override
	public List<BoardVO> getList() {
		log.info("getList()..");
		return mapper.getList();
	}

	@Override
	public BoardVO get(int bno) {
		log.info("get(int bno) ..");
		
		return null;
	}
}

✔ BoardMapper.java

package edu.example.ex.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;

import edu.example.ex.vo.BoardVO;

@Mapper // mybatis에 사용할 거라는 것을 알려주는 애너테이션
public interface BoardMapper {
	public List<BoardVO> getList();
}
  • 결과
profile
개발 연습장

0개의 댓글