JAVA/ORM

[JSP] MyBatis 적용_2(어노테이션 없이)

읽히는 블로그 2024. 7. 30. 18:56

▤ 목차

     
     
    https://hi-hahahoho.tistory.com/93

    저번 글에서는 configuration.xml과 sqlMapConfig.java 설정을 자세히 봤다.
    이번에는 DataMapper.xml과 DAO간 어떻게 사용되는지 정리하겠다.
    jsp와 같은 앞단은 특별히 달라지는 것은 없다.
     

    ✔ DataDao

    ⌨ SqlSession

    MyBatis에서 데이터베이스와 실제 세션(sql 쿼리 실행을 준비)을 나타내는 객체이다.
    SQL 실행 및 트랜잭션 관리를 담당한다.
    openSession() 메서드를 호출하여 기본 세션을 열고 작업이 끝나면 해당 객체를 해제한다.
     

    🔦 MyBatis는 List 자료구조를 반환한다.

     

     
    여러 행을 조회할때, 해당 테이블의 모든 행을 조회하고 각 행을 객체로 매핑해서 List로 반환한다.
     
     
     

    🖇️Mapper 메서드 호출

     
     
    session.selectList("selectAll")
    session.selectOne("selectOne", code)
    session.insert("insertData", form)
    ...
    Mapper XML에서 정의된 쿼리를 호출하여 데이터베이스 작업을 수행한다.
     

    👏 조회하는 객체에 따라

    조회하는 객체가 2개 이상이라면 selectList메서드를 사용해야하며, 1개의 객체를 조회한다면 selectOne()메서드를 사용해야한다.
     
     
     


     
     
     

    ✔ Mapper XML 파일 (DataMapper.xml)

    ⌨ Mapper

    namespace 속성을 사용해서 Mapper 인터페이스를 정의한다.
    SQL 쿼리를 정의해야한다..
    select, insert.. 등 sql 문장과 매개변수 parameterType과 resultType을 명시해줘야한다.
    이때 각 매핑되는 xml과 dao의 타입을 잘 맞춰줘야한다.
     
     
     

    ❓XML에서 # 기호

    이 기호는 주로 MyBatis에서 SQL 쿼리 매개변수(parameter)를 지정할 때 사용한다. MyBatis는 SQL 매퍼 xml파일에서 SQL 쿼리를 정의할때 ' #{ .. }'을 사용하여 동적으로 값이 들어갈 부분을 표시한다.
     
    1.동적 SQL 매개변수 지정이 가능하다.
    MyBatis에서 SQL 쿼리 내에 #{ .. } 기호를 사용하여 SQL 매개변수를 지정한다.
    MyBatis에서 자동으로 해당 매개 변수의 값을 sql 쿼리에 적절하게 매핑한다.
     
    2. SQL Injection 방지 가능.
    #{ .. } 기호를 사용하면 MyBatis가 쿼리 실행 시 자동으로 매개변수 값을 안전하게 처리하여 sql injection 공격을 방지한다.
    jsp에서 PreparedStatement (pstmt)의 ? 기능과 비슷한 역할을 한다 (물론 사용하는 목적엔 차이가 약간 있다.)
     
    3. 자동 타입 변환
    #{ .. } 기호를 사용하면 MyBatis는 매개변수의 자료형에 따라 자동으로 적절한 sql 매개변수 값을 생성한다.
    (쉽게 말하자면) 문자열이 들어오면 알아서 따옴표 처리를 한다는 의미!
     
     


     
     

    😊정리

    jsp file

     
    jsp 파일에서 이와같이 dao에 접근하여 사용할 수 있다.
     
     

    • MyBatis의 활용
      코드에서 MyBatis를 사용하여 데이터베이스와의 연동을 구현해봤다.
      MyBatis는 SQL 매퍼 XML을 사용하여 SQL 쿼리를 정의하고 자바 코드에서 실행하는 방식이다.
      위와 같은 방식으로 데이터 접근 계층을 구성할 수 있다.
    • SqlMapConfig 클래스에서 SqlSessionFactory를 생성하고 설정한다.
      이 클래스는 싱글톤 패턴을 사용하여 애플리케이션 전체에서 하나의 SqlSessionFactory 인스턴스를 관리하고 있다.
    • DAO 클래스
      데이터 접근 객체 패턴을 사용했다.
      데이터베이스와 직접적인 접근을 캡슐화(묶어)하여 비즈니스 로직과 데이터 접근을 분리하여 유지보수를 높였다.