mybatis 사용

예지성준·2024년 5월 25일
0

의존성 설정

mvn repository
1. ojdbc11

  • ojdbc11은 Oracle 데이터베이스와 Java 애플리케이션 간의 연결을 위한 JDBC (Java Database Connectivity) 드라이버

    • runtimeOnly
      컴파일중에 포함 x , 실행 과정중에 포함
  1. orai18n
  • Oracle Internationalization (i18n) 지원 라이브러리입니다. 이 라이브러리는 Oracle JDBC 드라이버와 함께 사용되며, 데이터베이스와 애플리케이션 간의 문자 인코딩 및 다국어 지원 기능을 제공
  1. mybatis
  • MyBatis는 Java 애플리케이션에서 데이터베이스와 상호작용할 때, SQL 쿼리, 저장 프로시저, 그리고 고유한 매핑을 더욱 쉽게 관리하고 사용할 수 있게 해주는 퍼시스턴스 프레임워크
  • JDBC (Java Database Connectivity) API를 추상화하여 개발자가 직접 JDBC 코드를 작성할 필요 없이 SQL 쿼리를 작성하고 실행할 수 있게 해줍니다.
  1. lombok
  • Lombok은 어노테이션을 사용하여 자동으로 코드 생성 작업을 처리

    • compileOnly
      컴파일중에만 포함, 실행(런타임)할때는 x
      개발할때만 필요하기때문
      getter, setter, 생성자 등의 보일러플레이트 코드를 생성하는 데 사용되므로, 런타임에는 필요하지 않다.
    • annotationProcessor도 추가: 컴파일러가 애노테이션 프로세서를 실행할 수 있도록 한다.

설정

mybatis 홈페이지

1. xml설정 파일 기본설정

  • 설정 항목들
    • main resource폴더
      configs디렉토리 -> mybatis-config.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>
 	//1) 프로퍼티 추가
  
  <environments default="development">
    //만약 내가 기본설정을 해주지 않았다면 이 default값을 토대로 밑의 설정을 따라서 사용한다.
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        //MyBatis는 내장된 기본 커넥션 풀을 사용하여 데이터베이스 연결을 관리
        
        //db에 대한 연결 설정
        <property name="driver" value="${driver}"/>
        // ${} -> 많이 공유하는 부분은 변수화 시켜서 사용할수있다
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
        
        
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="org/mybatis/example/BlogMapper.xml"/>
  </mappers>
</configuration>
  • 커넥션 풀은 데이터베이스 연결을 효율적으로 관리하여 성능을 향상시키고, 자원을 효율적으로 사용하며, 시스템의 안정성을 높이는 데 중요한 역할을 합니다. 이를 통해 데이터베이스와의 상호작용을 최적화하고, 애플리케이션의 성능을 개선할 수 있습니다.

1)

  • driver설정
  • url설정
  • 사용자 계정 설정

environments default id dev로 변경

mapper태그 -> 테이블 만들고 연결해서 쿼리 수헹, 매핑 수행해주는 테이블을 불러옴

  • resource경로 mappers/MemberMapper.xml

2. 매핑된 SQL구문 살펴보기

main - resources - mappers 디렉토리 - MemberMapper.xml 파일 추가

<?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">

//nameSpace: resource의 경로
//mapper파일은 DML언어 사용
<mapper namespace="org.mybatis.example.BlogMapper">
 
  //쿼리 정의
  //mybatis에게 어떤 네임스페이스의 select태그인지 알려주기 위해 구분할 수 있는 id가 필요
  <select id="selectBlog" resultType="Blog">
    select * from Blog where id = #{id}
  </select>
  
</mapper>

조회커리 태그 select
추가 태그 insert
수정 태그 update
삭제 태그 delete

  • 필요한만큼 쿼리문 추가해주면 됨

멤버 객체 만들고 거기에 매핑될수있게 해줘야함

결과값 정의할수있는 클래스 생성
main - java - member 패키지생성 - Member클래스

  • 매핑 기준은 db컬럼명 그대로 -> 기본원칙

마이바티스는 getter setter를 반드시 정의해야하기때문에 클래스에 @Data 애노테이션추가

db필드명과 동일하게 작성

select태그에 resultType 추가
알아서 db의 결과를 setter을 통해서 값을 넣어준다


3. SqlSession

  • 쿼리수행을 하기 위한 객체
    SqlSessionFactory객체: sqlSession 객체 생성을 해줌
    SqlSession -> SQL구문을 실행함
    SqlsessionFactoryBuilder클래스가 존재함 -> 설정을 넣어서 만들면 SqlSessionFactory 객체를 생성할 수 있다.

    • list형태 select 메서드
    • selectOne - select 쿼리 수행
    • insert
    • update
    • delete

main java - configs - DBConn

  • Reader객체 -> 읽어옴
    Resource폴더 기준 접근

  • 팩토리빌더 - 설정파일 내용으로 sessionfactory 객체 생성

커밋 자동-수동관리

테스트1


Member클래스 변수명 대문자x 소문자로 쓸수있는 방법으로 사용해보자

현재는 db컬럼과 일치하지않아서 null값 매핑됨

MemberMapper.xml

  • 결과 매핑 방법 알려주기 resultMap

select 타입 바꿔주기 resultMap의 id값 대입

  • test1 실행시 값 매핑 되었을거임

이거로 접근하는게 필수였음

이거 넘 길어서 바꿔줄거임

xml 내용 인터페이스에 정의

인터페이스로 매핑

main java mappers 패키지 - MemberMapper 인터페이스 생성, xml과 동일명으로 해줘야함
원칙: 동일경로, 동일 패키지, 동일명 사용

Mapper xml의 id값 = 메서드명

getMapper로 정의한거 불러오기 class class가 매개변수임

테스트2

  • 매퍼인터페이스
    애노테이션이용: 인터페이스에 특정 메서드에 쿼리를 작성해서 알려주면 그대로 정의해서 알려줌(간단한 쿼리일경우)

직접 별칭지정

테스트3


어떤 쿼리인지 현재 알 수 x
자세하게 알수있는 로그가 존재

로깅

세팅 logImpl 추가

mybatis-config.xml

repository

  • slf4j api
    api는 따로 구현체가 없이 틀만 제공하기 때문에 구현체 만들어줄 logback도 필요하다
  • logback

mybatis홈페이지에서 로깅 설정 예시 복붙

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration>
<configuration>

  <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%5level [%thread] - %msg%n</pattern>
    </encoder>
  </appender>

  <logger name="org.mybatis.example.BlogMapper">
    <level value="trace"/>
  </logger>
  <root level="error">
    <appender-ref ref="stdout"/>
  </root>

</configuration>

logback.xml 파일 만들어서 클래스패스에 두기

main - resources - logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration>
<configuration>

    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
      //콘솔에 출력하겠다.
        <encoder>
            <pattern>%d %5p %c{2} - %m%n</pattern>
          //출력할 패턴
         
        </encoder>
    </appender>

    <logger name="org.mybatis.example.BlogMapper">
        <level value="trace"/> //debug보다 더 자세한 정보
    </logger>
    <root level="INFO"> //일반정보
        <appender-ref ref="stdout"/>
    </root>

    <logger name="mappers">
        <level value="DEBUG"/> //자세한 정보
    </logger>

</configuration>

쿼리추가

테스트 클래스 추가

아이디와 동일한명칭의 메서드 만들어서..
인터페이스로 ㄱㄱ

profile
꽁꽁 얼어붙은 한강 위로 😺

0개의 댓글