一、為什麼要進行類型別名優化 首先我們來看一下前面寫的UserMapper.xml配置文件: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "h ...
一、為什麼要進行類型別名優化
首先我們來看一下前面寫的UserMapper.xml配置文件:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- 命名空間namespace對應Mapper介面 --> <mapper namespace="com.jms.dao.UserMapper"> <!-- id對應介面中的方法 --> <select id="getUsers" resultType="com.jms.pojo.User"> select * from mybaties.user </select> <select id="getUserbyid" parameterType="int" resultType="com.jms.pojo.User"> select * from mybaties.user where id=#{id} </select> <insert id="addUser" parameterType="com.jms.pojo.User"> insert mybaties.user value(#{id},#{username},#{password}) </insert> <update id="UpdateUser" parameterType="com.jms.pojo.User"> update mybaties.user set username=#{username},password=#{password} where id=#{id} </update> <delete id="DeleteUser" parameterType="int"> delete from mybaties.user where id=#{id} </delete> </mapper>
其中"com.jms.pojo.User"是全限定類名,十分冗餘,類型別名就是為了設置縮寫名字,意在降低冗餘的全限定類名書寫。
二、怎樣進行類型別名優化
1.類型別名可為 Java 類型設置一個縮寫名字
我們修改mybatis-config.xml配置文件,為其添加以下的內容:
<typeAliases> <typeAlias type="com.jms.pojo.User" alias="User"/> </typeAliases>
需要註意一個點:mybatis-config.xml配置文件中各個標簽都有著自己的固定順序,這個順序就是官方給出的配置結構順序,打亂會報錯。
接下來我們去把UserMapper.xml中全限定類名修改為我們的縮寫名:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- 命名空間namespace對應Mapper介面 --> <mapper namespace="com.jms.dao.UserMapper"> <!-- id對應介面中的方法 --> <select id="getUsers" resultType="User"> select * from mybaties.user </select> <select id="getUserbyid" parameterType="_int" resultType="User"> select * from mybaties.user where id=#{id} </select> <insert id="addUser" parameterType="User"> insert mybaties.user value(#{id},#{username},#{password}) </insert> <update id="UpdateUser" parameterType="User"> update mybaties.user set username=#{username},password=#{password} where id=#{id} </update> <delete id="DeleteUser" parameterType="_int"> delete from mybaties.user where id=#{id} </delete> </mapper>
然後進行測試,測試通過。
2.類型別名也可以指定一個包名
我們還是先修改mybatis-config.xml配置文件:
<typeAliases> <package name="com.jms.pojo"/> </typeAliases>
指定包名後,MyBatis會自動搜索包下的JavaBean,此時又分為沒有註解和有註解兩種情況。
(1)沒有註解
會使用JavaBean的類名,首字母小寫來作為它的別名,例如Hello.class,他的別名就是"hello"。接下來我們進行具體的試驗。
先修改UserMapper.xml的內容:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- 命名空間namespace對應Mapper介面 --> <mapper namespace="com.jms.dao.UserMapper"> <!-- id對應介面中的方法 --> <select id="getUsers" resultType="user"> select * from mybaties.user </select> <select id="getUserbyid" parameterType="_int" resultType="user"> select * from mybaties.user where id=#{id} </select> <insert id="addUser" parameterType="user"> insert mybaties.user value(#{id},#{username},#{password}) </insert> <update id="UpdateUser" parameterType="user"> update mybaties.user set username=#{username},password=#{password} where id=#{id} </update> <delete id="DeleteUser" parameterType="_int"> delete from mybaties.user where id=#{id} </delete> </mapper>
測試通過。
經過實驗,其實首字母不小寫直接用類名也可以,但最好還是使用官方推薦的首字母小寫的形式。
(2)有註解
首先,為User類添加註解:
1 package com.jms.pojo; 2 3 import org.apache.ibatis.type.Alias; 4 5 @Alias("hello") 6 public class User { 7 }
此時將其別名註解為"hello",接下來修改UserMapper.xml配置文件中的名字:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- 命名空間namespace對應Mapper介面 --> <mapper namespace="com.jms.dao.UserMapper"> <!-- id對應介面中的方法 --> <select id="getUsers" resultType="hello"> select * from mybaties.user </select> <select id="getUserbyid" parameterType="_int" resultType="hello"> select * from mybaties.user where id=#{id} </select> <insert id="addUser" parameterType="hello"> insert mybaties.user value(#{id},#{username},#{password}) </insert> <update id="UpdateUser" parameterType="hello"> update mybaties.user set username=#{username},password=#{password} where id=#{id} </update> <delete id="DeleteUser" parameterType="_int"> delete from mybaties.user where id=#{id} </delete> </mapper>
進行測試,通過。
所以上面兩種方式都可以進行類型別名優化,那麼我們什麼時候指定縮寫名字,什麼時候指定包名呢?
當包中的JavaBean較少時,指定定縮寫名字;當包中的JavaBean較多時,指定包名。
三、java內建類型別名補充
下麵是一些為常見的 Java 類型內建的類型別名。它們都是不區分大小寫的,註意,為了應對原始類型的命名重覆,採取了特殊的命名風格。
別名 | 映射的類型 |
---|---|
_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 |
可以看到,基本類型是在前面加一個下分隔線,而其他類型是全部小寫。
(本文僅作個人學習記錄用,如有紕漏敬請指正)