mybatis type Aliases
4728 ワード
type Aliasesの別名
クラスのフルネームは長いので、大量に使うには不便です.mybatisは別名でこの問題を解決します.Mybatisでは別名をType Alias Registryで定義しています.注目すべきは、mybatisの別名を大文字と区別せずに書くことです.これまでの文章の中で提供されたmybatisの例を覚えています.
クラスのフルネームは長いので、大量に使うには不便です.mybatisは別名でこの問題を解決します.Mybatisでは別名をType Alias Registryで定義しています.注目すべきは、mybatisの別名を大文字と区別せずに書くことです.これまでの文章の中で提供されたmybatisの例を覚えています.
<select id="findRoles" parameterType="string" resultType="role">
その中のparameterTypeとresultTypeの値は実は全部別名です.mybatis初期化の時に、いくつかの別名を提供しました.1.charタイプを含まない基本データタイプの別名は_といいます.XXXはたとえば_btyeですが、intはまだあります.integer表示方式です.2.包装類、Steringの別名は最初の文字で小文字になります.例えばstringですが、Integerはまだint表示方式があります.3.Date、BigDecimal、Objectの別名も最初の文字が小文字になります.4.集合類ではMap、HashMap、List、ArayList、Collection、Iteratorの別名を提供しています.同じ最初の文字小文字です.5.ResultSetの別名は自分で、特別な記憶が必要です.6.集合類以外に、ObjectとResultSet.その他は配列形式の別名を持つことができ、形式は別名[]例えば_int[].mybatisの別名はType Alias Registry類で登録されています.ソースの中に別名を登録する方法を見てください. public TypeAliasRegistry() {
registerAlias("string", String.class);
registerAlias("byte", Byte.class);
registerAlias("long", Long.class);
..............//
}
エイリアスはレギターAlias法で登録されていることが分かります. public void registerAlias(String alias, Class> value) {
if (alias == null) {
throw new TypeException("The parameter alias cannot be null");
}
// issue #748
String key = alias.toLowerCase(Locale.ENGLISH);
if (TYPE_ALIASES.containsKey(key) && TYPE_ALIASES.get(key) != null && !TYPE_ALIASES.get(key).equals(value)) {
throw new TypeException("The alias '" + alias + "' is already mapped to the value '" + TYPE_ALIASES.get(key).getName() + "'.");
}
TYPE_ALIASES.put(key, value);
}
上はregister Aliasのソースコードで、TYPEです.ALIASESはType Alias Registryクラスの一つの属性で、以下はその実用化コードです. private final Map<String, Class>> TYPE_ALIASES = new HashMap<String, Class>>();
これにより、mybatisの別名は一つのhashMapに格納されていることが分かります.エイリアスをカスタマイズすると、エイリアスが占有されているかどうかを判断します.判断後、合法的な別名をこのHashMapに入れます.私たちは通常別名を作成します.このような方式です.<typeAliases>
<typeAlias alias="role" type="lly.mybatis.example.pojo.Role" />
<typeAlias alias="user" type="lly.mybatis.example.pojo.User" />
typeAliases>
しかし、私たちはもう一つの簡単な方法があります.しかし、エイリアスはデフォルトではクラス名の頭文字小文字となります.例えば、クラス名はRoleの別名:roleです.<typeAliases>
<package name="lly.mybatis.example.pojo"/>
typeAliases>
このパスの下に二つの種類の名前が同じである場合、または最初の文字小文字形式を使いたくない場合、pojoオブジェクトに@Alias(「XXX」)ラベルを追加してもいいです.その中のXXXはリセットされた別名が必要です.