Database

[MyBatis] CRUD 기능 구현

최MAX 2023. 2. 27. 23:24

MyBatis를 이용해 간단한 CRUD 기능을 구현해보자!

MemberRepository

@Mapper
public interface MemberRepository {

    MemberResponseDto findById(Long id);

    MemberResponseDto findByUsername(String username);

    void update(MemberRequestDto dto);

    void deleteById(Long id);

    void deleteAll();

    List<MemberResponseDto> findAll();
}
  • findById: 멤버의 Id로 조회하기
  • findByUsername: 멤버의 이름으로 조회하기
  • update: MemberRequestDto를 받아 멤버 정보 수정
  • deleteById: 해당 Id의 멤버를 삭제하기
  • deleteAll: 테이블의 전체 멤버 삭제하기
  • findAll(): 테이블의 전체 멤버 조회하기

Member.xml

<mapper namespace="example.mybatis.repository.MemberRepository">

// code

</mapper>

namespace에 Member.xml이 쓰이는 경로를 지정

findById

<select id="findById" parameterType="long" resultType="example.mybatis.dto.MemberResponseDto">
  select * from member where id = #{id};
</select>
  • select id="findById"
    • MemberRepository 내 메소드 findById()에서 위의 코드를 사용한다.
  • parameterType="long", resultType="example.mybatis.dto.MemberResponseDto"
    • MemberResponseDto findById(Long id);
    • 매개 변수 타입은 Long이고, 반환 타입은 직접 작성한 MemberResponseDto이기 때문에 알맞은 값 설정
  • select * from member where id = #{id}
    • 해당 id를 가진 멤버의 모든 정보를 조회한다.

findById()를 xml 파일 작성 없이 어노테이션으로 해결하고 싶다면 MemberRepository에서 아래와 같이 수정하면 된다.

@Select("select * from member where id = #{id}")
MemberResponseDto findById(Long id);

 

위와 같은 원리로 나머지 기능도 쉽게 구현할 수 있다.

 


findByUsername

<select id="findByUsername" parameterType="String" resultType="example.mybatis.dto.MemberResponseDto">
  select * from member where username = #{username};
</select>

이것도 간단하게 어노테이션으로 해결한다면 MemberRepository에서 수정 가능하다.

@Select("select * from member where username = #{username}")
MemberResponseDto findByUsername(String username);

 

findAll

<select id="findAll" resultType="example.mybatis.dto.MemberResponseDto">
  select *
  from member
  order by id DESC
</select>
  • order by id DESC
    • id 내림차순으로 멤버 전체 조회 결과를 반환

어노테이션 기반으로 수정한다면

@Select("select * from member order by id DESC")
List<MemberResponseDto> findAll();

 

update

<update id="update" parameterType="example.mybatis.dto.MemberRequestDto">
    update member
    set username = #{username},
        age = #{age},
        address = #{address}
    where
        id = #{id}
  </update>

어노테이션 사용 시 MemberRepository

@Update("update member set username=#{username}, age=#{age}, address=#{address} where id=#{id}")
void update(MemberRequestDto dto);

deleteById, deleteAll

<delete id="deleteById" parameterType="long">
  delete from member where id = #{id}
</delete>

<delete id="deleteAll">
  delete from member
</delete>

어노테이션 사용 시 MemberRepository

@Delete("delete from member where id=#{id}")
void deleteById(Long id);

@Delete("delete from member")
void deleteAll2();

이처럼 생각보다 간단하게 사용할 수 있다.

다음엔 좀 더 심화된 기능을 구현해봐야겠다.