MyBatis(六):配置之类型别名优化

打印 上一主题 下一主题

主题 808|帖子 808|积分 2424

一、为什么要进行类型别名优化
首先我们来看一下前面写的UserMapper.xml配置文件:
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3.   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4.   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.jms.dao.UserMapper">
  6.   
  7.   <select id="getUsers" resultType="com.jms.pojo.User">
  8.     select * from mybaties.user
  9.   </select>
  10.   
  11.   <select id="getUserbyid" parameterType="int" resultType="com.jms.pojo.User">
  12.       select * from mybaties.user where id=#{id}
  13.   </select>
  14.   
  15.   <insert id="addUser" parameterType="com.jms.pojo.User">
  16.       insert mybaties.user value(#{id},#{username},#{password})
  17.   </insert>
  18.   
  19.   <update id="UpdateUser" parameterType="com.jms.pojo.User">
  20.       update mybaties.user set username=#{username},password=#{password} where id=#{id}
  21.   </update>
  22.   
  23.   <delete id="DeleteUser" parameterType="int">
  24.       delete from mybaties.user where id=#{id}
  25.   </delete>
  26. </mapper>
复制代码
其中"com.jms.pojo.User"是全限定类名,十分冗余,类型别名就是为了设置缩写名字,意在降低冗余的全限定类名书写。
二、怎样进行类型别名优化
1.类型别名可为 Java 类型设置一个缩写名字
我们修改mybatis-config.xml配置文件,为其添加以下的内容:
  1. <typeAliases>
  2.       <typeAlias type="com.jms.pojo.User" alias="User"/>
  3.   </typeAliases>
复制代码
需要注意一个点:mybatis-config.xml配置文件中各个标签都有着自己的固定顺序,这个顺序就是官方给出的配置结构顺序,打乱会报错。
接下来我们去把UserMapper.xml中全限定类名修改为我们的缩写名:
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3.   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4.   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.jms.dao.UserMapper">
  6.   
  7.   <select id="getUsers" resultType="com.jms.pojo.User">
  8.     select * from mybaties.user
  9.   </select>
  10.   
  11.   <select id="getUserbyid" parameterType="int" resultType="com.jms.pojo.User">
  12.       select * from mybaties.user where id=#{id}
  13.   </select>
  14.   
  15.   <insert id="addUser" parameterType="com.jms.pojo.User">
  16.       insert mybaties.user value(#{id},#{username},#{password})
  17.   </insert>
  18.   
  19.   <update id="UpdateUser" parameterType="com.jms.pojo.User">
  20.       update mybaties.user set username=#{username},password=#{password} where id=#{id}
  21.   </update>
  22.   
  23.   <delete id="DeleteUser" parameterType="int">
  24.       delete from mybaties.user where id=#{id}
  25.   </delete>
  26. </mapper>
复制代码
然后进行测试,测试通过。
2.类型别名也可以指定一个包名
我们还是先修改mybatis-config.xml配置文件:
  1. <typeAliases>
  2.       <typeAlias type="com.jms.pojo.User" alias="User"/>
  3.   </typeAliases>
复制代码
指定包名后,MyBatis会自动搜索包下的JavaBean,此时又分为没有注解和有注解两种情况。
(1)没有注解
会使用JavaBean的类名,首字母小写来作为它的别名,例如Hello.class,他的别名就是"hello"。接下来我们进行具体的试验。
先修改UserMapper.xml的内容:
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3.   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4.   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.jms.dao.UserMapper">
  6.   
  7.   <select id="getUsers" resultType="com.jms.pojo.User">
  8.     select * from mybaties.user
  9.   </select>
  10.   
  11.   <select id="getUserbyid" parameterType="int" resultType="com.jms.pojo.User">
  12.       select * from mybaties.user where id=#{id}
  13.   </select>
  14.   
  15.   <insert id="addUser" parameterType="com.jms.pojo.User">
  16.       insert mybaties.user value(#{id},#{username},#{password})
  17.   </insert>
  18.   
  19.   <update id="UpdateUser" parameterType="com.jms.pojo.User">
  20.       update mybaties.user set username=#{username},password=#{password} where id=#{id}
  21.   </update>
  22.   
  23.   <delete id="DeleteUser" parameterType="int">
  24.       delete from mybaties.user where id=#{id}
  25.   </delete>
  26. </mapper>
复制代码
测试通过。
经过实验,其实首字母不小写直接用类名也可以,但最好还是使用官方推荐的首字母小写的形式。
(2)有注解
首先,为User类添加注解:
  1. 1 package com.jms.pojo;
  2. 2
  3. 3 import org.apache.ibatis.type.Alias;
  4. 4
  5. 5 @Alias("hello")
  6. 6 public class User {
  7. 7 }
复制代码
此时将其别名注解为"hello",接下来修改UserMapper.xml配置文件中的名字:
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3.   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4.   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.jms.dao.UserMapper">
  6.   
  7.   <select id="getUsers" resultType="com.jms.pojo.User">
  8.     select * from mybaties.user
  9.   </select>
  10.   
  11.   <select id="getUserbyid" parameterType="int" resultType="com.jms.pojo.User">
  12.       select * from mybaties.user where id=#{id}
  13.   </select>
  14.   
  15.   <insert id="addUser" parameterType="com.jms.pojo.User">
  16.       insert mybaties.user value(#{id},#{username},#{password})
  17.   </insert>
  18.   
  19.   <update id="UpdateUser" parameterType="com.jms.pojo.User">
  20.       update mybaties.user set username=#{username},password=#{password} where id=#{id}
  21.   </update>
  22.   
  23.   <delete id="DeleteUser" parameterType="int">
  24.       delete from mybaties.user where id=#{id}
  25.   </delete>
  26. </mapper>
复制代码
进行测试,通过。
所以上面两种方式都可以进行类型别名优化,那么我们什么时候指定缩写名字,什么时候指定包名呢?
当包中的JavaBean较少时,指定定缩写名字;当包中的JavaBean较多时,指定包名。
三、java内建类型别名补充
下面是一些为常见的 Java 类型内建的类型别名。它们都是不区分大小写的,注意,为了应对原始类型的命名重复,采取了特殊的命名风格。
别名映射的类型_bytebyte_longlong_shortshort_intint_integerint_doubledouble_floatfloat_booleanbooleanstringStringbyteBytelongLongshortShortintIntegerintegerIntegerdoubleDoublefloatFloatbooleanBooleandateDatedecimalBigDecimalbigdecimalBigDecimalobjectObjectmapMaphashmapHashMaplistListarraylistArrayListcollectionCollectioniteratorIterator可以看到,基本类型是在前面加一个下分隔线,而其他类型是全部小写。
 
(本文仅作个人学习记录用,如有纰漏敬请指正)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

伤心客

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表