Mybatis 如何在配置文件中給實體類起別名

Mybatis 給實體類起別名

全局配置文件中的標簽:

標簽3: typeAliases 別名處理器 可以為java類型起別名 別名忽略大小寫

原來:

<select id="getTeacherById" parameterType="integer" resultType="entity.Teacher">

ctrl+左鍵就可以定位到該類 其實比較方便

起瞭別名後就難找瞭

註意:

有個問題 typeAlias標簽 還有位置問題 得放在proerties後面 而不是configuration後面

有三個方法起別名:

第一種:單個起別名

    <typeAliases>
        <typeAlias type="entity.Teacher" alias="ss"/>
    </typeAliases>

type是要為起別名的類型全類名 默認是類名的小寫teacher

alias:是指新的別名

第二種:批量起別名

<typeAliases>   
        <package name="entity"/>
    </typeAliases>

package:為某個包下的所有類批量起別名

name:指定包名 以及下面所有的後代包的每一個類都起一個默認別名(類名小寫)

第三種:使用註解

如果此時類名沖突怎麼辦?

使用@Alias註解為某個類指定新的別名:

@Alias("ss")
public class Teacher {

註意:得考慮是否起別名,有時候起別名反而更麻煩瞭

其實Mybatis內部就有很多起別名的:來看看 全局配置Configuration中的別名

public Configuration() {
 typeAliasRegistry.registerAlias("JDBC", JdbcTransactionFactory.class);
    typeAliasRegistry.registerAlias("MANAGED", ManagedTransactionFactory.class);
    typeAliasRegistry.registerAlias("JNDI", JndiDataSourceFactory.class);
    typeAliasRegistry.registerAlias("POOLED", PooledDataSourceFactory.class);
    typeAliasRegistry.registerAlias("UNPOOLED", UnpooledDataSourceFactory.class);
    typeAliasRegistry.registerAlias("PERPETUAL", PerpetualCache.class);
    typeAliasRegistry.registerAlias("FIFO", FifoCache.class);
    typeAliasRegistry.registerAlias("LRU", LruCache.class);
    typeAliasRegistry.registerAlias("SOFT", SoftCache.class);
    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_LOGGING", JakartaCommonsLoggingImpl.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);
    typeAliasRegistry.registerAlias("CGLIB", CglibProxyFactory.class);
    typeAliasRegistry.registerAlias("JAVASSIST", JavassistProxyFactory.class);

Mybatis 取別名問題

今天學習Mybatis時在取別名這裡總是報錯,如圖所示

錯誤信息:

Cause: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 36; columnNumber: 17; 元素類型為 “configuration” 的內容必須匹配 “(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)”。

最後發現隻需要在定義別名的時候把typeAlias標簽放在properties標簽後面就好瞭

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--typeAlias用於配置別名。type屬性指定的是實體類全限定類名。alias屬性指定別名,當指定瞭別名就不區分大小寫,linux中仍然區分大小寫,且typeAlias標簽必須放在properties後面-->
    <properties resource="jdbcConfig.properties">
    </properties>
    <typeAliases>
        <package name="domain"></package>
    </typeAliases>
    <!--配置環境-->
    <environments default="mysql">
        <!--配置mysql的環境-->
        <environment id="mysql">
            <!--配置事務的類型-->
            <transactionManager type="JDBC">
            </transactionManager>
            <!--配置數據源(連接池)-->
            <dataSource type="POOLED">
                <!--配置連接數據庫的4個基本信息-->
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--指定映射配置文件的位置,映射配置文件指的是每個dao獨立的配置文件
        如果是用註解來配置的話,此處應該使用class屬性指定被註解的dao全限定類名
    -->
    <mappers>
        <package name="dao"/>
    </mappers>
</configuration>

之後運行就正常瞭

在這裡插入圖片描述

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: