구성 분석
코어 구성 파일
- 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>
-
중국 의미를 네임 스페이스 : 네임 스페이스 역할로 다음입니다 :
- 아이디 네임 스페이스와 공동 보증 고유의 하위 요소는 다른 매퍼 구분
-
바인딩 DAO 인터페이스
- 네임 스페이스는 인터페이스와 동일한 이름으로 지정해야합니다
- SQL 문을의 방법 및 맵핑 파일 인터페이스 ID가 일치해야합니다
- 네임 스페이스 이름 지정 규칙 : 패키지 명 + 클래스 이름을
마법의 거짓말 자사의 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의 분석을 그릴 수 있습니다!
범위 이해
- 역할이 성공을 만들고, SqlSessionFactoryBuilder를 SqlSessionFactory는을 만드는 것입니다 후가에서 SqlSessionFactory는을 만들 수있는 유일한 방법은있을 수 있지만, 시간이 오래하지 않도록, SqlSessionFactoryBuilder를이 효과를 잃게됩니다. 따라서 범위의 실시 예는 방법 SqlSessionFactoryBuilder를 범위이다 (즉, 로컬 변수 법).
- SqlSessionFactory는이 데이터베이스 연결 풀 고려 될 수있다, 그 역할은 SQLSESSION 인터페이스 객체를 생성하는 것입니다. MyBatis로의 본질은 데이터베이스의 자바 작업, 그래서 SqlSessionFactory는 수명주기가 더 이상 사용의 MyBatis 애플리케이션까지,이 SqlSessionFactory는 삶 간주 될 수 있으므로 SqlSessionFactory는 생성되면, 장기 보존에 필요하며, 전체 애플리케이션의 MyBatis에 존재이기 때문에 응용 프로그램의 기간의 MyBatis 기간에 해당.
- SqlSessionFactory는 데이터베이스에 연결 풀이기 때문에, 그래서 연결 자원 데이터베이스를 차지한다. 여러 SqlSessionFactory는을 작성하는 경우 그 데이터베이스 자원의 관리에 도움이되지 않도록하고, 더 하나 개의 데이터베이스 연결 풀보다가, 그래서 이런 일이 발생하지 않도록하려고, 등, 시스템 다운 타임을 고갈 표시하는 데이터베이스 연결 리소스가 발생합니다.
- 그래서 일반적으로, 우리는 싱글로 SqlSessionFactory는 응용 프로그램을 원하는 경향이 응용 프로그램을 공유됩니다. 따라서 응용 프로그램 범위의 가장 SqlSessionFactory는 범위.
- SqlSessionFactory는 해당 데이터베이스 연결 풀 경우, SQLSESSION 데이터베이스 연결 (연결 개체)에 해당, 당신은 다음 다시 트랜잭션을 롤백하고 다른 방법 커밋 또는 롤을 투입, 단일 트랜잭션에서 여러 개의 SQL을 실행할 수 있습니다. 이 서비스 요청에서 생존해야한다 그래서 사용 시도 ... 캐치 있도록, 전체 요청을 처리 한 후,이 SqlSessionFactory는 반환이 연결을 종료해야한다, 또는 데이터베이스 자원은 곧 시스템이 마비 될 것이며, 알몸 투입된다 ... 마지막으로 ... 문은 적절한 가까운을 보장합니다.
- 따라서, 범위 SQLSESSION 최선의 방법은 요청 또는 범위이다.