My Batis XML 매핑 구성 파일의 자세한 예

Y2J
풀어 주다: 2017-04-24 09:33:29
원래의
2267명이 탐색했습니다.

[java] 일반 사본 보기

<span style="font-size:14px;">  My Batis 支持SQL查询,是一些高级映射在持久层的完美展示。他更多的使用简单的XML或注解用于配置和原始映射,<span style="color: rgb(54, 54, 54); font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; line-height: 24px; ">摒除了大量的JDBC代码、手工设置参数和结果集封装,提高了开发效率。</span></span>
로그인 후 복사

MyBatis의 XML 구성 파일에는 MyBatis의 동작에 중대한 영향을 미치는 설정 및 속성 정보가 포함되어 있습니다. XML 문서의 상위 구조는 다음과 같습니다:

구성 구성

환경 환경 변수

transactionManager 트랜잭션 관리자

dataSource 데이터 source

속성

설정

typeAliases 유형 이름 지정

typeHandlers 유형 프로세서

objectFactory 개체 팩토리

플러그인

환경 환경

매퍼

다음은 각 속성 구성

속성
에 대한 자세한 소개입니다. 일반적인 Java 속성 구성 파일에서 구성되거나 속성 요소의 하위 요소를 통해 전달됩니다.

<如> 예:

[html] view plain copy
<properties resource="jdbc_mysql.properties" />  
[html] view plain copy
<dataSource type="POOLED">  
[html] view plain copy
<property name="driver" value="${driver}"/>  
[html] view plain copy
<property name="url" value="${url}"/>  
[html] view plain copy
<property name="username" value="${username}"/>  
[html] view plain copy
<property name="password" value="${password}"/>  
[html] view plain copy
</dataSource>
로그인 후 복사

이 예에서 사용자 이름과 비밀번호는 속성 요소에 설정된 값으로 대체됩니다. 드라이버 및 URL 속성은 포함된 jdbc_mysql.properties 파일의 값으로 대체됩니다.

설정

이는 MyBatis가 런타임에 동작하는 방식을 수정하는 매우 중요한 조정입니다. 다음 표에는 설정 정보, 해당 의미 및 기본값이 설명되어 있습니다.

매개변수 설정                                                       acheEnabled 이 구성은 매퍼에 대해 전역적으로 캐시를 활성화하거나 비활성화합니다.

lazyLoadingEnabled 지연 로딩을 전역적으로 활성화하거나 비활성화합니다. 비활성화되면 관련된 모든 개체가 즉시 로드됩니다.

aggressiveLazyLoading 활성화되면 지연 로딩 속성이 있는 객체가 호출될 때 모든 속성을 완전히 로드합니다. 그렇지 않으면 필요에 따라 각 속성이 로드됩니다.

multipleResultSetsEnabled 단일 문에서 여러 결과 세트가 반환되는 것을 허용하거나 허용하지 않습니다(적절한 드라이버 필요).

useColumnLabel 열 이름 대신 열 레이블을 사용합니다. 여기에서는 운전자마다 다르게 행동합니다. 사용할 드라이버를 결정하려면 드라이버 설명서나 철저한 테스트를 참조하십시오.

useGeneratedKeys JDBC가 생성된 키를 지원할 수 있도록 합니다. 적합한 드라이버가 필요합니다. true로 설정하면 일부 드라이버가 호환성을 거부하지만 여전히 작동하더라도(예: Derby) 이 설정은 생성된 키를 강제로 사용합니다.

autoMappingBehavior MyBatis가 열을 필드/속성에 자동으로 매핑하는 방법을 지정합니다. PARTIAL은 중첩되지 않은 단순 결과만 자동으로 매핑합니다. FULL은 임의로 복잡한 결과(중첩 또는 기타)를 자동으로 매핑합니다.

defaultExecutorType 기본 실행기를 구성합니다. SIMPLE 액추에이터에는 특별한 것이 없습니다. REUSE 실행자는 준비된 명령문을 재사용합니다. BATCH 실행기는 명령문 및 일괄 업데이트를 재사용합니다.

defaultStatementTimeout 드라이버가 데이터베이스 응답을 기다리는 시간을 결정하는 제한 시간을 설정합니다.

정보 요소 설정의 예.

<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="enhancementEnabled" value="false"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
<setting name="defaultStatementTimeout" value="25000"/>
</settings>
로그인 후 복사

typeAliases

유형 별칭은 Java 유형에 짧은 이름을 부여하는 것입니다. 이는 XML 구성에만 관련되며 정규화된 클래스 이름의 중복 부분을 줄이는 데만 사용됩니다. 예:

[html] view plain copy
<typeAliases>  
[html] view plain copy
<typeAlias alias="Author" type="domain.blog.Author"/>  
[html] view plain copy
<typeAlias alias="Blog" type="domain.blog.Blog"/>  
[html] view plain copy
<typeAlias alias="Comment" type="domain.blog.Comment"/>  
[html] view plain copy
<typeAlias alias="Post" type="domain.blog.Post"/>  
[html] view plain copy
<typeAlias alias="Section" type="domain.blog.Section"/>  
[html] view plain copy
<typeAlias alias="Tag" type="domain.blog.Tag"/>  
[html] view plain copy
</typeAliases>
로그인 후 복사

이 구성을 사용하면 "domain.blog.Blog"가 사용되는 모든 곳에서 "Blog"를 사용할 수 있습니다.

typeHandlers

MyBatis가 준비된 명령문에 매개변수를 설정하든 결과 세트에서 값을 검색하든, 유형 핸들러는 획득된 값을 적절한 방식으로 Java 유형으로 변환하는 데 사용됩니다. 다음 목록에서는 기본 유형 처리기에 대해 설명합니다. 순서대로, 유형 핸들러 Java 유형 JDBC 유형

BooleanTypeHandler Boolean, boolean 호환되는 모든 부울 값

ByteTypeHandler Byte, byte 호환되는 모든 숫자 또는 바이트 유형

ShortTypeHandler              Short , short             ~ ~                        모두 호환되는 숫자 또는 긴

FloatTypeHandler Float,float 任何兼容的数字或单精度浮点型

DoubleTypeHandler Double,double 任何兼容的数字或双精度浮点型

BigDecimalTypeHandler BigDecimal 任何兼容的数字或十进制小数类型

StringTypeHandler String CHAR和VARCHAR类型

ClobTypeHandler String CLOB和LONGVARCHAR类型

NStringTypeHandler String NVARCHAR和NCHAR类型

NClobTypeHandler String NCLOB类型

ByteArrayTypeHandler byte[] 任何兼容的字节流类型

BlobTypeHandler byte[] BLOB和LONGVARBINARY类型

DateTypeHandler Date(java.util) TIMESTAMP类型

DateOnlyTypeHandler Date(java.util) DATE类型

TimeOnlyTypeHandler Date(java.util) TIME类型

SqlTimestampTypeHandler Timestamp(java.sql) TIMESTAMP类型

SqlDateTypeHandler Date(java.sql) DATE类型

SqlTimeTypeHandler Time(java.sql) TIME类型

ObjectTypeHandler Any 其他或未指定类型

EnumTypeHandler Enumeration类型 VARCHAR-任何兼容的字符串类型,作为代码存储(而不是索引)。

objectFactory
MyBatis每次创建结果对象新的实例时,它使用一个ObjectFactory实例来完成。如果参数映射存在,默认的ObjectFactory不比使用默认构造方法或带参数的构造方法实例化目标类做的工作多。

plugins
MyBatis允许你在某一点拦截已映射语句执行的调用。默认情况下,MyBatis允许使用插件来拦截方法调用:

Executor
            (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
 ParameterHandler
            (getParameterObject, setParameters)
 ResultSetHandler
          (handleResultSets, handleOutputParameters)
 StatementHandler
로그인 후 복사

(prepare, parameterize, batch, update, query)
这些类中方法的详情可以通过查看每个方法的签名来发现,而且它们的源代码在MyBatis的发行包中有。你应该理解你覆盖方法的行为,假设你所做的要比监视调用要多。如果你尝试修改或覆盖一个给定的方法,你可能会打破MyBatis的核心。这是低层次的类和方法,要谨慎使用插件。

使用插件是它们提供的非常简单的力量。简单实现拦截器接口,要确定你想拦截的指定签名。

java代码:

[javascript] view plain copy
@Intercepts({@Signature(type= Executor.class,method = "update",  
[javascript] view plain copy
args = {MappedStatement.class,Object.class})})  
[javascript] view plain copy
public class ExamplePlugin implements Interceptor {  
[javascript] view plain copy
public Object intercept(Invocation invocation) throws Throwable  
[javascript] view plain copy
{  
[javascript] view plain copy
return invocation.proceed();  
[javascript] view plain copy
}  
[javascript] view plain copy
public Object plugin(Object target) {  
[javascript] view plain copy
return Plugin.wrap(target, this);  
[javascript] view plain copy
}  
[javascript] view plain copy
public void setProperties(Properties properties) {  
[javascript] view plain copy
}  
[html] view plain copy
MapperConfig.xml  
[html] view plain copy
<plugins>  
[html] view plain copy
<plugin interceptor="org.mybatis.example.ExamplePlugin">  
[html] view plain copy
<property name="someProperty" value="100"/>  
[html] view plain copy
</plugin>  
[html] view plain copy
</plugins>  
[html] view plain copy
로그인 후 복사

上面的插件将会拦截在Executor实例中所有的“update”方法调用,它也是负责低层次映射语句执行的内部对象。

environments

[html] view plain copy
<environments default="development">  
        <environment id="development">  
            <transactionManager type="JDBC" />  
            <dataSource type="POOLED">  
                <property name="driver" value="${jdbc.driver}" />  
                <property name="url" value="${jdbc.url}"/>  
                <property name="username" value="${jdbc.user}" />  
                <property name="password" value="${jdbc.password}" />  
                                <property name="poolPingEnabled" value="true"/>  
                <property name="poolPingQuery" value="SELECT * FROM app_setup_setting WHERE name=&#39;allow_setup_unknown_app&#39;" />  
                        <property name="poolPingConnectionsNotUsedFor" value="7200000"/>   
            </dataSource>  
        </environment>  
    </environments>  
dataSsource
로그인 후 복사

dataSource元素使用基本的JDBC数据源接口来配置JDBC连接对象的资源。见上
transactionManager

在MyBatis中有两种事务管理器类型(也就是type=”[JDBC|MANAGED]”):
1.JDBC – 这个配置直接简单使用了JDBC的提交和回滚设置。它依赖于从数据源得到的连接来管理事务范围。
2.MANAGED – 这个配置几乎没做什么。它从来不提交或回滚一个连接。而它会让容器来管理事务的整个生命周期(比如Spring或JEE应用服务器的上下文)。默认情况下它会关闭连接。然而一些容器并不希望这样,因此如果你需要从连接中停止它,将closeConnection属性设置为false。例如:

[html] view plain copy
<transactionManager type="MANAGED">  
<property name="closeConnection" value="false"/>  
</transactionManager>
로그인 후 복사

这两种事务管理器都不需要任何属性。然而它们都是类型别名,要替换使用它们,你需要放置将你自己的类的完全限定名或类型别名,它们引用了你对TransacFactory接口的实现类。
public interface TransactionFactory {
void setProperties(Properties props);
Transaction newTransaction(Connection conn, boolean autoCommit);
}
任何在XML中配置的属性在实例化之后将会被传递给setProperties()方法。你的实现类需要创建一个事务接口的实现,这个接口也很简单:

[html] view plain copy
public interface Transaction {  
Connection getConnection();  
void commit() throws SQLException;  
void rollback() throws SQLException;  
void close() throws SQLException;  
}
로그인 후 복사

使用这两个接口,你可以完全自定义MyBatis对事务的处理。

mappers

既然MyBatis的行为已经由上述元素配置完了,我们现在就要定义SQL映射语句了。但是,首先我们需要告诉MyBatis到哪里去找到这些语句。Java在这方面没有提供一个很好的方法,所以最佳的方式是告诉MyBatis到哪里去找映射文件。你可以使用相对于类路径的资源引用,或者字符表示,或url引用的完全限定名(包括file:///URLs)。例如:

[html] view plain copy
// Using classpath relative resources(首选)  
<mappers>  
<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>  
<mapper resource="org/mybatis/builder/BlogMapper.xml"/>  
<mapper resource="org/mybatis/builder/PostMapper.xml"/>  
</mappers>  
// Using url fully qualified paths  
<mappers>  
<mapper url="file:///var/sqlmaps/AuthorMapper.xml"/>  
<mapper url="file:///var/sqlmaps/BlogMapper.xml"/>  
<mapper url="file:///var/sqlmaps/PostMapper.xml"/>  
</mappers>
로그인 후 복사

위 내용은 My Batis XML 매핑 구성 파일의 자세한 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!