Mybatis之核心配置文件詳解、默認類型別名、Mybatis獲取參數值的兩種方式

學習的最大理由是想擺脫平庸,早一天就多一份人生的精彩;遲一天就多一天平庸的困擾。各位小伙伴,如果您:
想系統/深入學習某技術知識點…
一個人摸索學習很難堅持,想組團高效學習…
想寫博客但無從下手,急需寫作干貨注入能量…
熱愛寫作,愿意讓自己成為更好的人…

文章目錄

  • 前言
  • 一、核心配置文件詳解
  • 二、默認的類型別名
  • 三、MyBatis的增刪改查
  • 四、MyBatis獲取參數值的兩種方式
    • 1、單個字面量類型的參數
    • 2、多個字面量類型的參數
    • 3、map集合類型的參數
    • 4、實體類類型的參數
    • 5、使用@Param標識參數
  • 總結


前言

一、核心配置文件詳解
二、默認的類型別名
三、MyBatis的增刪改查
四、MyBatis獲取參數值的兩種方式
1、單個字面量類型的參數
2、多個字面量類型的參數
3、map集合類型的參數
4、實體類類型的參數
5、使用@Param標識參數


一、核心配置文件詳解

核心配置文件中的標簽必須按照固定的順序(有的標簽可以不寫,但順序一定不能亂):
properties、settings、typeAliases、typeHandlers、objectFactory、objectWrapperFactory、reflectorFactory、plugins、environments、databaseIdProvider、mappers

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//MyBatis.org//DTD Config 3.0//EN""http://MyBatis.org/dtd/MyBatis-3-config.dtd">
<configuration><!--引入properties文件,此時就可以${屬性名}的方式訪問屬性值--><properties resource="jdbc.properties"></properties><settings><!--將表中字段的下劃線自動轉換為駝峰--><setting name="mapUnderscoreToCamelCase" value="true"/><!--開啟延遲加載--><setting name="lazyLoadingEnabled" value="true"/></settings><typeAliases><!--typeAlias:設置某個具體的類型的別名屬性:type:需要設置別名的類型的全類名alias:設置此類型的別名,且別名不區分大小寫。若不設置此屬性,該類型擁有默認的別名,即類名--><!--<typeAlias type="com.atguigu.mybatis.bean.User"></typeAlias>--><!--<typeAlias type="com.atguigu.mybatis.bean.User" alias="user"></typeAlias>--><!--以包為單位,設置改包下所有的類型都擁有默認的別名,即類名且不區分大小寫--><package name="com.atguigu.mybatis.bean"/></typeAliases><!--environments:設置多個連接數據庫的環境屬性:default:設置默認使用的環境的id--><environments default="mysql_test"><!--environment:設置具體的連接數據庫的環境信息屬性:id:設置環境的唯一標識,可通過environments標簽中的default設置某一個環境的id,表示默認使用的環境--><environment id="mysql_test"><!--transactionManager:設置事務管理方式屬性:type:設置事務管理方式,type="JDBC|MANAGED"type="JDBC":設置當前環境的事務管理都必須手動處理type="MANAGED":設置事務被管理,例如spring中的AOP--><transactionManager type="JDBC"/><!--dataSource:設置數據源屬性:type:設置數據源的類型,type="POOLED|UNPOOLED|JNDI"type="POOLED":使用數據庫連接池,即會將創建的連接進行緩存,下次使用可以從緩存中直接獲取,不需要重新創建type="UNPOOLED":不使用數據庫連接池,即每次使用連接都需要重新創建type="JNDI":調用上下文中的數據源--><dataSource type="POOLED"><!--設置驅動類的全類名--><property name="driver" value="${jdbc.driver}"/><!--設置連接數據庫的連接地址--><property name="url" value="${jdbc.url}"/><!--設置連接數據庫的用戶名--><property name="username" value="${jdbc.username}"/><!--設置連接數據庫的密碼--><property name="password" value="${jdbc.password}"/></dataSource></environment></environments><!--引入映射文件--><mappers><!-- <mapper resource="UserMapper.xml"/> --><!--以包為單位,將包下所有的映射文件引入核心配置文件注意:1. 此方式必須保證mapper接口和mapper映射文件必須在相同的包下2. mapper接口要和mapper映射文件的名字一致--><package name="com.atguigu.mybatis.mapper"/></mappers>
</configuration>

二、默認的類型別名

在這里插入圖片描述

三、MyBatis的增刪改查

  1. 添加
    <!--int insertUser();-->
    <insert id="insertUser">insert into t_user values(null,'admin','123456',23,'男','12345@qq.com')
    </insert>
    
  2. 刪除
    <!--int deleteUser();-->
    <delete id="deleteUser">delete from t_user where id = 6
    </delete>
    
  3. 修改
    <!--int updateUser();-->
    <update id="updateUser">update t_user set username = '張三' where id = 5
    </update>
    
  4. 查詢一個實體類對象
    <!--User getUserById();-->  
    <select id="getUserById" resultType="com.atguigu.mybatis.bean.User">  select * from t_user where id = 2  
    </select>
    
  5. 查詢集合
    <!--List<User> getUserList();-->
    <select id="getUserList" resultType="com.atguigu.mybatis.bean.User">select * from t_user
    </select>
    
  • 注意:
    1. 查詢的標簽select必須設置屬性resultType或resultMap,用于設置實體類和數據庫表的映射關系
      • resultType:自動映射,用于屬性名和表中字段名一致的情況
      • resultMap:自定義映射,用于一對多或多對一或字段名和屬性名不一致的情況
    2. 當查詢的數據為多條時,不能使用實體類作為返回值,只能使用集合,否則會拋出異常TooManyResultsException;但是若查詢的數據只有一條,可以使用實體類或集合作為返回值

四、MyBatis獲取參數值的兩種方式

  • MyBatis獲取參數值的兩種方式:${}和#{}
  • ${}的本質就是字符串拼接,#{}的本質就是占位符賦值
  • ${}使用字符串拼接的方式拼接sql,若為字符串類型或日期類型的字段進行賦值時,需要手動加單引號;但是#{}使用占位符賦值的方式拼接sql,此時為字符串類型或日期類型的字段進行賦值時,可以自動添加單引號

1、單個字面量類型的參數

  • 若mapper接口中的方法參數為單個的字面量類型,此時可以使用${}和#{}以任意的名稱(最好見名識意)獲取參數的值,注意${}需要手動加單引號
<!--User getUserByUsername(String username);-->
<select id="getUserByUsername" resultType="User">select * from t_user where username = #{username}
</select>
<!--User getUserByUsername(String username);-->
<select id="getUserByUsername" resultType="User">  select * from t_user where username = '${username}'  
</select>

2、多個字面量類型的參數

  • 若mapper接口中的方法參數為多個時,此時MyBatis會自動將這些參數放在一個map集合中
    1. 以arg0,arg1…為鍵,以參數為值;
    2. 以param1,param2…為鍵,以參數為值;
  • 因此只需要通過${}和#{}訪問map集合的鍵就可以獲取相對應的值,注意${}需要手動加單引號。
  • 使用arg或者param都行,要注意的是,arg是從arg0開始的,param是從param1開始的
<!--User checkLogin(String username,String password);-->
<select id="checkLogin" resultType="User">  select * from t_user where username = #{arg0} and password = #{arg1}  
</select>
<!--User checkLogin(String username,String password);-->
<select id="checkLogin" resultType="User">select * from t_user where username = '${param1}' and password = '${param2}'
</select>

3、map集合類型的參數

  • 若mapper接口中的方法需要的參數為多個時,此時可以手動創建map集合,將這些數據放在map中只需要通過${}和#{}訪問map集合的鍵就可以獲取相對應的值,注意${}需要手動加單引號
<!--User checkLoginByMap(Map<String,Object> map);-->
<select id="checkLoginByMap" resultType="User">select * from t_user where username = #{username} and password = #{password}
</select>
@Test
public void checkLoginByMap() {SqlSession sqlSession = SqlSessionUtils.getSqlSession();ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);Map<String,Object> map = new HashMap<>();map.put("usermane","admin");map.put("password","123456");User user = mapper.checkLoginByMap(map);System.out.println(user);
}

4、實體類類型的參數

  • 若mapper接口中的方法參數為實體類對象時此時可以使用${}和#{},通過訪問實體類對象中的屬性名獲取屬性值,注意${}需要手動加單引號
<!--int insertUser(User user);-->
<insert id="insertUser">insert into t_user values(null,#{username},#{password},#{age},#{sex},#{email})
</insert>
@Test
public void insertUser() { SqlSession sqlSession = SqlSessionUtils.getSqlSession();ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);User user = new User(null,"Tom","123456",12,"男","123@321.com");mapper.insertUser(user);
}

5、使用@Param標識參數

  • 可以通過@Param注解標識mapper接口中的方法參數,此時,會將這些參數放在map集合中
    1. 以@Param注解的value屬性值為鍵,以參數為值;
    2. 以param1,param2…為鍵,以參數為值;
  • 只需要通過${}和#{}訪問map集合的鍵就可以獲取相對應的值,注意${}需要手動加單引號
<!--User CheckLoginByParam(@Param("username") String username, @Param("password") String password);--><select id="CheckLoginByParam" resultType="User">select * from t_user where username = #{username} and password = #{password}</select>
@Test
public void checkLoginByParam() {SqlSession sqlSession = SqlSessionUtils.getSqlSession();ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);mapper.CheckLoginByParam("admin","123456");
}
  • 建議分成兩種情況進行處理
    1. 實體類類型的參數
    2. 使用@Param標識參數

總結

以上就是Mybatis之核心配置文件詳解、默認類型別名、Mybatis獲取參數值的兩種方式的相關知識點,希望對你有所幫助。
積跬步以至千里,積怠惰以至深淵。時代在這跟著你一起努力哦!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/213197.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/213197.shtml
英文地址,請注明出處:http://en.pswp.cn/news/213197.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

arm-none-eabi-gcc not find

解決辦法&#xff1a;安裝&#xff1a;gcc-arm-none-eabi sudo apt install gcc-arm-none-eabi; 如果上邊解決問題了就不用管了&#xff0c;如果解決不了&#xff0c;加上下面這句試試運氣&#xff1a; $ sudo apt-get install lsb-core看吧方正我是運氣還不錯&#xff0c;感…

leetcode周賽375 - 12 - 10

比賽地址 : 競賽 - 力扣 (LeetCode) t1 : 直接暴力即可 class Solution { public:int countTestedDevices(vector<int>& b) {int n b.size();int ans 0;for(int i0;i<n;i){if(b[i]>0){ans ;for(int ji1;j<n;j){b[j] max(b[j]-1,0);}}}return ans;} };…

SSL 數字證書的一些細節

參考&#xff1a;TLS/SSL 協議詳解(6) SSL 數字證書的一些細節1 證書驗證 地址&#xff1a;https://wonderful.blog.csdn.net/article/details/77867063 參考&#xff1a;TLS/SSL協議詳解 (7) SSL 數字證書的一些細節2 地址&#xff1a;https://wonderful.blog.csdn.net/articl…

Python學習筆記-類

1 定義類 類是函數的集合&#xff0c;class來定義類 pass并沒有實際含義&#xff0c;只是為了代碼能執行通過&#xff0c;不報錯而已&#xff0c;相當于在代碼種占一個位置&#xff0c;后續完善 類是對象的加工廠 2.創建對象 carCar()即是創建對象的過程 3、類的成員 3.1 實例…

福德植保無人機:綠色農業的新篇章

今天&#xff0c;我們榮幸地向您介紹福德植保無人機&#xff0c;一種改變傳統農業種植方式&#xff0c;引領綠色農業的新科技產品。福德植保無人機以其高效、環保、安全的特點&#xff0c;正逐漸成為植保行業的新寵。福德植保無人機是一種搭載了高性能發動機和精確噴灑系統的飛…

代碼隨想錄算法訓練營第四十六天 _ 動態規劃_背包問題總結。

學習目標&#xff1a; 動態規劃五部曲&#xff1a; ① 確定dp[i]的含義 ② 求遞推公式 ③ dp數組如何初始化 ④ 確定遍歷順序 ⑤ 打印遞歸數組 ---- 調試 引用自代碼隨想錄&#xff01; 本文大多數內容引用自代碼隨想錄 60天訓練營打卡計劃&#xff01; 學習內容&#xff1a; …

POJ - 2528 Mayor‘s posters

本題注意離散化的時候可能會出現區間串聯情況&#xff0c;比如 [1,10] [5,10] [1,4] 和 [1,10] [6,10] [1,4] 直接離散化的話兩者一樣&#xff0c;但是實際上是不一樣的 解決辦法是你在相鄰的差不是1的數對中再插一個數就好了 離線區間染色 查詢根節點 #include<iostrea…

ASPICE-汽車軟件開發能力評級

Automotive SPICE&#xff08;簡稱A-SPICE 或 ASPICE&#xff09;&#xff0c;全稱是“Automotive Software Process Improvement and Capacity dEtermination”&#xff0c;即“汽車軟件過程改進及能力評定”模型框架。 常被用于評估一家汽車軟件供應商的軟件開發能力&#x…

數組|73. 矩陣置零 48. 旋轉圖像

73. 矩陣置零 **題目:**給定一個 m x n 的矩陣&#xff0c;如果一個元素為 0 &#xff0c;則將其所在行和列的所有元素都設為 0 。請使用 原地 算法。 題目鏈接&#xff1a;矩陣置零 class Solution {public void setZeroes(int[][] matrix) {Stack<int[]> mapofzerone…

【Python必做100題】之第三題(找出100以內的奇數并打印)

思路&#xff1a; 1、定義一個空列表來存儲所有的奇數 2、判斷是奇數就追加到列表的末尾 3、打印所有的奇數 代碼如下&#xff1a; list [ ] #定義一個列表來存儲所有的奇數 for i in range (1,100):if i % 2 ! 0: #判斷是否為奇數list.append(i) #追加到列表的末尾 prin…

使用draw.io如何讓矩形單個邊框有顏色其余邊框為空白?

方法步驟: 第一步&#xff1a;用戶打開Draw.io軟件&#xff0c;并來到流程圖的編輯頁面上&#xff1b; 第二步&#xff1a;接著在左側的圖形庫中點擊矩形選項&#xff0c;成功將其添加到流程圖的繪制頁面上&#xff1b; 第三步&#xff1a;這時用戶點擊矩形并在右側窗口中點…

C++ //習題2.3 寫出以下程序運行結果。請先閱讀程序,分析應輸出的結果,然后上機驗證。

C程序設計 &#xff08;第三版&#xff09; 譚浩強 習題2.3 習題2.3 寫出以下程序運行結果。請先閱讀程序&#xff0c;分析應輸出的結果&#xff0c;然后上機驗證。 #include <iostream> using namespace std;int main(){char c1 a, c2 b, c3 c, c4 \101, c5 \116…

DL Homework 10

習題6-1P 推導RNN反向傳播算法BPTT. 習題6-2 推導公式(6.40)和公式(6.41)中的梯度 習題6-3 當使用公式(6.50)作為循環神經網絡的狀態更新公式時&#xff0c; 分析其可能存在梯度爆炸的原因并給出解決方法&#xff0e; 當然&#xff0c;因為我數學比較菜&#xff0c;我看了好半…

Vue之數據綁定

在我們Vue當中有兩種數據綁定的方法 1.單向綁定 2.雙向綁定 讓我為大家介紹一下吧&#xff01; 1、單向綁定(v-bind) 數據只能從data流向頁面 舉個例子&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"…

BASH中export使用:命令行中傳入變量

可以看到通過export address/project這句話 定義了一個變量address,數值為/project。

運維06:監控

監控生命周期 1.服務器上架到機柜2.基礎設施監控 服務器溫度&#xff0c;風扇轉速 ipmitool命令&#xff0c;只能用在物理機上 存儲的監控&#xff08;df, fdisk, iotop&#xff09; cpu&#xff08;lscpu, uptime, top, htop, glances&#xff09; 內存情況&#xff08;free&…

MVC Gantt Wrapper:RadiantQ jQuery

The RadiantQ jQuery Gantt Package includes fully functional native MVC Wrappers that let you declaratively and seamlessly configure the Gantt component within your aspx or cshtm pages just like any other MVC extensions. 如果您還沒有準備好轉向完全基于客戶端…

(C++)只出現一次的數字I--異或

個人主頁&#xff1a;Lei寶啊 愿所有美好如期而遇 力扣&#xff08;LeetCode&#xff09;官網 - 全球極客摯愛的技術成長平臺備戰技術面試&#xff1f;力扣提供海量技術面試資源&#xff0c;幫助你高效提升編程技能&#xff0c;輕松拿下世界 IT 名企 Dream Offer。https://le…

OpenAI承認ChatGPT變懶惰,正在修復該問題

OpenAI旗下的官方ChatGPT賬號在社交平臺表示&#xff0c;已經收到了大量用戶關于GPT-4變懶惰的反饋。 這是因為自11月11日以來&#xff0c;OpenAI就沒有更新過該模型。當然這不是故意的&#xff0c;大模型的行為是不可預測的&#xff0c;正在研究修復該問題。 外界猜測&#x…

pip install faiss-gpu 失敗解決方法

安裝 faiss-gpu 失敗解決方法 1. 錯誤信息2. 不好用的解決方法2-1. 不好用的解決方法12-2. 不好用的解決方法22-3. 不好用的解決方法3 3. 好用的解決方法 1. 錯誤信息 Windows x86 平臺安裝 faiss-gpu&#xff0c;發生錯誤&#xff0c; pip install faiss-gpu失敗信息如下&am…