Mybatis 給實(shí)體類(lèi)起別名
全局配置文件中的標(biāo)簽:
標(biāo)簽3: typeAliases 別名處理器 可以為java類(lèi)型起別名 別名忽略大小寫(xiě)
原來(lái):
1
|
< select id = "getTeacherById" parameterType = "integer" resultType = "entity.Teacher" > |
ctrl+左鍵就可以定位到該類(lèi) 其實(shí)比較方便
起了別名后就難找了
注意:
有個(gè)問(wèn)題 typeAlias標(biāo)簽 還有位置問(wèn)題 得放在proerties后面 而不是configuration后面
有三個(gè)方法起別名:
第一種:?jiǎn)蝹€(gè)起別名
1
2
3
|
< typeAliases > < typeAlias type = "entity.Teacher" alias = "ss" /> </ typeAliases > |
type是要為起別名的類(lèi)型全類(lèi)名 默認(rèn)是類(lèi)名的小寫(xiě)teacher
alias
:是指新的別名
第二種:批量起別名
1
2
3
|
< typeAliases > < package name = "entity" /> </ typeAliases > |
package
:為某個(gè)包下的所有類(lèi)批量起別名
name
:指定包名 以及下面所有的后代包的每一個(gè)類(lèi)都起一個(gè)默認(rèn)別名(類(lèi)名小寫(xiě))
第三種:使用注解
如果此時(shí)類(lèi)名沖突怎么辦?
使用@Alias注解為某個(gè)類(lèi)指定新的別名:
1
2
|
@Alias ( "ss" ) public class Teacher { |
注意:得考慮是否起別名,有時(shí)候起別名反而更麻煩了
其實(shí)Mybatis內(nèi)部就有很多起別名的:來(lái)看看 全局配置Configuration中的別名
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
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 取別名問(wèn)題
今天學(xué)習(xí)Mybatis時(shí)在取別名這里總是報(bào)錯(cuò),如圖所示
錯(cuò)誤信息:
Cause: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 36; columnNumber: 17; 元素類(lèi)型為 “configuration” 的內(nèi)容必須匹配 “(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)”。
最后發(fā)現(xiàn)只需要在定義別名的時(shí)候把typeAlias標(biāo)簽放在properties標(biāo)簽后面就好了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
<? 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屬性指定的是實(shí)體類(lèi)全限定類(lèi)名。alias屬性指定別名,當(dāng)指定了別名就不區(qū)分大小寫(xiě),linux中仍然區(qū)分大小寫(xiě),且typeAlias標(biāo)簽必須放在properties后面--> < properties resource = "jdbcConfig.properties" > </ properties > < typeAliases > < package name = "domain" ></ package > </ typeAliases > <!--配置環(huán)境--> < environments default = "mysql" > <!--配置mysql的環(huán)境--> < environment id = "mysql" > <!--配置事務(wù)的類(lèi)型--> < transactionManager type = "JDBC" > </ transactionManager > <!--配置數(shù)據(jù)源(連接池)--> < dataSource type = "POOLED" > <!--配置連接數(shù)據(jù)庫(kù)的4個(gè)基本信息--> < property name = "driver" value = "${driver}" /> < property name = "url" value = "${url}" /> < property name = "username" value = "${username}" /> < property name = "password" value = "${password}" /> </ dataSource > </ environment > </ environments > <!--指定映射配置文件的位置,映射配置文件指的是每個(gè)dao獨(dú)立的配置文件 如果是用注解來(lái)配置的話,此處應(yīng)該使用class屬性指定被注解的dao全限定類(lèi)名 --> < mappers > < package name = "dao" /> </ mappers > </ configuration > |
之后運(yùn)行就正常了
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持服務(wù)器之家。
原文鏈接:https://blog.csdn.net/qq_38409944/article/details/82466922