오전
- 마이바티스를 사용하는 순서는?
- 아래 @를 설명하시오.
- @Mapper
- @MapperScan
오후
- 자바에서 마이바티스(xml)로 파라미터 전달 방법은?
- Dept insert 와 remove 를 구현하시오.
Spring Starter Project를 이용해 수업 시간에 진행한 방식
- Mybatis 라이브러리를 pom.xml에 추가(의존성 관리 도구에 라이브러리 추가)

설치된 상태인지 확인하기.

- application.properties에 설정 추가(데이터베이스 설정 및 마이바티스 설정 추가. 스샷은 마이바티스 설정만 찍음.)


@Mapper() 추가

unit test 진행

콘솔창 확인. @Slf4j를 사용한 상태 + log 출력.

GPT 답변
의존성 추가: 먼저 프로젝트의 의존성 관리 도구(예: Maven, Gradle)를 사용하여 마이바티스 라이브러리를 프로젝트에 추가
매퍼 인터페이스 작성: 데이터베이스와 상호작용하는 메서드를 정의한 매퍼 인터페이스를 작성
매퍼 XML 파일 작성: 매퍼 인터페이스의 메서드에 대응하는 SQL 쿼리를 작성하고, 결과를 자바 객체에 매핑하는 정보를 포함한 XML 파일을 작성
SqlSessionFactory 설정: 데이터베이스 연결과 관련된 설정을 포함한 SqlSessionFactory를 설정
매퍼 인터페이스와 SqlSessionFactory 연결: 매퍼 인터페이스와 SqlSessionFactory를 연결하여 사용할 수 있도록 설정
매퍼 인터페이스 사용: 매퍼 인터페이스의 메서드를 호출하여 데이터베이스와 상호작용하기
해당 부분에 대해 찾아본 참조링크
[MyBatis] 동작원리, 사용방법 정리
[MyBatis] 마이바티스 기본 사용법
참조하기 좋은 사이트 : MyBatis 공식 사이트 설명 - Mapper XML 파일
<insert id="insert" parameterType="edu.sejong.ex.vo.DeptVo" >
<![CDATA[
insert into dept(deptno, dname, loc) values(#{deptno},#{dname},#{loc})
]]>
</insert>
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository
public class DeptRepository {
private final SqlSession sqlSession;
@Autowired
public DeptRepository(SqlSession sqlSession) {
this.sqlSession = sqlSession;
}
public void insertDept(DeptVo deptVo) {
sqlSession.insert("edu.sejong.ex.mapper.DeptMapper.insertDept", deptVo);
}
public void deleteDept(int deptno) {
sqlSession.delete("edu.sejong.ex.mapper.DeptMapper.deleteDept", deptno);
}
}
DeptMapper.java - 맵퍼 파일
package edu.sejong.ex.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import edu.sejong.ex.vo.DeptVo;
@Mapper
public interface DeptMapper {
List<DeptVo> selectList();
void insert(DeptVo deptVo);
void delete(DeptVo deptVo);
}
DeptMapperTest.java - 테스트 파일
package edu.sejong.ex.mapper;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import edu.sejong.ex.vo.DeptVo;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@SpringBootTest
class DeptMapperTest {
@Autowired
private DeptMapper deptMapper;
@Test
void test() {
assertNotNull(deptMapper);
}
@Test
void testSelectList() {
for(DeptVo dept : deptMapper.selectList()) {
log.info("부서번호 : " + dept.getDeptno());
log.info("부서이름 : " + dept.getDname());
log.info("부서위치 : " + dept.getLoc());
}
}
@Test
void testInsert() {
deptMapper.insert(new DeptVo(11, "홍콩", "마오이"));
for(DeptVo dept : deptMapper.selectList()) {
log.info("부서번호 : " + dept.getDeptno());
log.info("부서이름 : " + dept.getDname());
log.info("부서위치 : " + dept.getLoc());
}
}
@Test
void testDelete() {
deptMapper.delete(new DeptVo(11, "홍콩", "마오이"));
for(DeptVo dept : deptMapper.selectList()) {
log.info("부서번호 : " + dept.getDeptno());
log.info("부서이름 : " + dept.getDname());
log.info("부서위치 : " + dept.getLoc());
}
}
}
DeptMapper.xml - 맵퍼 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.sejong.ex.mapper.DeptMapper">
<select id="selectList" resultType="edu.sejong.ex.vo.DeptVo">
<![CDATA[
select * from dept
]]>
</select>
<insert id="insert" parameterType="edu.sejong.ex.vo.DeptVo" >
<![CDATA[
insert into dept(deptno, dname, loc) values(#{deptno},#{dname},#{loc})
]]>
</insert>
<delete id="delete" parameterType="edu.sejong.ex.vo.DeptVo">
<![CDATA[
delete from dept where deptno = #{deptno}
]]>
</delete>
</mapper>
DeptServiceImpl.java - 서비스 파일
package edu.sejong.ex.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import edu.sejong.ex.mapper.DeptMapper;
//import edu.sejong.ex.repository.DeptRepository;
import edu.sejong.ex.vo.DeptVo;
// @Component + 의미(Command)
@Service
public class DeptServiceImpl implements DeptService {
// @Autowired
// private DeptRepository deptRepository;
@Autowired
private DeptMapper deptMapper;
@Override
public List<DeptVo> getList() {
System.out.println("getList()..");
return deptMapper.selectList();
// return deptRepository.selectList();
}
@Override
public void register(DeptVo deptVo) {
System.out.println("register()..");
deptMapper.insert(deptVo);
// deptRepository.insert(deptVo);
}
//
@Override
public void erase(DeptVo deptVo) {
System.out.println("erase()..");
deptMapper.delete(deptVo);
// deptRepository.delete(deptVo);
}
}