在mybatis配置实体类的别名的两种常用配置方法

为什么要给实体类配置别名?

  • 目的是为了在引用实体类时可以使用实体类的别名来代替实体类,达到简写的目的

配置的方法(都是在mybatis的配置xml文件中进行配置)

  • 第一种方法,给单独的某个实体类配置别名,如同下面的形式
<!--为实体类com.demo.dao.User配置一个别名User-->
<typeAliases>
    <typeAlias type="com.demo.dao.User" alias="User"/>
</typeAliases>
  • 第二种方法,批量为某个包下的所有实体类设置别名,配置形式如下
<!-- 为com.demo.dao包下的所有实体类配置别名,
MyBatis默认的设置别名的方式就是去除类所在的包后的简单的类名,
比如com.demo.dao.User这个实体类的别名就会被设置成User
 -->
<typeAliases>
        <package name="com.demo.dao"/>
</typeAliases>

代码例子说明

  • 没有配置前的mapper文件夹的xml文件:如UserDao对应的UserMapper.xml文件如下
<?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.demo.dao.UserDao">
 
    <select id="findUserById" resultType="com.demo.entity.User">
        select * from user where id = #{id}
    </select>
    
    <insert id="addUser" parameterType="com.demo.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.demo.entity.User">
        update user set name = #{name}, password = #{password}, age = #{age} where id = #{id}
    </update>
 
</mapper>

从这个配置文件中,我们可以看到<select>、<insert>和<update>三个标签元素的resultType都是User对象,需要设置这个User对象的类全限定名,即packname.classname。
我们发现一个问题,那就是这个类名,我们需要写多次,如果要改这个类名的话,我们需要在多个地方进行修改。很明显,这样配置的话很容易造成修改上的遗漏,同时也书写上也比较麻烦。因此,MyBatis为我们提供了一个简单方便的配置方法,那就是使用<typeAliases>标签元素,给实体类设置一个别名。

<?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/demo?characterEncoding=utf-8"/>
    </properties>
 
    <settings>
        <setting name="logImpl" value="LOG4J" />
    </settings>
    
    <typeAliases>
        <typeAlias alias="User" type="com.demo.entity.User"/> 
    </typeAliases>
 
    <!-- 和spring整合后 environments配置将废除 -->
    <environments default="development">
        <environment id="development">
            <!-- 使用jdbc事务管理 -->
            <transactionManager type="JDBC" />
            <!-- 数据库连接池 -->
            <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\demo\resource\mapper\UserMapper.xml" />
    </mappers>
 
</configuration>

如上所示,我们在原来的mybatis配置文件中增加了<typeAliases>标签,并将com.demo.dao.User这个实体类重命名为User,然后我们在mapper配置文件中就可以如下使用了。

备注:这里需要注意的是,typeAliases配置需要放置在settings之后,否则会出异常!!!

<?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.demo.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>

这样即使实体类名修改了,所需要修改的地方也只有一处,便于集中管理.

在具体项目中,实体类是非常多的,所有更多时候我们需要批量为某个包下的所有实体类设置别名,所以只要在上面配置单个实体类的别名的地方,改成批量配置别名的方式即可,如下图

 <typeAliases>
        <!-- 为实体类com.demo.entity.User配置一个别名User -->
        <!-- <typeAlias type="com.demo.entity.User" alias="User"/> -->
        <!-- 为com.demo.entity包下的所有实体类配置别名,MyBatis默认的设置别名的方式就是去除类所在的包后的简单的类名
        比如com.demo.entity.User这个实体类的别名就会被设置成User
         -->
        <package name="com.demo.entity"/>
    </typeAliases>

参考了此处的文章:
https://blog.csdn.net/majinggogogo/article/details/71503263

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容

  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,423评论 0 4
  • 小样,祝你幸福 当文字落在纸上时,又到了炎炎夏日。和你分开已经多年,不知你的近况,只希望你过的比我好,祝你...
    慣看春秋阅读 377评论 0 1
  • 我轻轻登上沧海边的礁石上,瞭望大海。水波轻轻荡漾,像一条绿丝带般轻轻的拂过。对面的山岛耸立着,树木在上面正默默地汲...
    智九云阅读 460评论 1 4
  • 每近春节,我都会把我这一年的朋友圈都翻阅一遍,看看来时的路,不忘初心,然后有仪式感地跟过去告别,纵情向前。虽然人类...
    老藏漂小康阅读 304评论 0 1