MyBatis(六):配置之類型別名優化

来源:https://www.cnblogs.com/jmsstudy/archive/2022/09/09/16671421.html
-Advertisement-
Play Games

一、為什麼要進行類型別名優化 首先我們來看一下前面寫的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

可以看到,基本類型是在前面加一個下分隔線,而其他類型是全部小寫。

 

(本文僅作個人學習記錄用,如有紕漏敬請指正)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 說明 意義 1.在Spring中,Bean的作用域可以通過scope屬性來指定。 2.指定作用域的目的是 存儲在此類單例bean的高速緩存中,並且對該命名bean的所有後續請求和引用都返回該高速緩存的對象。(本身的理念就是以空間換時間的思維,創建步驟繁雜,而且頻繁用到,我就存起來,下次用的時候就不用 ...
  • 摘要:本篇文章主要講解基於理論的圖像分割方法,通過K-Means聚類演算法實現圖像分割或顏色分層處理。 本文分享自華為雲社區《[Python圖像處理] 十九.圖像分割之基於K-Means聚類的區域分割》,作者: eastmount。 本篇文章主要講解基於理論的圖像分割方法,通過K-Means聚類演算法實 ...
  • pring Boot Actuator 是 Spring Boot 提供的對應用的自省和監控功能,如健康檢查,審計,指標收集,HTTP 跟蹤等,可以幫助開發和運維人員監控和管理 Spring Boot 應用。該模塊採集應用的內部信息,並暴露給外部的模塊,支持 HTTP 和 JMX,並可以與一些第三方... ...
  • 鋼鐵知識庫,一個學習python爬蟲、數據分析的知識庫。人生苦短,快用python。 之前我們使用requests庫爬取某個站點的時候,每發出一個請求,程式必須等待網站返迴響應才能接著運行,而在整個爬蟲過程中,整個爬蟲程式是一直在等待的,實際上沒有做任何事情。 像這種占用磁碟/記憶體IO、網路IO的任 ...
  • 一個菜鳥的設計模式之旅,使用 Golang 實現。本節實現單例模式。三個工作者需要各自找到電梯搭乘!電梯只有一個! ...
  • 一、問題 在用freemarker生成word文檔的時候,在本地可以成功獲取到類路徑下的資源文件。但是打了jar包放在linux系統下啟動,無法獲取到該文件,導致生成的word文檔是個空文檔。 二、解決 1、文件存放路徑 2、原先代碼 第一種 File docxFile = ResourceUtil ...
  • ApplicationContextAware是一個介面,它提供一個方法setApplicationContext,當spring註冊完成之後,會把ApplicationContext對象以參數的方式傳遞到方法里,在方法里我們可以實現自己的邏輯,去獲取自己的bean,當前對接的斷言等;一般用在被封裝 ...
  • 來源:cnblogs.com/jae-tech/p/15409340.html 寫在前面 此異常非彼異常,標題所說的異常是業務上的異常。 最近做了一個需求,消防的設備巡檢,如果巡檢發現異常,通過手機端提交,後臺的實時監控頁面實時獲取到該設備的信息及位置,然後安排員工去處理。 因為需要服務端主動向客戶 ...
一周排行
    -Advertisement-
    Play Games
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...