Maison  >  Article  >  développement back-end  >  Exemple détaillé du fichier de configuration du mappage XML My Batis

Exemple détaillé du fichier de configuration du mappage XML My Batis

Y2J
Y2Joriginal
2017-04-24 09:33:292214parcourir

[java] afficher la copie simple

<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>

Le fichier de configuration XML de MyBatis contient des paramètres et des informations d'attribut qui affectent profondément le comportement de MyBatis. La structure de haut niveau du document XML est la suivante :

configuration configuration

variables d'environnement d'environnement

transactionManager gestionnaire de transactions

données dataSource source

propriétés

paramètres

typeAliases dénomination du type

typeHandlers type processeur

fabrique d'objets objectFactory

plugins

environnements

mappeur

Ce qui suit est une introduction détaillée à chaque configuration de propriété

propriétés
Ce sont des propriétés externalisées et remplaçables, qui peuvent également être configuré dans un fichier de configuration de propriétés Java typique ou transmis via des éléments enfants de l'élément Properties.

Par exemple :

[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>
Le nom d'utilisateur et le mot de passe dans cet exemple seront remplacés par les valeurs définies dans l'élément Propriétés. Les propriétés du pilote et de l'URL seront remplacées par les valeurs du fichier jdbc_mysql.properties inclus.

Paramètres

Ce sont des ajustements extrêmement importants qui modifieront le comportement de MyBatis au moment de l'exécution. Le tableau suivant décrit les informations de réglage, leur signification et leurs valeurs par défaut.

Définition des paramètres                                                           acheEnabled Cette configuration active ou désactive le cache globalement pour le mappeur.

lazyLoadingEnabled Active ou désactive globalement le chargement paresseux. Lorsqu'il est désactivé, tous les objets associés sont chargés à la volée.

aggressiveLazyLoading Lorsqu'il est activé, les objets avec des propriétés de chargement différé chargeront complètement toutes les propriétés lorsqu'ils seront appelés. Sinon, chaque propriété sera chargée selon les besoins.

multipleResultSetsEnabled Autorise ou interdit le renvoi de plusieurs ensembles de résultats à partir d'une seule instruction (nécessite un pilote approprié).

useColumnLabel Utilisez des étiquettes de colonnes au lieu des noms de colonnes. Différents conducteurs se comportent différemment ici. Reportez-vous à la documentation du pilote ou à des tests approfondis pour déterminer quel pilote utiliser.

useGeneratedKeys Permet à JDBC de prendre en charge les clés générées. Un chauffeur approprié est requis. S'il est défini sur true, ce paramètre force l'utilisation des clés générées, bien que certains pilotes refusent la compatibilité mais fonctionnent toujours (comme Derby).

autoMappingBehavior Spécifie comment MyBatis mappe automatiquement les colonnes aux champs/propriétés. PARTIAL ne mappera automatiquement que des résultats simples, sans imbrication. FULL mappera automatiquement des résultats arbitrairement complexes (imbriqués ou non).

defaultExecutorType Configure l'exécuteur par défaut. L'actionneur SIMPLE n'a rien de spécial. L'exécuteur REUSE réutilise les instructions préparées. L'exécuteur BATCH réutilise les instructions et les mises à jour par lots

defaultStatementTimeout Définissez le délai d'attente, qui détermine la durée pendant laquelle le pilote attend une réponse de la base de données.

Un exemple de définition d'éléments d'information. La configuration complète est la suivante :

typeAliases

<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>

Les alias de type sont des noms courts pour les types Java. Il n'est pertinent que pour la configuration XML et n'est utilisé que pour réduire la partie redondante du nom de classe complet. Par exemple :

En utilisant cette configuration, "Blog" peut être utilisé partout où "domain.blog.Blog" est utilisé.

[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>
typeHandlers

Que MyBatis définisse un paramètre dans une instruction préparée ou récupère une valeur de l'ensemble de résultats, le gestionnaire de type est utilisé pour convertir la valeur obtenue en un type Java de manière appropriée. La liste suivante décrit les gestionnaires de types par défaut. Dans l'ordre, tapez le gestionnaire Type Java Type JDBC

BooleanTypeHandler Boolean, boolean Toute valeur booléenne compatible

ByteTypeHandler Octet, octet Tout nombre ou type d'octet compatible

ShortTypeHandler              Short , short                                                                                                                                                                                                                                         Toutes numéro compatible ou long

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>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn