62일차 (1) - 스프링 (MyBatis)

Yohan·2024년 5월 21일
0

코딩기록

목록 보기
92/156
post-custom-banner

MyBatis

  • MyBatis는 자바 언어를 위한 오픈 소스 ORM(Object Relational Mapping) 프레임워크로, JDBC로 수행되는 데이터베이스 쿼리의 수고를 덜어주는 간편한 방법을 제공
  • Jdbc의 단점을 극복한 방법
  • SQL을 직접 작성할 수 있어 개발자가 데이터베이스에 더욱 직접적으로 접근 가능

순서

https://mybatis.org/mybatis-3/getting-started.html
마이바티스 모듈 설치 및 설정 - 인터페이스 생성 - resources 밑에 mapper.xml 생성 (이전 Repository 역할, 이 곳에 sql을 적음)

MyBatis 적용

mybatis-config.xml

-> mapper.xml 파일들을 사용하기 전에 등록하는 곳
-> 여러 설정들을 하는 곳 (별칭, 카멜케이스-스네이크케이스 변환 등)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- SQL을 적어놓은 ...Mapper.xml 파일들을 사용등록하는 영역 -->
    <mappers>
        <mapper resource="mappers/PersonMapper.xml" />
    </mappers>

</configuration>

PersonMapper (interface)

PersonMapper.xml (이전에 Repository에서 하던 역할)

-> sql 적는 곳

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!-- mapper파일은 실행할 SQL을 적는 파일 -->
<!-- 생성한 mapper 파일은 mybatis-config.xml에 사용등록을 해야함. -->

<!-- namespace속성에는 사용할 인터페이스의 풀네임(패키지+인터페이스명)을 적음 -->
<mapper namespace="com.study.springstudy.database.chap02.PersonMapper">

    <!-- id 속성에 인터페이스의 추상메서드명을 적는다. -->
    <insert id="save">
        INSERT INTO tbl_person
            (id, person_name, person_age)
        VALUES
            (#{id}, #{personName}, #{personAge})
    </insert>

</mapper>

-> insert에 대한 sql문을 작성하기 위해 id에 추상메서드명인 save를 넣어주었다.
-> 원래는 ?가 있을 자리에 #{}가 들어가고 연결되어있는 클래스의 필드명들을 입력해준다.

PersonMapperTest

-> 정말 만들었던 메서드가 잘 실행되는가? 확인하기 위해 Test를 만들어서 돌아가는지 확인

delete, update도 Insert와 동일하게 진행

    <delete id="delete">
        DELETE FROM tbl_person
        WHERE id = #{id}
    </delete>

    <update id="update">
        UPDATE tbl_person
        SET person_age = #{personAge}, person_name = #{personName}
        WHERE id = #{id}
    </update>

select (전체 조회, 단일 조회)

  • 조회시에는 delete, update, Insert와 다르게 resultType을 작성
    <!-- resultType: 매핑될 클래스 명을 작성-->
    <select id="findAll" resultType="com.study.springstudy.database.chap01.Person">
        SELECT * FROM tbl_person
    </select>

    <select id="findOne" resultType="com.study.springstudy.database.chap01.Person">
        SELECT * FROM tbl_person
        WHERE id = #{id}
    </select>
  • 전체조회(findAll) 테스트시 DB에는 스네이크케이스인데 결과는 카멜케이스로 나와서 null이 나옴
  • mybatis-config.xml에 설정추가하여 다시 해보면 잘 나오는 것을 볼 수 있음

resultType 줄여서 쓰기

  • mybatis-config.xml에 설정 추가

사람이름List, 총 숫자

    <!-- 이름만 가져오는 것이니 string으로 -->
    <select id="findNames" resultType="string">
        SELECT person_name FROM tbl_person
    </select>

    <!-- 총 숫자만 가져오는 것이니 int-->
    <select id="count" resultType="int">
        SELECT COUNT(*)
        FROM tbl_person
    </select>

성적정보 프로그램 수정

  • Repository(인터페이스) -> Mapper(인터페이스)로 변경
  • ScoreSpringJdbcRepository -> ScoreMapper.xml

rank

  • rank, cnt는 db에 따로 있지 않아서 에러가 발생
    -> rank, cnt만 따로 담는 RankDto를 만들어서 진행

profile
백엔드 개발자
post-custom-banner

0개의 댓글