MyBatis タイプエイリアス

クラスの完全修飾名は非常に長いため、広範囲に使用する必要がある場合に常にそのような長い名前を記述するのは不便です。MyBatis では、このクラスを表す略記法 (エイリアス) を定義することができます。エイリアスは、システム定義のエイリアスとカスタム エイリアスに分類されます。

MyBatis のエイリアスは、クラス TypeAliasRegistry (org.apache.ibatis.type.TypeAliasRegistry) によって定義されます。MyBatis ではエイリアスの大文字と小文字が区別されないことに注意してください。

システム定義のエイリアス

MyBatis の初期化プロセス中に、次の表に示すように、システムはいくつかのエイリアスを自動的に初期化します。
 

エイリアス

Java タイプ 配列をサポートするかどうか

_バイト

バイト はい

_長さ

長さ はい

_短い

短い はい

_int

整数 はい

_整数

整数 はい

_ダブル

ダブル はい

_浮く

浮く はい

_boolean

ブール値 はい

はい

バイト

バイト はい

長さ

長さ はい
短い 短い はい
整数 整数 はい
整数 整数 はい
ダブル ダブル はい
浮く 浮く はい
ブール値 ブール値 はい
日付 日付 はい
10進数 BigDecimal はい
大小数 BigDecimal はい
物体 物体 はい
地図 地図 いいえ
ハッシュマップ ハッシュマップ いいえ
リスト リスト いいえ
配列リスト 配列リスト いいえ
コレクション コレクション いいえ
イテレータ イテレーター いいえ
結果セット 結果セット いいえ

対応する型の配列型を使用する必要がある場合は、データをサポートできるかどうかによって異なります。サポートしている場合は、 alias を追加するだけで済みます [] 。たとえば、 _int 配列のエイリアスは _int[] です。ただし、配列をサポートしていない list のようなエイリアスは、そのように記述することはできません。

場合によっては、コードを通じてエイリアスを登録する必要がある場合があります。以下に示すように、MyBatis がこれらのエイリアスをどのように初期化するかを見てみましょう。

public TypeAliasRegistry() { 
    registerAlias("string", String.class); 

    registerAlias("バイト", Byte.class); 
    registerAlias("long", Long.class); 
    ...... 
    registerAlias("byte[]",Byte[].class); registerAlias("long[]",Long[].class); 
    ...... 
    registerAlias("map", Map.class); 
    registerAlias("ハッシュマップ", HashMap.class); 
    registerAlias("リスト", List.class); registerAlias("配列リスト", ArrayList.class); 
    registerAlias("コレクション", Collection.class); 
    registerAlias("イテレータ", Iterator.class); 
    registerAlias("ResultSet", ResultSet.class); 
}

そこで、TypeAliasRegistryの registerAlias メソッドを使用してエイリアスを登録します。一般に、TypeAliasRegistry クラス オブジェクトは Configuration を通じて取得され、configuration.getTypeAliasRegistry() などのエイリアスを取得する getTypeAliasRegistry メソッドがあります。

次に、 registerAlias メソッドを通じてエイリアスを登録できます。実際、Configuration オブジェクトは、次に示すように、一般的に使用されるいくつかの構成項目のエイリアスも構成します。

クラス); typeAliasRegistry.registerAlias("WEAK", WeakCache.class);
//データベース库标识别名
typeAliasRegistry.registerAlias("DB_VENDOR", 
VendorDatabaseIdProvider.class); 
//言語ドライバーのクラス名
typeAliasRegistry.registerAlias("XML",XMLLanguageDriver.class); 
typeAliasRegistry.registerAlias("RAW",RawLanguageDriver.class); 
//日志类别名
typeAliasRegistry.registerAlias("SLF4J", Slf4jImpl.class); 
typeAliasRegistry.registerAlias("COMMONS_LOGGTNG",JakartmCommonsLogginglmpl.class); 
typeAliasRegistry.registerAlias("LOG4J", Log4jImpl.class); 
typeAliasRegistry.registerAlias("LOG4J2", Log4j2Impl.class); 
typeAliasRegistry.registerAlias("JDK_LOGGING", Jdk14LoggingImpl.class); 
typeAliasRegistry.registerAlias("STDOUT_LOGGING", StdOutImpl.class); 
typeAliasRegistry.registerAlias("NO_LOGGING",NoLoggingImpl.class); 
//アニメーション代理人名
タイプAliasRegistry。
typeAliasRegistry.registerAlias("JAVASSIST",JavassistProxyFactory.class);

これらの設定は、MyBatis 関連情報の設定を容易にするためのものです。上記は、MyBatis システムで定義されているエイリアスです。これらを使用する場合、別の問題を引き起こす可能性があるため、名前を繰り返さないでください。

カスタムエイリアス

実際には、特に大規模なインターネット システムでは、ユーザー (User) オブジェクトなど、繰り返し使用する必要があるオブジェクトが多数存在するため、MyBatis はユーザー定義のエイリアスのルールも提供します。TypeAliasRegistry クラスの registerAlias メソッドを通じて登録することも、構成ファイルまたは scan メソッドを使用してカスタマイズすることもできます。

構成ファイル定義の使用は簡単です。

<typeAliases><!--别名-->
    <typeAlias alias="role" type="com.mybatis.po.Role"/>
    <typeAlias alias="role" type="com.mybatis.po.User"/ >
</typeAliases>

このようにして、エイリアスを定義できます。エイリアスを定義する必要があるクラスが多数ある場合、この方法で構成するのはそれほど簡単ではありません。MyBatis はスキャン エイリアスもサポートしています。たとえば、上記の 2 つのクラスは com.mybatis.po パッケージの下にあるため、次のように定義できます。

<typeAliases><!--别名-->
    <package name="com.mybatis.po"/>
</typeAliases>

このようにして、MyBatis はこのパッケージ内のクラスをスキャンし、その最初の文字をそのエイリアスとして小文字に変更します。たとえば、クラスのエイリアス「Role」は「role」に変更され、「User」のエイリアスは「user」に変更されます。 。このようなルールを使用すると、名前が重複する場合があります。

たとえば、クラス com.mybatis.po.User の場合、MyBatis はパッケージ com.mybatis.po のスキャンも追加し、例外が発生します。このとき、アノテーション @Alias ("user3" を使用できます) ) 以下に示すように、区別するために MyBatis によって提供されます。

パッケージcom.mybatis.po; 
@Alias("user3") 
public クラス ユーザー { 
    ...... 
}

このようにして、エイリアスの重複によって引き起こされるスキャンの失敗の問題を回避できます。

おすすめ

転載: blog.csdn.net/unbelievevc/article/details/132289628