Mybatis配置之<typeAliases>別名配置元素解析
在前面的文章<Mybatis配置之<properties>屬性配置元素詳述>,我們講述了<properties>標(biāo)簽元素的配置和使用方法。
在這篇文章中,我們來(lái)說(shuō)說(shuō)<typeAliases>標(biāo)簽元素,這個(gè)元素主要是用于對(duì)類(lèi)型進(jìn)行別名控制,具體什么意思呢?我們下面用一個(gè)示例說(shuō)明,看了之后我相信你就會(huì)明白了。
這里我們貼出之前的UserDao對(duì)應(yīng)的mapper文件
如下所示:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="com.majing.learning.mybatis.dao.UserDao">
<select id="findUserById" resultType="com.majing.learning.mybatis.entity.User">
select * from user where id = #{id}
</select>
<insert id="addUser" parameterType="com.majing.learning.mybatis.entity.User" useGeneratedKeys="true" keyProperty="id">
insert into user(name,password,age) values(#{name},#{password},#{age})
</insert>
<delete id="deleteUser" parameterType="int">
delete from user where id = #{id}
</delete>
<update id="updateUser" parameterType="com.majing.learning.mybatis.entity.User">
update user set name = #{name}, password = #{password}, age = #{age} where id = #{id}
</update>
</mapper>
從這個(gè)配置文件中,我們可以看到<select>、<insert>和<update>三個(gè)標(biāo)簽元素的resultType都是User對(duì)象,需要設(shè)置這個(gè)User對(duì)象的類(lèi)全限定名,即packname.classname。
我們發(fā)現(xiàn)一個(gè)問(wèn)題,那就是這個(gè)類(lèi)名,我們需要寫(xiě)多次,如果要改這個(gè)類(lèi)名的話,我們需要在多個(gè)地方進(jìn)行修改。
很明顯,這樣配置的話很容易造成修改上的遺漏,同時(shí)也書(shū)寫(xiě)上也比較麻煩。
因此,MyBatis為我們提供了一個(gè)簡(jiǎn)單方便的配置方法,那就是使用<typeAliases>標(biāo)簽元素,給實(shí)體類(lèi)設(shè)置一個(gè)別名。
<?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>
<properties resource="mysql.properties">
<property name="username" value="root"/>
<property name="password" value="root"/>
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8"/>
</properties>
<settings>
<setting name="logImpl" value="LOG4J" />
</settings>
<typeAliases>
<typeAlias alias="User" type="com.majing.learning.mybatis.entity.User"/>
</typeAliases>
<!-- 和spring整合后 environments配置將廢除 -->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事務(wù)管理 -->
<transactionManager type="JDBC" />
<!-- 數(shù)據(jù)庫(kù)連接池 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com\majing\learning\mybatis\dao\UserDaoMapper.xml" />
</mappers>
</configuration>
如上所示,我們?cè)谠瓉?lái)的mybatis配置文件中增加了<typeAliases>標(biāo)簽,并將com.majing.learning.mybatis.entity.User這個(gè)實(shí)體類(lèi)重命名為User,然后我們?cè)趍apper配置文件中就可以如下使用了。
備注:這里需要注意的是,typeAliases配置需要放置在settings之后,否則會(huì)出異常!??!
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="com.majing.learning.mybatis.dao.UserDao">
<select id="findUserById" resultType="User">
select * from user where id = #{id}
</select>
<insert id="addUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
insert into user(name,password,age) values(#{name},#{password},#{age})
</insert>
<delete id="deleteUser" parameterType="int">
delete from user where id = #{id}
</delete>
<update id="updateUser" parameterType="User">
update user set name = #{name}, password = #{password}, age = #{age} where id = #{id}
</update>
</mapper>
這樣即使實(shí)體類(lèi)名修改了,所需要修改的地方也只有一處,便于集中管理。
也許你會(huì)有疑問(wèn),如果實(shí)體類(lèi)比較多怎么辦?還不是要配置很多實(shí)體類(lèi)和別名,NO,NO,NO!下面跟大家說(shuō)說(shuō)另一種配置方法。
<?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>
<properties resource="mysql.properties">
<property name="username" value="root"/>
<property name="password" value="root"/>
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8"/>
</properties>
<settings>
<setting name="logImpl" value="LOG4J" />
</settings>
<typeAliases>
<package name="com.majing.learning.mybatis.entity"/>
</typeAliases>
<!-- 和spring整合后 environments配置將廢除 -->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事務(wù)管理 -->
<transactionManager type="JDBC" />
<!-- 數(shù)據(jù)庫(kù)連接池 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com\majing\learning\mybatis\dao\UserDaoMapper.xml" />
</mappers>
</configuration>
在這里,我們不再使用<typeAliases>標(biāo)簽下<typeAliase>,而是使用<package>標(biāo)簽,表示掃描該包名下的所有類(lèi)(除了接口和匿名內(nèi)部類(lèi)),如果類(lèi)名上有注解,則使用注解指定的名稱(chēng)作為別名,如果沒(méi)有則使用類(lèi)名首字母小寫(xiě)作為別名,如com.majing.learning.mybatis.entity.User這個(gè)類(lèi)如果沒(méi)有設(shè)置@Alias注解,則此時(shí)會(huì)被關(guān)聯(lián)到user這個(gè)別名上。
因此,按照上面的配置,我們還需要將實(shí)體類(lèi)做一下調(diào)整,如下兩種方式所示:
(1)給實(shí)體類(lèi)添加@Alias注解
package com.majing.learning.mybatis.entity;
import org.apache.ibatis.type.Alias;
@Alias(value="User")
public class User {
private int id;
private String name;
private String password;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", password=" + password + ", age=" + age + "]";
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
(2)實(shí)體類(lèi)不加注解的情況下
修改mapper文件中引用的類(lèi)型別名,改為小寫(xiě),如下所示:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="com.majing.learning.mybatis.dao.UserDao">
<select id="findUserById" resultType="user">
select * from user where id = #{id}
</select>
<insert id="addUser" parameterType="user" useGeneratedKeys="true" keyProperty="id">
insert into user(name,password,age) values(#{name},#{password},#{age})
</insert>
<delete id="deleteUser" parameterType="int">
delete from user where id = #{id}
</delete>
<update id="updateUser" parameterType="user">
update user set name = #{name}, password = #{password}, age = #{age} where id = #{id}
</update>
</mapper>
最后想說(shuō),mybatis為我們已經(jīng)實(shí)現(xiàn)了很多別名,已經(jīng)為許多常見(jiàn)的 Java 類(lèi)型內(nèi)建了相應(yīng)的類(lèi)型別名。
它們都是大小寫(xiě)不敏感的,需要注意的是由基本類(lèi)型名稱(chēng)重復(fù)導(dǎo)致的特殊處理。
| 別名 | 映射的類(lèi)型 |
|---|---|
| _byte | byte |
| _long | long |
| _short | short |
| _int | int |
| _integer | int |
| _double | double |
| _float | float |
| _boolean | boolean |
| string | String |
| byte | Byte |
| long | Long |
| short | Short |
| int | Integer |
| integer | Integer |
| double | Double |
| float | Float |
| boolean | Boolean |
| date | Date |
| decimal | BigDecimal |
| bigdecimal | BigDecimal |
| object | Object |
| map | Map |
| hashmap | HashMap |
| list | List |
| arraylist | ArrayList |
| collection | Collection |
| iterator | Iterator |
至此,關(guān)于別名的全部使用方法這里便介紹完成了,是不是很簡(jiǎn)單啊~
Mybatis別名的配置(兩種方法)
對(duì)于mapper的映射xml文件
sql語(yǔ)句中存在著resultType。
修改前:寫(xiě)了接受實(shí)體類(lèi)的全限定名

在mybatis的配置文件中添加
位置需要添加在configtion的標(biāo)簽下面;
<configuration>
<typeAliases>
<typeAlias type="com.uu.bean.News" alias="jj"/>
</typeAliases>
修改后:
添加后在mapper的映射文件中全限定名中改為了配置的簡(jiǎn)單的別名。

第二種方式:
在代碼中:
import org.apache.ibatis.type.Alias;
@Alias("jj")
public class News {
在配置文件中:
<configuration>
<typeAliases>
<package name="com.uu.bean"/>
</typeAliases>
可以達(dá)到與配置中聲名相同的效果。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- 解決MyBatis中為類(lèi)配置別名,列名與屬性名不對(duì)應(yīng)的問(wèn)題
- MyBatis中基于別名typeAliases的設(shè)置
- Mybatis 如何在配置文件中給實(shí)體類(lèi)起別名
- Mybatis實(shí)現(xiàn)單個(gè)和批量定義別名typeAliases
- MyBatis 如何配置多個(gè)別名 typeAliasesPackage
- Mybatis核心配置文件、默認(rèn)類(lèi)型別名、Mybatis獲取參數(shù)值的兩種方式(實(shí)例代碼)
- MyBatisPlus使用${ew.customSqlSegment}別名問(wèn)題解決
相關(guān)文章
使用JPA進(jìn)行CriteriaQuery進(jìn)行查詢(xún)的注意事項(xiàng)
這篇文章主要介紹了使用JPA進(jìn)行CriteriaQuery進(jìn)行查詢(xún)的注意事項(xiàng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
Spring Security Remember me使用及原理詳解
這篇文章主要介紹了Spring Security Remember me使用及原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
Spring Security基于過(guò)濾器實(shí)現(xiàn)圖形驗(yàn)證碼功能
驗(yàn)證碼就是為了防止惡意用戶(hù)采用暴力重試的攻擊手段而設(shè)置的一種防護(hù)措施,接下來(lái)在Spring Security的環(huán)境中,我們可以用兩種方案實(shí)現(xiàn)圖形驗(yàn)證碼,具體實(shí)現(xiàn)方法跟隨小編一起看看吧2021-09-09
SpringBoot中EasyExcel實(shí)現(xiàn)execl導(dǎo)入導(dǎo)出
本文主要介紹了SpringBoot中EasyExcel實(shí)現(xiàn)execl導(dǎo)入導(dǎo)出,實(shí)現(xiàn)了如何準(zhǔn)備環(huán)境、創(chuàng)建實(shí)體類(lèi)、自定義轉(zhuǎn)換器以及編寫(xiě)導(dǎo)入邏輯的步驟和示例代碼,感興趣的可以了解下2023-06-06
如何使用Idea中的 Deployment 實(shí)現(xiàn)打包自動(dòng)部署
這篇文章主要介紹了使用Idea中的 Deployment 實(shí)現(xiàn)打包自動(dòng)部署,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08

