Spring, Mybatis
2-2. 0902_ MyBatis
55yudi
2021. 9. 2. 16:26
myspringmybatis 프로젝트 생성
- 실습하기(과제) :
메서드 시그니처(Method Signature) 작성하기
- 사번을 전달받아서 그 사번에 해당하는 사원정보를 리턴한다.
- 급여를 전달받아서 그 급여를 받는 사원들의 목록을 리턴한다.
- 사원정보를 전달받아서 그 사원의 정보를 수정한다.
- 사번을 전달받아서 그 사원을 삭제한다.
- 이메일을 전달받아서 그 이메일을 사용하는 사원의 정보를 리턴한다.
- 부서번호를 전달받아서 그 부서원들의 정보를 리턴한다.
<EmpDAO2.java>
package myspringmybatis;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.List;
import org.springframework.stereotype.Component;
@Component
public class EmpDAO {
// CRUD관련 메서드를 정의할 수 있어야 한다.
// 입사년도를 전달받아서 그 년도에 입사한 직원의 목록(여러개니까 List로)을 리턴한다.
// 메서드명, 매개변수, 리턴타입
public List<EmpVO> getEmpListByHireYear(int year) throws Exception {
return null;
}
// 직원의 정보(이름, 입사일자, 급여, 이메일 등)를 전달받아서 등록하고 결과를 리턴한다.
// 메서드명, 매개변수(VO객체에 여러개를 싣어서 저장하면 됨), 리턴타입
public int register(EmpVO vo) throws Exception {
return 0;
}
// - 사번을 전달받아서 그 사번에 해당하는 사원정보를 리턴한다.
public EmpVO getEmpById(int empId) throws Exception {
return null;
}
// // - 급여를 전달받아서 그 급여를 받는 사원들의 목록을 리턴한다.
// public List<EmpVO> getEmpListBySalary(int salary) throws Exception {
// return null;
// }
// - 사원정보를 전달받아서 그 사원의 정보를 수정한다.
public int updateEmp(EmpVO vo) throws Exception {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:xe","hr","hr");
String sql = "update table employees set email = ? where employee_id = ?";
PreparedStatement stmt = con.prepareStatement(sql);
stmt.setString(1, vo.lastName);
int result = stmt.executeUpdate();
return result;
}
// - 사번을 전달받아서 그 사원을 삭제한다.
public int deleteEmpById(int empId) throws Exception {
//
return 0;
}
// // - 이메일을 전달받아서 그 이메일을 사용하는 사원의 정보를 리턴한다.
// public EmpVO getEmpByEmail(String email) throws Exception {
// return null;
// }
// // - 부서번호를 전달받아서 그 부서원들의 정보를 리턴한다.
// public List<EmpVO> getEmpListByDeptId(int deptId) throws Exception {
// return null;
// }
}
MyBatis
- <EmpDAO.java> -- MyBatis를 사용해서 오라클에 커넥션 한 것 등등의 아래코드를 축약할 것임
package myspringmybatis;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Component;
@Component
public class EmpDAO {
public List<EmpVO> getEmpListByDeptId(int deptId) throws Exception {
ArrayList<EmpVO> result = new ArrayList<EmpVO>();
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:xe","hr","hr");
String sql = "select * from employees where department_id = ?";
PreparedStatement stmt = con.prepareStatement(sql);
stmt.setInt(1, deptId);
ResultSet rs = stmt.executeQuery();
while(rs.next()) {
//EmpVO객체를 만들고 객체변수에 데이터베이스의 데이터로 설정하고
EmpVO vo = new EmpVO();
vo.employeeId = rs.getInt("employee_id");
vo.lastName = rs.getString("last_name");
result.add(vo);
}
return result;
}
}
- <porm.xml>에 dependency 코드 추가 --> Spring을 사용할 준비 완료
DataSource 사용하기
- 데이터베이스에 대한 연결을 제공한다.
- Spring DataSource, DBCP DataSource, C3P0 DataSource, HiKariCP(가장 빠르고 안정적임) 등
- 그 중에 DBCP DataSource 를 사용할 것임
* CP : Connection Pool
- 그 전에 Maven 먼저 해줘야 함
<porm.xml>에 코드 추가
<!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
그러면 commons-dbcp 관련 jar파일이 생성됨을 볼 수 있다.
- <context-spring-annotation.java>에 Apache dbcp 코드 추가
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
- property의 value값을 오라클 상황에 맞게 수정하기
--> 전체코드
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="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/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">
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />
<property name="username" value="hr" />
<property name="password" value="hr" />
</bean>
<context:annotation-config></context:annotation-config> <!-- xml파일이 아니고 어노테이션으로 되어 있다고 인식 -->
<!-- myspring이라는 패키지내부에 어노테이션으로 표기된 클래스를 스프링 빈으로 생성해서 가지고 있게된다. -->
<!-- @component가 2개인 이유 -> @가 있는 클래스가 2개있기때문에 -->
<context:component-scan
base-package="myspringmybatis"></context:component-scan> <!-- 베이스패키지 설정 -->
</beans>