상세 컨텐츠

본문 제목

Mybatis 객체 형식으로 update, delete 하기

프레임워크/Mybatis

by 최승호 2022. 5. 10. 09:50

본문

memberMapper.xml 매퍼 파일

<!-- Member 정보 update -->
<update id="updateMember" parameterType="member">
	update tb_member set
		name = #{name}
		where id = #{id}
</update>

<!-- Member 정보 delete -->
<delete id="deleteMember" parameterType="string">
	delete from tb_member
	where id = #{id}
</delete>

 

매퍼 파일에 update와 delete 구문을 추가한다.

parameterType은 별도로 alias를 지정해주지 않으면 패키지를 포함한 클래스 이름을 적으면 되고

mybatis-config.xml 설정파일에 다음과 같이 alias를 설정하여 축약형으로 사용할 수 있다.

 

 <typeAliases>
	<typeAlias type="Member" alias="member" />
</typeAliases>

 

MemberMapper 인터페이스

public int updateMember(Member member);
public int deleteMember(String id);

 

매퍼 파일과 매칭할 인터페이스의 추상 메소드를 추가한다.

 

리턴타입을 int로 설정한 이유는 insert, update, delete와 같은 DML은 쿼리 실행 후 실제 DB에서 작업된 Row의 수를 리턴해 준다. 따라서 별도로 매퍼 파일에서 resultType을 지정하지 않아도 되고 리턴된 숫자를 보고 DML이 잘 수행 되었는지 확인하는 용도로 사용할 수 있다.

 

MemberDAO 클래스

 public void updateMember(Member member) {
	try (SqlSession session = factory.openSession()) {
		MemberMapper mapper = session.getMapper(MemberMapper.class);
		int result = mapper.updateMember(member);
		
        if (result > 0) {
			System.out.println("Member 정보 update 성공");
            session.commit();
		} else {
			System.out.println("Member 정보 update 실패");
		}
	} catch (Exception e) {
		e.printStackTrace();
	}
}

public void deleteMember(String id) {
	try (SqlSession session = factory.openSession()) {
		MemberMapper mapper = session.getMapper(MemberMapper.class);
		int result = mapper.deleteMember(id);

		if (result > 0) {
			System.out.println("Member 정보 delete 성공");
            session.commit();
		} else {
			System.out.println("Member 정보 delete 실패");
		}
	} catch (Exception e) {
		e.printStackTrace();
	}
}
    
public static void main(String[] args) {
	MemberDAO dao = new MemberDAO();
	Member member = new Member("hong", "1234", "홍길동");
	// DB에 Member 객체 정보 insert 하기
	//dao.insertMember(member);

	// hong 이라는 아이디를 가진 Member 정보 select 하기
	Member searchedMember = dao.selectMemberById("hong");
	System.out.println("============ 수정 전 ============ ");
	System.out.println(searchedMember);

	// hong 이라는 아이디를 가진 Member의 정보 update 하기
	searchedMember.setName("홍길순");
	dao.updateMember(searchedMember);
	System.out.println("============ 수정 후 ============ ");
	searchedMember = dao.selectMemberById("hong");
	System.out.println(searchedMember);

	// hong 이라는 아이디를 가진 Member의 정보 delete 하기
	//dao.deleteMember(searchedMember.getId());
}

 

실행결과

 

update문이 잘 실행되었다. dao.deleteMember() 메소드를 주석 해제 하고 실행하면 데이터가 삭제된다.

관련글 더보기

댓글 영역