기술나눔

면접질문 009-Java-MyBatis

2024-07-11

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

면접질문 009-Java-MyBatis

자가 테스트 질문

  • 1. 마이바티스란 무엇인가요? 최대 절전 모드와 어떻게 다른가요?
  • 2. 마이바티스의 실행 과정을 알려주세요.
  • 3. MyBatis는 지연 로딩을 지원합니까?
  • 4. MyBatis의 1단계 캐시와 2단계 캐시의 차이점은 무엇인가요?
  • 5. MyBatis의 동적 SQL이란 무엇입니까?
  • 6. MyBatis에서 페이징을 구현하는 방법은 무엇입니까?
  • 7. MyBatis는 MySQL 데이터베이스에 대규모 데이터 삽입을 어떻게 구현합니까?
  • 8. MyBatis-Plus를 이해하시나요?

질문 답변

1. 마이바티스란 무엇인가요? 최대 절전 모드와 어떻게 다른가요?

답변: MyBatis는 XML 또는 주석을 통해 SQL 문을 작성하고 SQL 문을 Java 개체에 매핑할 수 있는 반자동 지속성 계층 프레임워크입니다. MyBatis는 SQL 문을 완전히 자동으로 생성하지는 않지만 개발자가 수동으로 SQL을 작성할 수 있도록 하여 더 큰 유연성과 제어 기능을 제공합니다.
Hibernate는 자동으로 SQL 문을 생성하고 더 많은 기능을 제공할 수 있는 완전 자동 ORM 프레임워크이지만 구성도 상대적으로 복잡합니다.

2. 마이바티스의 실행 과정을 알려주세요.

답변: MyBatis의 실행 프로세스에는 구성 초기화부터 SQL 실행 및 결과 반환까지 여러 주요 단계가 포함됩니다.자세한 과정은 다음과 같습니다

  1. 구성 파일 로드: 데이터베이스 연결 정보, 매핑 파일 위치 및 기타 정보가 포함된 구성 파일(예: mybatis-config.xml)을 기록합니다.
  2. SqlSessionFactory 만들기: SqlSessionFactoryBuilder 생성자를 통해 SqlSessionFactory 인스턴스를 만듭니다.
  3. SqlSession 생성: SQL 문을 실행하는 데 필요한 메서드를 제공하는 SqlSessionFactory를 통해 SqlSession 인스턴스를 얻습니다.
  4. 매퍼 가져오기: SqlSession을 통해 특정 매퍼 인스턴스를 가져옵니다.
  5. SQL 실행: Mapper 인터페이스 메소드를 호출하면 MyBatis는 구성 파일의 매핑 정보를 기반으로 특정 SQL 문을 생성하고 실행합니다.
  6. 결과 세트 처리: MyBatis는 데이터베이스가 반환한 결과 세트를 Java 개체에 매핑하고 이를 호출자에게 반환합니다.
  7. 트랜잭션 관리: 트랜잭션 관리자가 구성된 경우 SqlSession은 트랜잭션의 시작, 커밋 또는 롤백을 처리합니다.
  8. SqlSession 닫기: 리소스를 해제합니다.
    // 1. 加载配置文件
    String resource = "mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    
    // 2. 创建SqlSessionFactory
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    
    // 3. 创建SqlSession
    try (SqlSession session = sqlSessionFactory.openSession()) {
        
        // 4. 获取Mapper
        UserMapper mapper = session.getMapper(UserMapper.class);
    
        // 5. 执行SQL
        User user = mapper.selectUser(1);
    
        // 6. 处理结果集
        System.out.println(user);
    
        // 7. 管理事务(如果需要)
        session.commit();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        // 8. 关闭SqlSession
        session.close();
    }