MyBatis로 : 구성 구문 분석

구성 분석

코어 구성 파일

  • MyBatis로-config.xml 파일 시스템 커널 설정 파일
  • MyBatis로 구성 파일 깊이의 MyBatis의 행동에 영향을 미칠 수있는 설정과 속성이 포함되어 있습니다.
  • 다음과 같은 내용을 구성 할 수 있습니다 :
configuration(配置)
    properties(属性)
    settings(设置)
    typeAliases(类型别名)
    typeHandlers(类型处理器)
    objectFactory(对象工厂)
    plugins(插件)
    environments(环境配置)
        environment(环境变量)
            transactionManager(事务管理器)
            dataSource(数据源)
    databaseIdProvider(数据库厂商标识)
    mappers(映射器)
<!-- 注意元素节点的顺序!顺序不对会报错 -->

우리는 DTD 헤더 파일 위의 MyBatis-config.xml 파일을 읽을 수 있습니다!

환경 요소

<environments default="development">
  <environment id="development"> <transactionManager type="JDBC"> <property name="..." value="..."/> </transactionManager> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments>
  • 운영 환경의 구성의 MyBatis 여러 세트는 기본 실행 환경으로 지정 (기본적으로 지정)해야 하나가 다른 SQL 데이터베이스, 복수의 매핑 될
  • 자식 요소 노드 : 환경

    • ID를 설정하여 구별 환경의 특정 세트, ID는 고유합니다!
    • 자식 요소 노드 :의 transactionManager - [주최자]

      <!-- 语法 -->
      <transactionManager type="[ JDBC | MANAGED ]"/>
    • 자식 요소 노드 : 데이터 소스 (DataSource에)

      • JDBC 표준 데이터 소스 인터페이스 구성된 자원 JDBC 연결 객체 사용은 dataSource 소자.
      • 데이터 소스를 구성해야합니다.
      • 세 가지 유형이 있습니다 내장 데이터 소스

        type="[UNPOOLED|POOLED|JNDI]")
      • 풀링되지 않은 개업 및이를위한 연결을 종료하지만, 각 데이터 소스가 요구된다.
      • 풀링 이 데이터 소스는 동시 처리 요구에 응답하게하는 인기있는 웹 애플리케이션이다 JDBC 연결 개체를 구성한다 "셀"의 개념을 사용하여 구현된다.
      • JNDI이 데이터 소스는 기준 JNDI 컨텍스트를 배치 한 후 중앙 또는 구성 데이터는 외부 소스로 될 수 있으며, 예컨대 스프링 또는 컨테이너 등의 어플리케이션 서버에서 사용될 수있는 실현하는 것이다.
      • 같은 DBCP, C3P0, 드루이드와 같은 등등 달성하기 위해 많은 타사 데이터 소스는 ....도 있습니다

맵퍼 요소

맵퍼

  • 매퍼 : SQL 문 파일을 매핑 정의
  • 수행 구성된 다른 요소의 MyBatis로 동작하기 때문에, 우리는 우리의 매핑 된 SQL 문을 정의 할 준비가 된 것입니다. 하지만 먼저 우리는 어디를 찾을 수 MyBatis로 말할 필요가있다. 자바는 자동으로 가장 좋은 방법은 어디 맵 파일을 찾을 수 MyBatis로 얘기하는 것입니다, 그래서 좋은 방법을 제공하지 않습니다이 지역에서 찾을 수 있습니다. 당신은 참조에 자원 클래스의 상대 경로 또는 정규화 된 리소스 로케이터 (를 포함하여 사용할 수 있습니다  file:/// 같은 URL에서), 클래스와 패키지 이름, 또는를. 모든 SQL 문이 XML 파일에 구성해야합니다 매퍼는 MyBatis로 3 전에 만 즉 XML 매퍼를 지원, MyBatis로의 핵심 구성 요소 중 하나입니다. 시작 MyBatis로 (3) 또한 인터페이스 매퍼 지원에서,이 방법은 자바 코드 주석을 정의 SQL 문은 매우 간단 수 있습니다 매퍼.

자원의 방법을 소개합니다

<!-- 使用相对于类路径的资源引用 -->
<mappers>
  <mapper resource="org/mybatis/builder/PostMapper.xml"/> </mappers>
<!-- 使用完全限定资源定位符(URL) -->
<mappers>
  <mapper url="file:///var/mappers/AuthorMapper.xml"/> </mappers>
<!-- 
使用映射器接口实现类的完全限定类名
需要配置文件名称和接口名称一致,并且位于同一目录下
-->
<mappers>
  <mapper class="org.mybatis.builder.AuthorMapper"/> </mappers>
<!-- 
将包内的映射器接口实现全部注册为映射器
但是需要配置文件名称和接口名称一致,并且位于同一目录下
-->
<mappers>
  <package name="org.mybatis.builder"/> </mappers>

매퍼 파일

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.kuang.mapper.UserMapper"> </mapper>
  • 중국 의미를 네임 스페이스 : 네임 스페이스 역할로 다음입니다 :

    1. 아이디 네임 스페이스와 공동 보증 고유의 하위 요소는 다른 매퍼 구분
    2. 바인딩 DAO 인터페이스

      • 네임 스페이스는 인터페이스와 동일한 이름으로 지정해야합니다
      • SQL 문을의 방법 및 맵핑 파일 인터페이스 ID가 일치해야합니다
    3. 네임 스페이스 이름 지정 규칙 : 패키지 명 + 클래스 이름을

마법의 거짓말 자사의 MyBatis 매핑 문에 실제 전력 거짓말. 때문에 매우 강력한으로, XML 매퍼 파일은 상대적으로 간단해진다. 당신이 동일한 기능을 가진 JDBC 코드와 비교 걸릴 경우, 즉시 코드의 약 95 % 저장 찾을 수 있습니다. MyBatis로는 가능한 한 당신을 위해 번거 로움을 줄이기 위해 SQL에 초점을 지어졌습니다.

속성 최적화

이러한 데이터베이스는 외부에서 설정 가능한 속성 및 동적 교체되는 전형적인 자바 파일 속성에 배치 될 수 있고, 서브 - 소자는 또한 특성 요소에 의해 전송 될 수있다. 특정 공식 문서

우리는 우리의 구성 파일을 최적화

첫 번째 단계; db.properties에서 자원 디렉토리를 생성

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8
username=root password=123456

단계 : 구성 파일 등록 정보로 파일

<configuration>
    <!--导入properties文件-->
    <properties resource="db.properties"/> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <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="mapper/UserMapper.xml"/> </mappers> </configuration>

추가 작업, 당신은 공식 문서를 볼 수 있습니다! [프리젠 테이션] 연구를 주도

  • 프로필 우선 순위 문제
  • 새로운 기능 : 사용의 자리

typeAliases 최적화

Java 유형에 대한 별칭이 짧은 이름을 설정 입력합니다. 그리고 존재의 의미에 관한에만 XML의 구성은 중복 정규화 된 클래스 이름을 줄이기 위해 사용된다.

<!--配置别名,注意顺序-->
<typeAliases>
    <typeAlias type="com.kuang.pojo.User" alias="User"/> </typeAliases>

이렇게 구성하면, User그것은 어떤에서 사용할 수 있습니다 com.kuang.pojo.User장소.

또한 같은 자바 빈을, 필요한 아래의 MyBatis는 패키지 이름을 검색합니다, 패키지 이름을 지정할 수 있습니다 :

<typeAliases>
    <package name="com.kuang.pojo"/> </typeAliases>

에서 각 패키지  com.kuang.pojo , 주석이 없을 경우, 첫 글자를 사용하는 자바 콩은 별칭으로 콩 이외의 클래스 이름을 소문자.

주석은 주석 값의 별칭입니다 경우. 다음 예를 참조하십시오 :

@Alias("user")
public class User { ... }

[발표] 별명 어떤 종류의 Quguan 네트워크 모양의 MyBatis 기본!

설정

  • 설정 (설정) 관련 => 도움말 문서

    • 게으른 로딩
    • 로그인 달성
    • 캐시에 해제
  • 요소 다음 완전히 구성된 설정의 예 :

    <settings>
      <setting name="cacheEnabled" value="true"/> <setting name="lazyLoadingEnabled" value="true"/> <setting name="multipleResultSetsEnabled" value="true"/> <setting name="useColumnLabel" value="true"/> <setting name="useGeneratedKeys" value="false"/> <setting name="autoMappingBehavior" value="PARTIAL"/> <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/> <setting name="defaultExecutorType" value="SIMPLE"/> <setting name="defaultStatementTimeout" value="25"/> <setting name="defaultFetchSize" value="100"/> <setting name="safeRowBoundsEnabled" value="false"/> <setting name="mapUnderscoreToCamelCase" value="false"/> <setting name="localCacheScope" value="SESSION"/> <setting name="jdbcTypeForNull" value="OTHER"/> <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/> </settings>

프로세서 종류

공식 문서

  • MyBatis로 설정되는 파라미터는 상기 농축기에서 문 (PreparedStatement의)을 제조하거나 결과로부터의 값을 검색하고 있는지의 여부를 프로세서 취득한 유형 값과 Java 유형에 적합하게 될 것이다.
  • 당신은 프로세서의 유형을 무시하거나 지원하지 않는 프로세서의 종류 또는 표준이 아닌 유형의 거래를 직접 만들 수 있습니다. [이해하기]

개체 공장

공식 문서

  • 의 MyBatis 결과 객체가 생성 될 때마다 새로운 인스턴스는, 그렇게 할 객체 팩토리 (ObjectFactory를) 인스턴스를 사용합니다.
  • 기본 객체 팩토리는 할 대상 클래스의 예를 필요로하거나 기본 생성자, 또는 경우에 존재하는 참조 매개 변수지도 생성자에 의해 인스턴스화.
  • 당신이 객체 팩토리의 기본 동작을 재정의하려는 경우, 당신은 당신의 자신의 객체 팩토리를 작성하여 수행 할 수 있습니다. [이해하기]

수명주기 및 범위

범위 (범위) 및 수명주기

잘못된 사용은 매우 심각한 동시성 문제가 발생할 수 있기 때문에 우리가 이미 논의 된 다른 범위 및 라이프 사이클 클래스, 중요 이해합니다.

우리는 먼저 플로우 차트, 구현 과정의 MyBatis의 분석을 그릴 수 있습니다!

1567006707407.png

범위 이해

  • 역할이 성공을 만들고, SqlSessionFactoryBuilder를 SqlSessionFactory는을 만드는 것입니다 후가에서 SqlSessionFactory는을 만들 수있는 유일한 방법은있을 수 있지만, 시간이 오래하지 않도록, SqlSessionFactoryBuilder를이 효과를 잃게됩니다. 따라서  범위의 실시 예는 방법 SqlSessionFactoryBuilder를 범위이다 (즉, 로컬 변수 법).
  • SqlSessionFactory는이 데이터베이스 연결 풀 고려 될 수있다, 그 역할은 SQLSESSION 인터페이스 객체를 생성하는 것입니다. MyBatis로의 본질은 데이터베이스의 자바 작업, 그래서 SqlSessionFactory는 수명주기가 더 이상 사용의 MyBatis 애플리케이션까지,이 SqlSessionFactory는 삶 간주 될 수 있으므로 SqlSessionFactory는 생성되면, 장기 보존에 필요하며, 전체 애플리케이션의 MyBatis에 존재이기 때문에 응용 프로그램의 기간의 MyBatis 기간에 해당.
  • SqlSessionFactory는 데이터베이스에 연결 풀이기 때문에, 그래서 연결 자원 데이터베이스를 차지한다. 여러 SqlSessionFactory는을 작성하는 경우 그 데이터베이스 자원의 관리에 도움이되지 않도록하고, 더 하나 개의 데이터베이스 연결 풀보다가, 그래서 이런 일이 발생하지 않도록하려고, 등, 시스템 다운 타임을 고갈 표시하는 데이터베이스 연결 리소스가 발생합니다.
  • 그래서 일반적으로, 우리는 싱글로 SqlSessionFactory는 응용 프로그램을 원하는 경향이 응용 프로그램을 공유됩니다. 따라서  응용 프로그램 범위의 가장 SqlSessionFactory는 범위.
  • SqlSessionFactory는 해당 데이터베이스 연결 풀 경우, SQLSESSION 데이터베이스 연결 (연결 개체)에 해당, 당신은 다음 다시 트랜잭션을 롤백하고 다른 방법 커밋 또는 롤을 투입, 단일 트랜잭션에서 여러 개의 SQL을 실행할 수 있습니다. 이 서비스 요청에서 생존해야한다 그래서 사용 시도 ... 캐치 있도록, 전체 요청을 처리 한 후,이 SqlSessionFactory는 반환이 연결을 종료해야한다, 또는 데이터베이스 자원은 곧 시스템이 마비 될 것이며, 알몸 투입된다 ... 마지막으로 ... 문은 적절한 가까운을 보장합니다.
  • 따라서, 범위 SQLSESSION 최선의 방법은 요청 또는 범위이다.

1567007397555.png

추천

출처www.cnblogs.com/wpy188/p/12375452.html