MyBatis 의 구조 와 설정

17138 단어
MyBatis 가 사용 자 를 JDBC 의 방문 에서 해방 시 키 는 것 을 요약 합 니 다. 사용 자 는 조작 해 야 할 SQL 문 구 를 정의 하기 만 하면 바 텀 JDBC 작업 에 관심 을 가지 지 않 아 도 대상 을 대상 으로 하 는 방식 으로 영구적 인 작업 을 할 수 있 습 니 다.바 텀 데이터베이스 연결 의 획득, 데이터 액세스 의 실현, 트 랜 잭 션 제어 등 은 사용자 의 관심 을 필요 로 하지 않 고 응용 층 을 바 텀 JDBC API 에서 추출 하여 파일 관리 JDBC 의 연결 을 통 해 MyBatis 를 사용 하여 지속 적 인 접근 의 실현 을 해결 합 니 다.MyBatis 의 시스템 구조 MyBatis 에서 자주 사용 하 는 대상 은 SqlSession Factory 와 SqlSession 이다.SqlSession Factory SqlSession Factory 는 MyBatis 의 관건 적 인 대상 으로 하나의 데이터베이스 맵 관 계 를 컴 파일 한 메모리 미 러 입 니 다.이 대상 의 인 스 턴 스 는 SqlSession Factory Builder 대상 을 통 해 얻 을 수 있 으 며, SqlSession Factory Builder 는 XML 설정 파일 이나 미리 맞 춤 형 Configuration 의 인 스 턴 스 를 통 해 SqlSession Factory 의 인 스 턴 스 를 구축 할 수 있 습 니 다.모든 MyBatis 응용 프로그램 은 SqlSession Factory 대상 의 인 스 턴 스 를 핵심 으로 합 니 다.이것 은 스 레 드 가 안전 합 니 다. SqlSession Factory 가 생 성 되면 응용 실행 기간 에 존재 해 야 합 니 다.응용 프로그램 이 실행 되 는 동안 반복 해서 만 들 지 말고 단일 모드 를 사용 하 는 것 을 권장 합 니 다.SqlSession Factory 는 SqlSession 의 공장 입 니 다. SqlSession Factory. openSession () 방법 으로 SqlSession 대상 을 만 듭 니 다.https://www.jianshu.com/p/063a5ca8874c)。 SqlSession SqlSession 은 MyBatis 의 관건 적 인 대상 으로 지속 적 인 작업 을 수행 하 는 대상 으로 JDBC 의 Connection 과 유사 합 니 다.이것 은 응용 프로그램 과 영구적 인 저장 소 간 에 상호작용 을 수행 하 는 단일 스 레 드 대상 이자 MyBatis 가 지속 적 인 작업 을 수행 하 는 관건 적 인 대상 이다.SqlSession 대상 은 데이터 베 이 스 를 배경 으로 하 는 모든 SQL 작업 을 수행 하 는 방법 을 포함 하고 있 으 며, 바 텀 에는 JDBC 연결 이 포함 되 어 있 으 며, SqlSession 인 스 턴 스 로 매 핑 된 SQL 문 구 를 직접 실행 할 수 있 습 니 다.모든 스 레 드 에는 자신의 SqlSession 인 스 턴 스 가 있어 야 합 니 다.SqlSession 인 스 턴 스 는 공유 할 수 없고 스 레 드 가 안전 하지 않 습 니 다. SqlSession 인 스 턴 스 의 인용 을 어떠한 유형의 관리 범위 에 도 두 어 서 는 안 됩 니 다. SqlSession 을 사용 한 후에 닫 아야 합 니 다.SqlSession 의 방법 은 다음 과 같은 소스 프로그램 을 볼 수 있 습 니 다.
  1 public interface SqlSession extends Closeable {
  2      T selectOne(String var1);
  3 
  4      T selectOne(String var1, Object var2);
  5 
  6      List selectList(String var1);
  7 
  8      List selectList(String var1, Object var2);
  9 
 10      List selectList(String var1, Object var2, RowBounds var3);
 11 
 12      Map selectMap(String var1, String var2);
 13 
 14      Map selectMap(String var1, Object var2, String var3);
 15 
 16      Map selectMap(String var1, Object var2, String var3, RowBounds var4);
 17 
 18      Cursor selectCursor(String var1);
 19 
 20      Cursor selectCursor(String var1, Object var2);
 21 
 22      Cursor selectCursor(String var1, Object var2, RowBounds var3);
 23 
 24     void select(String var1, Object var2, ResultHandler var3);
 25 
 26     void select(String var1, ResultHandler var2);
 27 
 28     void select(String var1, Object var2, RowBounds var3, ResultHandler var4);
 29 
 30     int insert(String var1);
 31 
 32     int insert(String var1, Object var2);
 33 
 34     int update(String var1);
 35 
 36     int update(String var1, Object var2);
 37 
 38     int delete(String var1);
 39 
 40     int delete(String var1, Object var2);
 41 
 42     void commit();
 43 
 44     void commit(boolean var1);
 45 
 46     void rollback();
 47 
 48     void rollback(boolean var1);
 49 
 50     List flushStatements();
 51 
 52     void close();
 53 
 54     void clearCache();
 55 
 56     Configuration getConfiguration();
 57 
 58      T getMapper(Class var1);
 59 
 60     Connection getConnection();
 61 }
 62 

구체 적 으로 설명 하면 여 기 는 기록 을 하지 않 고 사용 할 때 조회 하면 됩 니 다.메모: 실제 응용 에 서 는 DriverManager 를 사용 하여 데이터 베 이 스 를 연결 하 는 경우 가 많 지 않 습 니 다. 보통 DataSource 를 사용 하여 데이터 베 이 스 를 연결 합 니 다. SqlSession Factory 바 텀 에 DataSource 가 패키지 되 어 있 습 니 다.MyBatis 의 설정 파일 은 앞의 test 테스트 클래스 파일 코드 를 되 돌아 봅 니 다.
  1 public class Test {
  2     public static void main(String[] args) throws IOException {
  3         InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
  4         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  5         SqlSession sqlSession = sqlSessionFactory.openSession();
  6         User user = new User("Snow"," ",20);
  7         sqlSession.insert("com.snow.dcl.mapper.UserMapper.saveUser",user);
  8         sqlSession.commit();
  9         sqlSession.close();
 10     }
 11 }

우선, mybatis - config. xml 합성 파일 읽 기:
  1 InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");

그리고 my batis 를 초기 화하 고 SqlSession Factory 의 인 스 턴 스 를 만 듭 니 다.
  1 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

마지막 으로 SqlSession 대상 을 가 져 와 SQL 문 구 를 실행 합 니 다.
  1 SqlSession sqlSession = sqlSessionFactory.openSession();
  2 ...
  3 sqlSession.insert("com.snow.dcl.mapper.UserMapper.saveUser",user);

이 를 통 해 알 수 있 듯 이 MyBatis 의 초기 화 과정 은 다음 과 같은 절 차 를 거 쳐 야 합 니 다. 1. SqlSession Factory Builder 대상 의 build (input Stream) 방법 을 호출 합 니 다.2. SqlSession Factory Builder 는 입력 흐름 input Stream 등 정보 에 따라 XMLconfigBuilder 대상 을 만 듭 니 다.3. SqlSession Factory Builder 에서 XML configBuilder 대상 의 parse () 방법 을 호출 합 니 다.4. XML configBuilder 대상 은 XML 프로필 을 분석 하여 Configuration 대상 으로 되 돌려 줍 니 다.5. SqlSession Factory Builder 는 Configuration 대상 에 따라 Default Session Factory 대상 을 만 듭 니 다.6. SqlSession Factory Builder 는 클 라 이언 트 가 사용 할 수 있 도록 Default Session Factory 대상 을 클 라 이언 트 에 게 되 돌려 줍 니 다.프로필 속성 MyBatis 의 프로필 은 다음 과 같은 구 조 를 포함 합 니 다. 1. properties 속성 properties 의 속성 은 모두 외부 설정 이 가능 하고 동적 으로 교체 할 수 있 습 니 다. 전형 적 인 자바 속성 파일 에서 설정 할 수도 있 고 properties 요소 의 하위 요 소 를 통 해 전달 할 수도 있 습 니 다.2. settings 설정 settings 는 MyBatis 에서 매우 중요 한 설정 으로 MyBatis 가 실 행 될 때의 행동 을 변경 합 니 다. settings 요 소 는 다음 과 같 습 니 다.
  1 
  2     
  3     logImpl" value="Log4J"/>
  4     
  5     cacheEnabled" value="true"/>
  6 

다른 옵션 은 프로젝트 를 개발 할 때 필요 한 조회 에 따라 사용 할 수 있 습 니 다. 아래 에 일부 인 자 를 보 여 줍 니 다.
매개 변수
묘사 하 다.
유효 치
cacheEnabled
이 설정 은 모든 맵 캐 시 에 영향 을 주 는 전역 스위치 입 니 다.
true/false
lazyLoadingEnabled
로드 지연 전역 스위치
true/false
useGenaratedKeys
JDBC 에서 홈 키 자동 생 성 지원
true/false
logImpl
MyBatis 에 사용 할 로그 의 구체 적 인 구현 을 지정 합 니 다. 지정 되 지 않 았 을 때 자동 으로 찾 습 니 다.
SLF4J/LOG4J/LOG4J2
1. tpyeAliases 형식 이름
형식 별명 은 자바 형식 으로 짧 은 별명 을 설정 합 니 다. XML 설정 과 만 관련 이 있 습 니 다. 존재 하 는 의 미 는 클래스 가 완전히 한 정 된 이름 의 번 거 로 움 을 줄 이 는 데 있 습 니 다.
  1 
  2     User" alias="com.snow.dcl.domain.User"/>
  3 

이렇게 설정 할 때 사용 자 는 com. snow. dcl. domain. User 를 사용 하 는 모든 곳 에 사용 할 수 있 습 니 다.
  1 
  2     <package name="com.snow.dcl.domain"/>
  3 

이렇게 설정 할 때, 각각 com. snow. dcl. domain 가방 에 있 는 자바 빈 은 주석 이 없 는 상태 에서 빈 의 이니셜 소문 자의 비 한정 클래스 이름 을 별명 으로 사용 합 니 다. 예 를 들 어 com. snow. dcl. domain. User 별명 은 user 입 니 다.
  1 @Alias("user")
  2 public class User {
  3     ...
  4 }

주해 가 있 으 면, 별명 은 주해 값 이다.
1. typeHandlers 형식 프로세서
MyBatis 가 전처리 문 (Prepared Statement) 에 인 자 를 설정 할 때 나 결과 에서 한 값 을 집중 적 으로 꺼 낼 때 나 형식 프로세서 로 가 져 온 값 을 자바 형식 으로 변환 합 니 다.
2. objectFactory 대상 공장
MyBatis 는 결과 대상 의 새로운 인 스 턴 스 를 만 들 때마다 대상 공장 인 스 턴 스 를 사용 합 니 다.
3. plugins 플러그 인
4. 환경 환경
   환경 변수
   트 랜 잭 션 관리자
   dataSource 데이터 원본
MyBatis 의 환경 설정 은 실제 데이터 원본 의 설정 입 니 다.MyBatis 는 다양한 환경 을 설정 할 수 있 습 니 다. 이 메커니즘 은 MyBatis 가 다양한 데이터베이스 에 SQL 맵 을 적용 할 수 있 습 니 다.
메모: 여러 환경 을 설정 할 수 있 지만 SqlSession Factory 인 스 턴 스 마다 하나의 환경 만 선택 할 수 있 습 니 다.따라서 두 개의 데이터 베 이 스 를 연결 하려 면 두 개의 SqlSession Factory 인 스 턴 스 를 만들어 야 합 니 다.
앞의 설정 내용 은 다음 과 같 습 니 다.
  1 
  2 default="mysql">
  3     mysql">
  4         
  5         JDBC">
  6         
  7         POOLED">
  8             driver" value="com.mysql.jdbc.Driver">
  9             url" value="jdbc:mysql://127.0.0.1:3306/mybatis?useUnicode=true&characterEncoding=UTF-8">
 10             username" value="root">
 11             password" value="****">
 12         
 13     
 14 

기본 환경 ID (default = "mysql").
모든 environment 요소 가 정의 하 는 환경 ID (id = "my sql").
트 랜 잭 션 관리자 설정 (type = "JDBC").
데이터 원본 설정 (type = "POOLED").
환경 ID 는 이름 을 마음대로 지 을 수 있 습 니 다. 기본 환경 ID 는 정 의 된 환경 ID 와 일치 해 야 합 니 다.
1. databaseIDProvider 데이터베이스 제조 업 체 표지
2. mappers 매 핑 기
MyBatis 는 SQL 문 구 를 직접 써 야 합 니 다. mapper 맵 기 설정 은 MyBatis 가 맵 파일 을 찾 는 곳 을 알려 주 고 이 SQL 문 구 를 찾 습 니 다.
  1 
  2     
  3     mapping/UserMapper.xml">
  4 

이상 은 MyBatis 의 구조 와 프로필 기록 입 니 다.

좋은 웹페이지 즐겨찾기