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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...